java - android - 服务需要互联网连接

标签 java android android-service android-networking android-syncadapter

因此,我有一项服务应该通过 MQTT 将数据发送到我的服务器。这个发送数据的过程应该每 10 分钟发生一次,并且无论我的应用程序处于什么状态(暂停/停止/销毁)都必须完成。所以,这里的结论是,即使手机处于空闲状态,我的服务也需要互联网连接才能正常运行。

我采用的方法是:使用 AlarmManagerWakefulBroadcastReceiver 来运行第一段中描述的 Service

步骤可以描述如下:

  1. 尝试连接到 MQTT 代理
  2. 连接成功后,做一些逻辑并向服务器发布消息
  3. 消息发布成功后,断开与代理的连接并清理资源

上述子例程应该每 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/

相关文章:

java - 创建名称为 'sessionFactory' 的 bean 时出错

java - 如何在 Eclipse 中的两个 Android 项目之间共享类?

android - 如果我在服务中获得额外服务,为什么 Android 应用程序在关闭应用程序时会崩溃?

java - GXT : Find cell's value in a grid by coordinates

android - 将房间数据库导出到 json 文件

android - V2 map 库是否需要 ACCESS_NETWORK_STATE 权限?

java - 谷歌登录 API 异常 10

android - 绑定(bind)到服务(如果存在)

java - 插入服务中的房间而不更新 Activity 中的 LiveData

Java文本编辑器/解析框架