0

私はGoogleクラウドメッセージングの初心者です。GCmの機能をチェックするデモアプリを開発していました。GCMプロジェクトを作成し、デバイスが登録されているかどうかを確認しています。私は次のコードを使用しています、

   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GCMRegistrar.checkDevice(this);
        GCMRegistrar.checkManifest(this);
        final String regId = GCMRegistrar.getRegistrationId(this);
        if (regId.equals("")) {
          GCMRegistrar.register(this, "483910217912");
          Log.d(tag, "Registered");
        } else {
          Log.v(tag, "Already registered");
        }
    }

私のマニフェストファイルは、

   <uses-sdk android:minSdkVersion="8" />
    <!-- App receives GCM messages. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- GCM connects to Google Services. -->
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <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="my_app_package" />
  </intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
        <activity
            android:name=".GCmExampleActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

gsmjarファイルをプロジェクトに含めました。

それが与えるLogcatエラーは、

10-11 13:44:59.001: E/AndroidRuntime(339): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kochar.it.GCM/com.kochar.it.GCM.GCmExampleActivity}: java.lang.UnsupportedOperationException: Device does not have package com.google.android.gsf

エラーはライン上にあります、

GCMRegistrar.checkDevice(this);
4

2 に答える 2

2

間違ったエミュレータを使用しているようです。デフォルトのエミュレーターは、Googleパッケージを持たない通常のAndroidエミュレーターを使用しており、マップ、c2dmなどのあらゆる種類のものを実行することはできません。あなたがしたいのは、GoogleAPIをサポートできる新しいエミュレーターを作成することです。

于 2012-10-11T08:50:16.957 に答える
2

これをエミュレーターで実行しないでください。Googleアカウントが必要だからです。

以下のいずれかを試してください、

  1. GoogleAPIでエミュレータを作成する ここに画像の説明を入力してください
  2. 本物のAndroid携帯で実行
  3. Bluestack(http://bluestacks.com/)で実行します

それはあなたの問題を解決します。:)

于 2012-10-11T08:59:05.910 に答える