在Android中注册C2DM的问题

时间:2010-09-05 06:56:22

标签: android android-manifest android-c2dm

我正在尝试测试C2DM框架。我几天前收到了确认电子邮件,然后尝试创建一个可以注册的客户端。为此,我按照本教程中描述的步骤创建了一个简单的客户端:http://code.google.com/intl/es-419/android/c2dm/index.html

Android清单文件包含以下代码:

<permission android:name="com.bilthon.ufrj.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.bilthon.ufrj.permission.C2D_MESSAGE" />

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<uses-permission android:name="android.permission.INTERNET"/>

<receiver android:name=".C2DMReceiver" android:permission="com.google.android.c2dm.permission.SEND">

<intent-filter>
   <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
   <category android:name="com.bilthon.ufrj" />
</intent-filter>

<intent-filter>
   <action android:name="com.google.android.c2dm.intent.RECEIVE" />
   <category android:name="com.bilthon.ufrj" />
</intent-filter>
</receiver>

然后,程序启动时启动的主要活动包含以下代码:

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate
registrationIntent.putExtra("sender","mytestemail@gmail.com");
Log.d("WelcomeScreen","mytestemail@gmail.com");
startService(registrationIntent);

我还在运行我的客户端的AVD上注册了一个谷歌帐户,因为他们说这是必需的。但问题是我不能让广播接收器“醒来”。我不知道会出现什么问题。通过分析日志,我可以看到注册意图已经创建并且显然正确使用,但接收器代码从未被执行过,可能出现什么问题?

提前致谢 纳尔逊

4 个答案:

答案 0 :(得分:9)

嗯..刚把它整理出来,问题在于接收器的声明。接收器的标签应该放在应用程序标签内,如下所示:http://developer.android.com/guide/topics/manifest/manifest-intro.html

这是一个用于C2DM应用程序的格式良好的Manifest的示例。感谢Mark Murphy在android-c2dm组发布链接。

抱歉这个愚蠢的错误。

纳尔逊

答案 1 :(得分:3)

我在与它摔跤一段时间之后才开始自己工作。

在清单中,您有

<receiver android:name=".C2DMReceiver" android:permission="com.google.android.c2dm.permission.SEND">

这意味着您需要一个名为C2DMReceiver的类,它在c2dm包中扩展C2DMBaseReceiver。为了实现这一点,我将chrometophone-android示例中的c2dm软件包和C2DMReceiver.java文件复制到我的项目中,并且能够按照预期从C2DM服务器获取注册ID。

答案 2 :(得分:2)

我遇到了同样的问题。我的解决方案是将清单中的所有权限移到应用程序标记之上。

答案 3 :(得分:1)

你可以检查的事情:

1 我注意到您声明了C2DM权限,但不是在您的应用程序中使用,如下所示:

<uses-permission android:name="com.bilthon.ufrj.permission.C2D_MESSAGE" />

2 如果您查看c2dm库,您会看到帮助器C2DMessagingregister方法通过额外调用{{1}来创建意图}}

setPackage