6

GCM Intent サービスを作成しましたが、デバイスは正常に登録されています。REGISTRATION Intent も受け取りますが、OnMessage または OnRegistered メソッドが呼び出されません。

ログの下に表示されます。

07-23 06:24:23.542: V/GCMBroadcastReceiver(1168): onReceive: com.google.android.c2dm.intent.REGISTRATION
07-23 06:24:23.542: V/GCMBroadcastReceiver(1168): GCM IntentService class: com.app.demo.myApp.GCMIntentService
07-23 06:24:23.581: V/GCMBaseIntentService(1168): Acquiring wakelock

以下は OnMessage のコードです。

OnRegistered または OnMessage が呼び出されない理由を教えてください。

 public class GCMIntentService extends GCMBaseIntentService {



    @Override
    protected void onMessage(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "registered", Toast.LENGTH_LONG).show();
        String device_id = GCMRegistrar.getRegistrationId(this);
        GSLogger.Log("mess_received", device_id);
    }

    @Override
    protected void onRegistered(Context context, String arg1) {
        Toast.makeText(context, "registered", Toast.LENGTH_LONG).show();
        String device_id = GCMRegistrar.getRegistrationId(this);
        GSLogger.Log("registered", device_id);

    }

}

マニフェスト コード:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="8" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-configuration android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="com.google.android.c2dm.permission.C2D_MESSAGE"/>


    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
     <permission android:name="com.app.demo.myApp.permission.C2D_MESSAGE" 
        android:protectionLevel="signature" />
    <uses-permission android:name="com.app.demo.myApp.permission.C2D_MESSAGE" />

マニフェストの受信者コード:

<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.app.demo.myApp" />
          </intent-filter>
        </receiver>
        <service android:name="com.app.demo.myApp.GCMIntentService" />

私のパッケージの写真: ここに画像の説明を入力

4

3 に答える 3

24

問題は

<service android:name="com.app.demo.myApp.GCMIntentService" />

ただ与える

<service android:name=".GCMIntentService" />

GCMIntentService Java ファイルを、マニフェストのパッケージ名で指定されたフォルダーに配置します。

たとえば、com.app.demo.myApp をアプリケーション パッケージ名として宣言したとします。

GCMIntentService を同じフォルダー構造に配置します。

于 2013-07-23T07:51:56.297 に答える
2

マニフェストに潜在的な問題がいくつか見られますが、それらが問題の原因であるかどうかはわかりません。

以下は必須ではありません。

<uses-permission android:name="com.google.android.c2dm.permission.C2D_MESSAGE"/>

あなたはすでに正しい C2D_MESSAGE 権限を持っています:

 <permission android:name="com.app.demo.myApp.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" />
<uses-permission android:name="com.app.demo.myApp.permission.C2D_MESSAGE" />

また、GCM は API レベル 8 からサポートされているため、指定しない方がよいでしょう。android:minSdkVersion="7"

于 2013-07-23T14:28:52.313 に答える