当应用程序在后台或关闭时,我的 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/