CONNECTIVITY_CHANGE广播Android O.

时间:2017-08-22 13:40:22

标签: android android-wifi android-8.0-oreo

我们有一个基于wifi的应用程序,拥有数百万的客户群。应用程序的核心逻辑是在连接时将用户连接到具有自动登录功能的公共开放热点。申请完全取决于这些广播。

<intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
                <action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>

广播后,应用会检查已连接的wifi热点并尝试自动登录。

在Android O中,app不会收到任何上述广播。看看有广播接收器解决方法的后台服务,似乎android正在停止服务一段时间。

任何建议都表示赞赏。

3 个答案:

答案 0 :(得分:4)

使用numbers<-c(1:282,sample(283:730),731:nrow(df)) df<-df[numbers,] JobSchedulerJobIntentService来实现向后兼容性)。请参阅latest video from Android Developers

使用方法Firebase Job Dispatcher,您可以安排在满足特定网络条件时运行的作业。

引自this thread

  

网络类型可以是以下三个值之一:

     
      
  • JobInfo.NETWORK_TYPE_NONE:无需网络连接。

  •   
  • JobInfo.NETWORK_TYPE_UNMETERED:未计量的WiFi或以太网连接。

  •   
  • JobInfo.NETWORK_TYPE_ANY:任何网络连接(WiFi或手机)。
  •   

JobInfo.Builder.setRequiredNetworkType()符合您的需求。

答案 1 :(得分:1)

取自文档:

  

针对Android 7.0(API级别24)及更高版本的应用无法接收   如果CONNECTIVITY_ACTION声明广播接收器,则广播   在他们的清单中。应用仍会收到CONNECTIVITY_ACTION   广播,如果他们注册他们的BroadcastReceiver   Context.registerReceiver()和该上下文仍然有效。   Monitor for Changes in Connectivity

由于文件和CommonsWare(在评论中提到)使用前台服务并在那里注册您的接收器

答案 2 :(得分:1)

只需在运行时而不是在清单中注册到broadcastReceiver。

如果您需要在始终运行的服务中执行此操作,请在前台服务中执行此操作。

阅读herehere了解更多信息,因为针对Android 7.0及更高版本的应用不再通过清单获得此意图:

  

针对Android 7.0(API级别24)及更高版本的应用无法接收   这个广播,如果他们宣布广播接收器在他们的   表现。如果应用程序注册,他们仍会收到广播   带有Context.registerReceiver()的BroadcastReceiver和那个上下文是   仍然有效。

我已经在运行时轻松地注册了here