如何获得registrationId?
我总是得到ACCOUNT_MISSING错误
主要活动
package com.example.gcm; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.support.v4.app.NavUtils; import com.google.android.gcm.GCMRegistrar; public class MainActivity extends Activity { private static final String SENDER_ID = "45552950387"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this); final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) { GCMRegistrar.register(this,SENDER_ID); Log.d("show","Already registered1"+regId); } else { Log.d("show","Already registered"); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main,menu); return true; } }
GCMIntentService
package com.example.gcm; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.util.Log; import com.google.android.gcm.GCMBaseIntentService; public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; public GCMIntentService() { super("45552950387"); } @Override protected void onRegistered(Context context,String registrationId) { Log.i(TAG,"Device registered: regId = " + registrationId); } @Override protected void onUnregistered(Context context,"Device unregistered"); } @Override protected void onMessage(Context context,Intent intent) { Log.i(TAG,"Received message"); String a = intent.getStringExtra("A"); generateNotification(context,a); } @Override protected void onDeletedMessages(Context context,int total) { Log.i(TAG,"Received deleted messages notification"); } @Override public void onError(Context context,String errorId) { Log.i(TAG,"Received error: " + errorId); } @Override protected boolean onRecoverableError(Context context,"Received recoverable error: " + errorId); return super.onRecoverableError(context,errorId); } private void generateNotification(Context context,String message) { NotificationManager notificationManager = (NotificationManager) context .getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification(); notification.icon = R.drawable.ic_launcher; notification.tickerText = "notification on status bar."; notification.defaults = Notification.DEFAULT_ALL; notification.setLatestEventInfo(context,"Title",message,null); notificationManager.notify(0,notification); } }
AndroidManifest.xml中
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.gcm" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <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" /> <permission android:name="com.example.gcm.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <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.example.gcm" /> </intent-filter> </receiver> <service android:name="com.example.gcm.GCMIntentService" /> </application>
这是我的LogCat
08-08 13:54:19.844: D/dalvikvm(618): GC_EXPLICIT freed 45K,49% free 2751K/5379K,external 1625K/2137K,paused 58ms 08-08 13:54:22.944: D/GCMRegistrar(618): resetting backoff for com.example.gcm 08-08 13:54:22.944: V/GCMRegistrar(618): Registering app com.example.gcm of senders 45552950387 08-08 13:54:22.994: D/show(618): Already registered1 08-08 13:54:23.224: V/GCMBroadcastReceiver(618): onReceive: com.google.android.c2dm.intent.REGISTRATION 08-08 13:54:23.224: V/GCMBroadcastReceiver(618): GCM IntentService class: com.example.gcm.GCMIntentService 08-08 13:54:23.224: V/GCMBaseIntentService(618): Acquiring wakelock 08-08 13:54:23.464: V/GCMBaseIntentService(618): Intent service name: GCMIntentService-45552950387-3 08-08 13:54:23.504: D/GCMBaseIntentService(618): handleRegistration: registrationId = null,error = ACCOUNT_MISSING,unregistered = null 08-08 13:54:23.504: D/GCMBaseIntentService(618): Registration error: ACCOUNT_MISSING 08-08 13:54:23.524: I/GCMIntentService(618): Received error: ACCOUNT_MISSING 08-08 13:54:23.524: V/GCMBaseIntentService(618): Releasing wakelock
我确定发件人ID是正确的,并在项目类路径中导入gcm.jar