附表上网时熄灭了AndroidØ

问题描述:

这里工作是我想达到什么:附表上网时熄灭了AndroidØ

  1. 监视网络状态的背景。
  2. 当设备没有互联网。
  3. 触发作业。

Currently我看看,有没有可能时,装置会“没有互联网”状态触发任务。任何解决方法或解决方案?

注:我不喜欢通过前台服务监测设备的互联网连接。

+0

我知道你已经说你不会喜欢前台服务,但你不介意使用一个处理器的postDelayed为每分钟或10分钟上网查是否连接不和如果断开连接,则调用方法。 –

+0

'处理程序允许您发送和处理与线程的MessageQueue关联的消息和可运行对象。所以一个处理程序与一个线程相关联。我应该使用哪个线程进行定期检查?如果我在'main'线程上做这样的操作不会是滥用资源吗?为了实现细致的控制,我甚至可能需要每5秒钟进行一次这种定期检查。 –

+0

用我正在使用的类似的东西来回答。 –

以下是您可以随意使用的任何地方,但请记住它至少应该启动一次,这意味着要么将其放入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秒互联网连接,如果连接不工作,然后它会调用你的方法,它的代码。此外,请注意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 
+0

感谢您的代码。但是这会在'main'线程中运行。我要做的是在单独的工作线程上运行它。我猜除了定期网络检查没有其他办法 –

+0

正如你所做的一样,无论是使用定时器还是使用Alarm Manager或Handler,因为没有像NetworkStateChangeListener那样的,所以从这三者中,最好是Handler,如果延迟小于10分钟。 –

+0

@Shaileshmota我刚刚在Android引用中找到并找到[this](https://developer.android.com/reference/android/telephony/PhoneStateListener.html#onDataConnectionStateChanged(int)),这可能很有用。 –