2012-08-08 68 views
9

如何獲取registrationId?GCM ACCOUNT_MISSING錯誤

我總是得到ACCOUNT_MISSING錯誤

MainActivity

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, String registrationId) { 
     Log.i(TAG, "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, String errorId) { 
     Log.i(TAG, "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是正確的,也是在項目類路徑中發生

回答

20

ACCOUNT_MISSING錯誤導入gcm.jar時,有在手機上沒有谷歌帳戶。

手機上沒有Google帳戶。 Android應用程序 應該要求用戶打開該帳戶管理器並添加一個Google 帳戶。修復設備端。

檢查here瞭解更多信息。

+0

我在模擬器上運行如何打開帳戶管理器並添加Google帳戶 – user1584912 2012-08-08 14:32:10

+0

從設置頁面可以找到帳戶和同步。您可以在那裏添加新帳戶。 – 2012-08-08 14:37:50

+0

感謝您的回答〜我現在可以獲得registrationId – user1584912 2012-08-08 14:41:40