接收器用于棉花糖及以上的Wifi连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接收器用于棉花糖及以上的Wifi连接相关的知识,希望对你有一定的参考价值。

我有一个应用程序需要知道用户何时连接到特定的WiFi网络。该wifi网络可以或可以不向用户提供互联网接入。

在针对android v25及更低版本时,我们可以使用BroadcastReceiver对清单中的android.net.wifi.STATE_CHANGE进行intent-filters。但是,从第26版开始,它就不再是这种情况了。 The documentation states

从Android 8.0(API级别26)开始,系统对清单声明的接收器施加了额外的限制。如果您的应用程序的目标是API级别26或更高级别,则无法使用清单为大多数隐式广播声明接收器(广告不会专门针对您的应用)。当用户主动使用您的应用程序时,您仍然可以使用上下文注册的接收器[原文如此]。

此外,Google要求提交应用以定位最新的API级别。所以,看起来我们必须使用有效的Context注册广播接收器。

那么,我的问题是,当设备连接到可能无法提供互联网连接的特定wifi网络时,我们如何运行一些代码,而不仅仅是我们的Context有效?唯一的解决方案是使用有效的Context注册它,在上下文被破坏时监听,稍后设置一个警报,创建一个新的Context并再次注册接收器?似乎与他们希望我们做的相反,但也是实现这一目标的唯一方法。

答案

您可以使用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

以上是关于接收器用于棉花糖及以上的Wifi连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 应用程序上接收连接的 WiFi 模块/路由器发送的数据?

树莓派,接收两个wifi 怎么设置

如何接收连接类型已更改的通知(3G、Edge、Wifi、GPRS)

如何解决WiFi的国家地区代码冲突?

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片

访问 wifi 的安全异常