GCM

2012-08-08 26 views
9

¿Cómo obtener el registrationId?GCM

siempre consigo el error 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> 

Esta es mi 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 

Estoy seguro de que el ID del remitente es correcta y además importan gcm.jar en la ruta de clase del proyecto se produjo

Respuesta

20

error ACCOUNT_MISSING cuando no hay ninguna cuenta de Google en el teléfono.

No hay una cuenta de Google en el teléfono. La aplicación de Android debe solicitar al usuario que abra el administrador de cuenta y agregue una cuenta Google . Fix en el lado del dispositivo.

Compruebe here para obtener más información.

+0

Me ejecutan en el emulador cómo abrir el administrador de cuenta y agregar una cuenta de Google – user1584912

+0

Desde la página de configuración puede encontrar Cuentas y sincronización. Puedes agregar una nueva cuenta allí. –

+0

Gracias por su respuesta ~ Puedo obtener el registro ahora – user1584912

Cuestiones relacionadas