android – GCM ACCOUNT_MISSING错误

如何获得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

解决方法

手机上没有Google帐户时发生ACCOUNT_MISSING错误.

There is no Google account on the phone. The Android application
should ask the user to open the account manager and add a Google
account. Fix on the device side.

查看here了解更多信息.

相关文章

###实现效果*本实例主要实现用ViewPage和Fragment实现选项卡...
一、安装 JDK 下载JDK最新版本,下载地址如下: http://www....
这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...