我有一个应用程序,需要知道用户何时连接到特定的WiFi网络。该wifi网络可能会也可能不会为用户提供互联网访问。
在定位Android v25及更低版本时,我们可以使用BroadcastReceiver
对清单中的android.net.wifi.STATE_CHANGE
进行意图过滤。但是,从第26版开始,它就不再是这种情况了。 The documentation states:
从Android 8.0(API级别26)开始,系统对清单声明的接收器施加了额外的限制。如果您的应用程序的目标是API级别26或更高级别,则无法使用清单为大多数隐式广播声明接收器(广告不会专门针对您的应用)。当用户正在使用您的应用时,您仍然可以使用上下文注册的接收器[原文如此]。
此外,Google要求提交应用以定位最新的API级别。所以,看起来我们必须使用有效的Context
注册广播接收器。
我的问题是,当设备连接到可能无法提供互联网连接的特定wifi网络时,我们如何运行某些代码 ,而不仅仅是我们的Context
已验证?是使用有效Context
注册它的唯一解决方案,在该上下文被破坏时监听,稍后设置警报以创建新的Context
并再次注册接收器?似乎与他们希望我们做的相反,但也是实现这一目标的唯一方法。
答案 0 :(得分:0)
您可以使用JobScheduler来实现此目的。按如下方式安排工作:
JobScheduler js =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo job = new JobInfo.Builder(
MY_BACKGROUND_JOB,
new ComponentName(context, MyJobService.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.build();
js.schedule(job);
当操作系统触发它时,在JobService
执行操作。可以使用分步教程来实现here