GCMRegistrar.onDestroy(上下文)崩溃,接收器未注册 [英] GCMRegistrar.onDestroy(context) crashing, Receiver not registered
本文介绍了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屋!
查看全文