检查网络连接android

Fro*_*rog 1 service android broadcastreceiver android-networking intentservice

我是ServiceAndroid的新用户,我很困惑.我有和Activity我想检查网络连接的所有时间(wifi或3g).我实现了一个简单的Service和一个BroadcastReveiver.

这里的代码 Service

public class NetworkCheck extends IntentService {

private final String CONNECTION = "connection";

public NetworkCheck(String name) {
    super(name);
}

@Override
protected void onHandleIntent(Intent workIntent) {

    ConnectivityManager conMgr = (ConnectivityManager)getSystemService(getApplicationContext().CONNECTIVITY_SERVICE);


    String dataString = workIntent.getDataString();

    if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
            || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {

        // notify user you are not online
        Intent localIntent = new Intent().putExtra(CONNECTION, 0);

        LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);

    }
}
Run Code Online (Sandbox Code Playgroud)

这里的代码 BroadcastReceiver

public class NetworkReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

     int value = intent.getIntExtra("connection", 0);
     if(value == 0){
         //now I print, then I will show up a dialog
         System.out.println("NO CONNECTION!!!!!!!!");

     }

    }
}
Run Code Online (Sandbox Code Playgroud)

这是用户的权限 Manifest

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)

这里有我在我的onCreate方法中放入的代码Activity

this.intent = new Intent(this, NetworkCheck.class);
        this.startService(this.intent);

        LocalBroadcastManager.getInstance(this).registerReceiver(new NetworkReceiver(), new IntentFilter());
Run Code Online (Sandbox Code Playgroud)

这不起作用,我无法弄清楚为什么.

Jor*_*sys 5

不建议一直检查连接,只在需要时调用它:

WiFi:

public boolean isConnectedWifi(Context context) {
         ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);     
         return networkInfo.isConnected();
}
Run Code Online (Sandbox Code Playgroud)

3G:

public boolean isConnected3G(Context context) {
         ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);     
         return networkInfo.isConnected();
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,你的电池会耗尽.= O (2认同)