当应用程序处于前台时,检测Android 7.0 Nougat上的连接更改

REJ*_*EJH 9 android android-7.0-nougat

Nougat改变了它处理CONNECTIVITY_CHANGED意图的方式(基本上忽略了它,迫使开发人员使用作业调度程序)所以这让我感到疑惑:

如果我有一个正在检索某些数据的应用程序(我检查了手机是否在线时,我做了请求,但用户正在移动,手机连接到不同的WiFi接入点,例如)它失败了,我如何检测到连接已经恢复并且我重新尝试取出数据?

所以在这种情况下我的应用程序在前台,我认为Chrome(用于Android)具有类似的功能.

我需要自己轮询吗?或者当时是否允许某些事件?

col*_*ots 10

虽然可以使用Andromeda的答案,但该解决方案并非谷歌的预期选择.您的问题是当连接丢失并且您需要在网络服务返回时恢复操作时该怎么办.

虽然CONNECTIVITY_CHANGE在技术上有效,但对于这个特定的需求来说总是有点破解,一旦你的应用程序进入后台,它就会停止在Nougat中工作.您真正应该使用的是作业调度程序API.Google为我们提供了许多具有不同要求和功能的选项.

  1. 的jobscheduler

在Lollipop中添加了JobScheduler并添加了一个调度程序,可以等待网络连接来安排作业.它甚至可以取决于连接类型,检查未计量或非漫游连接.此选项没有向后兼容性,但无需Google Play服务.

  1. GCM网络管理员

GcmNetworkManager是Lollipop之前版本的JobScheduler功能的直接端口,但它需要Google Play服务.Firebase Job Dispatcher主要弃用了GcmNetworkManager.

  1. Firebase Job Dispatcher

Firebase JobDispatcher提供了另一种方法来为Lollipop之前的版本安排作业,Lollipop默认使用Google Play服务,但可以配置为不需要此依赖项.

所有这三个选项都将以电池友好的方式满足您的需求,即使设备从打盹模式中短暂唤醒,您的作业仍将安排.

以下是Google提供的各种选项的更多信息:

https://developer.android.com/topic/performance/scheduling.html https://developer.android.com/topic/performance/background-optimization.html#sched-jobs


Ami*_*deh 6

根据文件:

针对Android 7.0(API级别24)及更高版本的应用CONNECTIVITY_ACTION如果在清单中声明其广播接收器,则不会接收广播.应用程序仍然会收到CONNECTIVITY_ACTION,如果他们注册的广播节目BroadcastReceiverContext.registerReceiver()和这方面仍然有效.


小智 4

正在运行的应用程序仍然可以监听CONNECTIVITY_CHANGE使用 BroadcastReceiver 请求通知,则它们仍然可以在其主线程上侦听。

https://developer.android.com/about/versions/nougat/android-7.0-changes.html