这是我想要实现的目标:
Currently我看到,当设备进入“无互联网”状态时,无法触发工作。任何变通方法或解决方案?
注意:我不希望通过前台服务监控设备互联网连接。
答案 0 :(得分:0)
以下是您可以在任何地方使用的内容,但请记住它应该至少启动一次,这意味着要么将其放在onCreate
中,要么在方法中,然后至少调用一次方法。
< / p>
Handler handler = new Handler();
int timeDelay = 5000; //5 seconds
handler.postDelayed(new Runnable(){
public void run(){
if(!isOnline)
{
yourMethodCall();
}
handler.postDelayed(this, timeDelay );
}
}, delay);
public boolean isOnline() throws InterruptedException, IOException {
String command = "ping -c 1 google.com";
return (Runtime.getRuntime().exec(command).waitFor() == 0);
}
这是每隔5秒检查 WORKING 互联网连接的代码,如果连接不起作用,则会调用您的方法。另请注意,Handler代码将放在方法中,isOnline()是一种方法。
在此处工作是突出显示的,因为如果没有互联网连接WiFi(基本上是没有互联网的热点),检查互联网连接的最常见方式实际上返回true。但是,由于您只想检查没有连接,您也可以使用此代码。
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
但是如果使用这种方式,你必须在AndroidManifest.XML中声明一个<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
使用它,它会很好用。
是的,它将在后台运行。在我的应用程序中没有问题,但是一些用户报告使用ping来检查连接的isOnline()
方法有时会在没有收到ping持续5秒的情况下冻结线程。因此,如果您遇到这种情况,则必须使用isNetworkAvailable()方法,直到isOnline()
更好。
编辑 -
在查看Android References时,我发现了这个:
void onDataConnectionStateChanged (int state)
这可用于确定网络状态更改。
默认状态为:
DATA_DISCONNECTED
DATA_CONNECTING
DATA_CONNECTED
DATA_SUSPENDED