这是我想要实现的目标:
- 在后台监控网络状态。
- 当设备没有互联网时。
- 触发作业。
目前我看到,当设备进入“无互联网”状态时,不可能触发作业。任何解决方法或解决方案?
注意:我不喜欢通过前台服务监控设备互联网连接。
这是我想要实现的目标:
目前我看到,当设备进入“无互联网”状态时,不可能触发作业。任何解决方法或解决方案?
注意:我不喜欢通过前台服务监控设备互联网连接。
这是您可以在任何地方使用的内容,但请记住它应该至少启动一次,这意味着要么将其放入一个方法中,要么将其放入onCreate
一个方法中,然后至少调用该方法一次。
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 Internet 连接的代码,如果连接不工作,那么它将在其中调用您的方法。另外,请注意 Handler 代码将放在一个方法中,而 isOnline() 是一个方法。
突出显示此处的工作是因为如果 WiFi 在没有 Internet 的情况下连接(基本上是没有 Internet 的热点),则检查 Internet 连接的最常见方法实际上返回 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" />
使用它,它会很好用。
是的,它将在后台运行。在我的应用程序中不是问题,但一些用户报告说isOnline()
,使用 ping 检查连接的方法有时会在 5 秒内未收到 ping 的情况下冻结线程。因此,如果您遇到这种情况,您必须使用 isNetworkAvailable() 方法,直到那时isOnline()
更好。
编辑-
在查看Android References时,我发现了这个:
void onDataConnectionStateChanged (int state)
这可用于确定网络状态变化。默认状态为:
DATA_DISCONNECTED
DATA_CONNECTING
DATA_CONNECTED
DATA_SUSPENDED