我对Android上的GCM有问题。它无法在我的一个测试设备(droid2)上执行onRegistered()回调或返回一个好的regid,但在另一个设备(galaxy nexus)上运行得非常好。
我遵循的是基本示例here。打电话的人看起来是这样的:

GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);

final String regId = GCMRegistrar.getRegistrationId(this);

if (regId.equals(""))
    GCMRegistrar.register(this, Constants.SENDER_ID);
else
    Log.v(TAG, "Already registered");

我的清单上写着:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />


<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="com.gcl.myapp" />
    </intent-filter>
</receiver>

为什么onRegistered()回调不起作用?是什么导致它在一个设备上工作,而在另一个设备上却失败了?谢谢。

最佳答案

如果它可以在某些设备上工作,但不能在其他设备上工作,则需要使用以下操作之一:
在android 4.0.4之前,设备需要一个有效的google帐户才能工作。
GCM仅适用于Play Store应用程序和API 8以后的设备。
您的清单格式不正确-请使用lint进行检查!
设备/应用程序已注册,播放实现可能不再返回..先试试GCMRegistrar.unregister(this);
希望能有帮助!

07-27 18:54