1

我在我的应用程序上使用 GCM,但是当我尝试注册我的设备时,不会调用 GCMIntentService 上的 onRegistered 方法。

我在我的设备上安装了 GCM 演示应用程序,它可以工作:

http://developer.android.com/guide/google/gcm/demo.html

在这个应用程序中,设备已注册,我可以向它发送消息。我尝试使用相同的 GCMIntentService 在我自己的应用程序中使用 GCM。我也调整了清单,但是当我尝试注册时,这就是我的日志中出现的内容:

09-25 10:00:10.195: V/GCMRegistrar(591): 注册应用程序 com.pfc.dps 的发件人 38322290XXXXX

没有别的,我没有得到任何回应。这些是我的清单权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pfc.dps"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>

<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.USE_CREDENTIALS"></uses-permission>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>

<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- Creates a custom permission so only this app can receive its messages. -->
<permission
    android:name="com.pfc.dps.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission
    android:name="com.pfc.dps.permission.C2D_MESSAGE" />

<!-- This app has permission to register and receive data message. -->
<uses-permission
    android:name="com.google.android.c2dm.permission.RECEIVE" />

我在 Google API 控制台中创建了一个新项目以检查它是否以这种方式工作,但使用任何发件人 ID 都会得到相同的结果。

有谁知道这是为什么?

谢谢!

4

1 回答 1

4

在“Registering app *your_package* of senders *sender_id* ”之后

你应该会收到一个onReceive事件,它会叫你GCMIntentService唤醒你的应用程序。

如果您没有,请检查您是否错过了收件人或忘记更改您自己的包裹的类别。

<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver"
          android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
       <action android:name="com.google.android.c2dm.intent.RECEIVE" />
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
       <category android:name="***your_package***" />
     </intent-filter>
</receiver>
于 2012-09-26T16:34:23.207 回答