GCMRegistrar.onDestroy(上下文)崩溃,接收器未注册 [英] GCMRegistrar.onDestroy(context) crashing, Receiver not registered

查看:336
本文介绍了GCMRegistrar.onDestroy(上下文)崩溃,接收器未注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我应该如何调用GCMRegistrar.onDestroy?目前,我的主要活动包含这样的:

 保护无效的onDestroy(){
    GCMRegistrar.onDestroy(本);
    super.onDestroy();
}
 

和做登记或注销,然后杀的主要活动我收到此之后:

  08-13 15:43:56.459:E / AndroidRuntime(2389):致命异常:主要
08-13 15:43:56.459:E / AndroidRuntime(2389):java.lang.RuntimeException的:无法破坏活动{com.test.android/com.test.android.activities.MainActivity}:java.lang.IllegalArgumentException异常:接收器未注册:com.google.android.gcm.GCMBroadcastReceiver@40673a10
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3090)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3155)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.app.ActivityThread.access $ 2100(ActivityThread.java:132)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1071)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.os.Handler.dispatchMessage(Handler.java:99)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.os.Looper.loop(Looper.java:150)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.app.ActivityThread.main(ActivityThread.java:4277)
08-13 15:43:56.459:E / AndroidRuntime(2389):在java.lang.reflect.Method.invokeNative(本机方法)
08-13 15:43:56.459:E / AndroidRuntime(2389):在java.lang.reflect.Method.invoke(Method.java:507)
08-13 15:43:56.459:E / AndroidRuntime(2389):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
08-13 15:43:56.459:E / AndroidRuntime(2389):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-13 15:43:56.459:E / AndroidRuntime(2389):在dalvik.system.NativeStart.main(本机方法)
08-13 15:43:56.459:E / AndroidRuntime(2389):java.lang.IllegalArgumentException异常:由接收器造成未注册:com.google.android.gcm.GCMBroadcastReceiver@40673a10
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:634)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.app.ContextImpl.unregisterReceiver(ContextImpl.java:880)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.content.Contexttester.unregisterReceiver(Contexttester.java:331)
08-13 15:43:56.459:E / AndroidRuntime(2389):在com.google.android.gcm.GCMRegistrar.onDestroy(GCMRegistrar.java:249)
08-13 15:43:56.459:E / AndroidRuntime(2389):在com.test.android.activities.MainActivity.onDestroy(MainActivity.java:407)
08-13 15:43:56.459:E / AndroidRuntime(2389):在android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3072)
08-13 15:43:56.459:E / AndroidRuntime(2389):11 ...更多
 

编辑,从mainfest:

 <接收机器人:名称=。receivers.PushReceiver
  机器人:权限=com.google.android.c2dm.permission.SEND>
  <意向滤光器>
    <作用机器人:名称=com.google.android.c2dm.intent.RECEIVE/>
    <作用机器人:名称=com.google.android.c2dm.intent.REGISTRATION/>

    <类机器人:名称=com.test.android/>
  &所述; /意图滤光器>
< /接收器>

<服务机器人。services.PushServiceNAME = />
 

解决方案

我想我解决了它。在做GCMRegistar.register(上下文),我用了两个不同的语境。切换到使用getApplicationContext(),而这个工作得很好。

How should I call GCMRegistrar.onDestroy? Currently my main activity contains this:

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

And after doing a registration or unregistration and then killing the main activity I am getting this:

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

Edit, from the mainfest:

<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" />

解决方案

I think I solved it. When doing GCMRegistar.register(context), I used two different contexts. Switch to using getApplicationContext() instead of this worked fine.

这篇关于GCMRegistrar.onDestroy(上下文)崩溃,接收器未注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆