首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CONNECTIVITY_CHANGE广播Android

CONNECTIVITY_CHANGE广播Android
EN

Stack Overflow用户
提问于 2017-08-22 13:40:21
回答 3查看 4.2K关注 0票数 4

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

代码语言:javascript
复制
<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中,应用程序没有接收到上述任何广播。考虑到后台服务的广播接收机解决办法,似乎android正在停止服务的一段时间。

任何建议都是非常感谢的。

EN

回答 3

Stack Overflow用户

发布于 2017-08-22 14:10:29

使用JobScheduler (JobIntentServiceFirebase Job Dispatcher进行向后兼容性)。请参考Android开发者的最新视频

使用JobInfo.Builder.setRequiredNetworkType()方法,您可以安排作业在满足特定网络条件时运行。

引用这条线

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

  • JobInfo.NETWORK_TYPE_NONE:不需要网络连接。
  • JobInfo.NETWORK_TYPE_UNMETERED:一种未计量的WiFi或以太网连接。
  • JobInfo.NETWORK_TYPE_ANY:任何网络连接(WiFi或蜂窝)。

JobInfo.NETWORK_TYPE_UNMETERED可以满足你的需要。

票数 4
EN

Stack Overflow用户

发布于 2018-04-11 12:09:54

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

如果您需要在总是运行的服务中这样做,请在前台服务中这样做。

要获得更多信息,请阅读这里这里,因为针对Android7.0及以上版本的应用程序将不再通过清单达到此目的:

如果应用程序在清单中声明广播接收器,则针对Android7.0 (API 24级)及更高级别的应用程序不会接收此广播。如果应用程序将其BroadcastReceiver注册到Context.registerReceiver(),并且该上下文仍然有效,它们仍将接收广播。

我已经做了一种在运行时注册的简单方法,这里

票数 2
EN

Stack Overflow用户

发布于 2017-08-22 13:53:23

从医生那里拿来的:

针对Android7.0(APILevel24)及更高级别的应用程序如果在清单中声明广播接收器,则不会接收CONNECTIVITY_ACTION广播。如果应用程序向CONNECTIVITY_ACTION ()注册BroadcastReceiver,并且该上下文仍然有效,它们仍将接收Context.registerReceiver广播。监测连接性中的更改

正如所提到的Docs和CommonsWare (在注释中),使用前台服务并在那里注册您的接收器

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45819298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档