android - 即使后台数据关闭也想接收 GCM

标签 android notifications google-cloud-messaging

当应用程序在后台或关闭时,我的 GCM 实现正常工作,这是应该的。

但是当禁用“后台数据”(在设备的“帐户和同步”设置中)时,我不再收到 GCM 通知。

我不是 100% 确定这是否是“后台数据”设置的唯一原因,但根据我们的实验,“后台数据”似乎是应用程序是否接收 GCM 的变量。

我的第一个问题:

这是预期的行为,还是我们做错了根本性的事情?

我的第二个问题:

我从一位程序员同事那里听说,有些人创建了一个新服务以在后台运行并监听传入的 GCM。

我仍在尝试弄清楚这背后的逻辑,但这听起来像是一个可行的选择吗?

抱歉,我的问题含糊不清。

我仍在为这个问题的解决方案设计而苦苦挣扎,所以...

最佳答案

与 Google Play 要求启用后台数据的方式相同 Google Play ,我想 GCM 会这样做。

当您尝试访问 GCM 并且手机上没有注册帐户时,GCM 服务会返回错误 ACCOUNT_MISSING,当您检测到错误时,您应该重定向到 ACCOUNT_SETTINGS,以便用户可以添加谷歌邮件。 之后,您必须使用 ConnectivityManager 函数 getBackgroundDataSetting() 检测是否启用了后台数据。

注意它,它在 >= 14 API 上已被弃用,您将不得不使用 getActiveNetworkInfo() 来查看应用程序是否断开连接,因为用户已禁用后台数据。

如果您看到最后一个链接,则可以通过其他方式使用过滤器 ACTION_BACKGROUND_DATA_SETTING_CHANGED 注册监听器(但在 API 16 上已弃用)。

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);

关于android - 即使后台数据关闭也想接收 GCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362432/

相关文章:

java - 如何通过 Intent 将数据从当前 Activity 发送到新 Activity ?

android - 创建 Hilt viewModel 时出错

android - gcm.notification.e=1 在 Android 上的推送通知负载中代表什么?

c# - 来自 Windows 10 桌面应用程序的 Toast 通知中的意外行为

java - Android 通知应用程序无法正常工作

java - Android 服务 - SocketIO - GCM - 与 Activity 通信

android - 手势捕获的 Flutter 异常。在 showModalBottomSheet 中找不到 MediaQuery 小部件

android - 设置 LinearLayout 的最大宽度

android - android 中的 gcm 注册失败

google-api - 导致 getGoogleAppId 失败并显示状态错误的 Android Wear 应用