18

GCMRegistrar.onDestroy を呼び出すにはどうすればよいですか? 現在、私の主な活動にはこれが含まれています:

protected void onDestroy() {
    GCMRegistrar.onDestroy(this);
    super.onDestroy();
}

そして、登録または登録解除を行ってからメインアクティビティを強制終了すると、次のようになります。

08-13 15:43:56.459: E/AndroidRuntime(2389): FATAL EXCEPTION: main
08-13 15:43:56.459: E/AndroidRuntime(2389): java.lang.RuntimeException: Unable to destroy activity {com.test.android/com.test.android.activities.MainActivity}: java.lang.IllegalArgumentException: Receiver not registered: com.google.android.gcm.GCMBroadcastReceiver@40673a10
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3090)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3155)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.app.ActivityThread.access$2100(ActivityThread.java:132)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1071)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.os.Looper.loop(Looper.java:150)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.app.ActivityThread.main(ActivityThread.java:4277)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at java.lang.reflect.Method.invokeNative(Native Method)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at java.lang.reflect.Method.invoke(Method.java:507)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at dalvik.system.NativeStart.main(Native Method)
08-13 15:43:56.459: E/AndroidRuntime(2389): Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.google.android.gcm.GCMBroadcastReceiver@40673a10
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:634)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:880)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.content.Contexttester.unregisterReceiver(Contexttester.java:331)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at com.google.android.gcm.GCMRegistrar.onDestroy(GCMRegistrar.java:249)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at com.test.android.activities.MainActivity.onDestroy(MainActivity.java:407)
08-13 15:43:56.459: E/AndroidRuntime(2389):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3072)
08-13 15:43:56.459: E/AndroidRuntime(2389):     ... 11 more

メインフェストから編集:

<receiver android:name=".receivers.PushReceiver"
  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.test.android" />
  </intent-filter>
</receiver>

<service android:name=".services.PushService" />
4

2 に答える 2

52

私はそれを解決したと思います。GCMRegistar.register(context) を実行するとき、2 つの異なるコンテキストを使用しました。これの代わりに getApplicationContext() を使用するように切り替えてください。

于 2012-08-13T15:17:16.170 に答える
8

別の方法。

GCMRegistrar.onDestroy(getApplicationContext());
于 2013-04-24T08:12:38.807 に答える