我想在Android中运行用于互联网检查的后台进程

时间:2015-11-03 17:42:43

标签: android

我想要一个像后台运行的异步任务这样的后台进程。如何在Android中将互联网连接检查作为后台进程运行?

2 个答案:

答案 0 :(得分:2)

尝试通过广播接收器侦听连接状态更改。

清单寄存器接收器中的

    <receiver android:name=".MyReceiver">
       <intent-filter>
          <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
       </intent-filter>
    </receiver>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

广播接收器的Java类:

public class MyReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
     Log.d("app","Network connectivity change");
     if(intent.getExtras()!=null) {
        NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
        if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
            Log.i("app","Network "+ni.getTypeName()+" connected");
        } else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
            Log.d("app","There's no network connectivity");
        }
   }
}

答案 1 :(得分:0)

编辑:我已更新代码

将以下权限添加到您的清单:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

然后通过这种方法,您可以知道互联网是否可用:

public boolean networktest() {
        boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                    haveConnectedWifi = true;
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                if (ni.isConnected())
                    haveConnectedMobile = true;

        }
        if (haveConnectedWifi == false && haveConnectedMobile == false) {
            return false;
        } else {
            return true;
        }
    }

使用异步任务定期检查互联网连接

class FooFailAsync extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... param) {
        try {
            while (!networktest()) {
                System.out.println("still not connected");
                Thread.sleep(1000);
            }
            System.out.println("mobile data or wifi connected");
            //do something after connecting mobile data or wifi
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return "Working";
    }
}