【问题标题】:Handle Google C2DM intents in a service?在服务中处理 Google C2DM 意图?
【发布时间】:2011-11-06 01:40:55
【问题描述】:

如果我正确设置了我的 Android Manifest XML 文件,我可以在常规服务而不是广播接收器中处理 C2DM 意图(注册和接收)吗?

显然,需要为此设计应用程序,但我只是好奇这是否可能,或者是否有某些东西将 C2DM 意图限制为广播接收器,因为我在网上阅读的每个示例都使用广播接收器,但在我看来,人们也可以使用服务。

【问题讨论】:

    标签: android service broadcastreceiver android-c2dm


    【解决方案1】:

    引用GoogleAndroid 设备上的应用程序无需运行即可接收消息。系统会在消息到达时通过 Intent 广播唤醒应用程序,只要应用程序设置了正确的广播接收器和权限。

    所以,不。接收消息的唯一方法是在广播接收器中。这没什么大不了的。通常,您会收到消息,然后调用服务。 Google 甚至为您提供了标准实现。 Google IO 会话Android + App Engine: A Developer’s Dream Combination 使用向导(请参阅下面的安装)来生成代码。

    搜索 C2DMBaseReceiverC2DMBroadcastReceiverC2DMessaging,例如在 ChromeToPhone 中 code:您对这 3 个类所做的只是提供一个继承自 C2DMBaseReceiver 的类 C2DMReceiver 并设置列出清单。

    更新
    谷歌博客关于Client Login key expiration。因此,我希望插件得到更新以包含处理该问题的源。与上面的会议视频相比,有些事情发生了变化。首先,您必须额外安装 android 向导(它不是 Google 插件的一部分):
    然后如视频中所述,您必须使用此向导:
    在生成的项目中,您可以找到c2dm.jarc2dm-sources.jar。这些文件遍布互联网,但没有下载最新版本的家庭位置。所以你必须通过向导生成它们。来源不包含版本注释,也不处理密钥过期问题。

    【讨论】:

    【解决方案2】:

    不,但您可以在广播接收器中接收广播,然后从中启动服务。

    【讨论】:

    • 但是Service 不能以“广播”Intent 开头。更好的方法是使用BroadcastReceiver,然后调用startService(...) 来处理要使用的Service
    • 我不太确定,但是是的。我刚刚改变了答案。
    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多