检测用户已断开Android Nougat中的Wifi

时间:2017-09-01 19:56:20

标签: android android-wifi android-broadcastreceiver android-7.0-nougat android-jobscheduler

当应用处于后台模式时,我们如何检测到用户已断开Wi-Fi连接?

众所周知,在Android 7.0之后,当发送CONNECTIVITY_ACTION广播意图时,我们的BroadcastsReceveirs不再被触发。由于我的应用程序在后台运行,因此无法手动/以编程方式注册BroadcastReceiver。

我尝试安排JobService,当用户跳过 一个Wi-Fi网络(NETWORK_TYPE_UNMETERED要求)时效果很好,但当用户直接跳出WiFi时它不起作用一个没有互联网的国家。就像用户有无SIM卡一样。

JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(new JobInfo.Builder(JOB_ID,
   new ComponentName(this, NoInternetJobService.class))
   .setRequiredNetworkType(JobInfo.NETWORK_TYPE_METERED)
   .build());

通过上面的示例,如果用户跳出WiFi并连接到METERED连接(带有数据的SIM卡),我的JobService将被触发。

有些人可以说,使用JobInfo.NETWORK_TYPE_NONE来满足网络要求,但这只是预定作业的默认值。我基本上是告诉jobScheduler不要查看网络参数来运行我的工作,因为我根本不需要互联网。所以它会在我安排它的那一刻执行,因为我没有任何其他要求。

有什么想法?我开始认为它不能在牛轧糖或更高的水中完成。

1 个答案:

答案 0 :(得分:0)

解决方案 - 收听android.net.wifi.STATE_CHANGE广播而不是android.net.conn.CONNECTIVITY_CHANGE意图。