因此,我有一项服务应该通过 MQTT 将数据发送到我的服务器。这个发送数据的过程应该每 10 分钟发生一次,并且无论我的应用程序处于什么状态(暂停/停止/销毁)都必须完成。所以,这里的结论是,即使手机处于空闲状态,我的服务也需要互联网连接才能正常运行。
我采用的方法是:使用 AlarmManager
和 WakefulBroadcastReceiver
来运行第一段中描述的 Service
。
步骤可以描述如下:
- 尝试连接到 MQTT 代理
- 连接成功后,做一些逻辑并向服务器发布消息
- 消息发布成功后,断开与代理的连接并清理资源
上述子例程应该每 10 分钟执行一次。
现在的问题是,在空闲状态 3-4 分钟后,我的服务无法连接到 MQTT 代理,因为似乎没有互联网连接。 我通过以下方式检查了互联网连接:
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
Log.wtf(TAG, "internet: " + (activeNetworkInfo != null && activeNetworkInfo.isConnected());
如何为我的服务获取 Internet 访问权限?我唯一没有尝试过的是使用 evernote/android-job .但在此之前,我想获得一些信息,因为我怀疑我能解决这个问题的唯一方法是每次运行我的服务时以某种方式获取互联网访问权限。
我浏览了很多关于这个主题的内容,但我所遇到的只是与“如何在后台服务中检查互联网连接”相关的答案,这不是什么我需要。我需要的是“每次我的服务运行时手机空闲时如何获取互联网连接?”
请询问我是否需要代码 fragment 或我未能包含在上面的其他信息。提前致谢。
最佳答案
使用 Sync Adapter .它会适时在后台同步您的数据,以防止不必要的电池消耗和服务费用。
关于java - android - 服务需要互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43908476/