C2D

编程入门 行业动态 更新时间:2024-10-07 16:26:31
C2D_MESSAGE权限错误?(C2D_MESSAGE permission error?)

这似乎是一个相当普遍的问题,没有一个好的答案。 我刚刚关注GCM推送消息的谷歌指南,我收到此错误:

E/AndroidRuntime(21779): java.lang.RuntimeException: Unable to start activity ComponentInfo{eric.bander.app/eric.bander.app.MenuScreen}: java.lang.IllegalStateException: Application does not define permission eric.bander.app.permission.C2D_MESSAGE E/AndroidRuntime(21779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968) E/AndroidRuntime(21779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) E/AndroidRuntime(21779): at android.app.ActivityThread.access$600(ActivityThread.java:127) E/AndroidRuntime(21779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) E/AndroidRuntime(21779): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(21779): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(21779): at android.app.ActivityThread.main(ActivityThread.java:4507) E/AndroidRuntime(21779): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(21779): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(21779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978) E/AndroidRuntime(21779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) E/AndroidRuntime(21779): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(21779): Caused by: java.lang.IllegalStateException: Application does not define permission eric.bander.app.permission.C2D_MESSAGE E/AndroidRuntime(21779): at com.google.android.gcm.GCMRegistrar.checkManifest(GCMRegistrar.java:137) E/AndroidRuntime(21779): at eric.bander.app.MenuScreen.onCreate(MenuScreen.java:43) E/AndroidRuntime(21779): at android.app.Activity.performCreate(Activity.java:4469) E/AndroidRuntime(21779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) E/AndroidRuntime(21779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)

这是我的清单文件:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <permission android:name="eric.bander.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="eric.bander.app.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="eric.bander.app" /> </intent-filter> </receiver>

这是MainMenu中的一段代码:

GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this); final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) { GCMRegistrar.register(this, "808426403545"); } else { Toast.makeText(this, GCMRegistrar.getRegistrationId(this), Toast.LENGTH_LONG).show(); }

我不知道它的相关性,但我的应用程序结构是这样的,在另一个包中使用GCM意图服务:

eric.bander -MainMenu.class eric.bander.misc -GCMIntentService.class

我希望有人可以帮助解决这个问题,当你学习教程时总会感到沮丧。

TIA

This seems to be a fairly common question without a good answer. I've just followed the google guide for GCM push messaging and am getting this error:

E/AndroidRuntime(21779): java.lang.RuntimeException: Unable to start activity ComponentInfo{eric.bander.app/eric.bander.app.MenuScreen}: java.lang.IllegalStateException: Application does not define permission eric.bander.app.permission.C2D_MESSAGE E/AndroidRuntime(21779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968) E/AndroidRuntime(21779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) E/AndroidRuntime(21779): at android.app.ActivityThread.access$600(ActivityThread.java:127) E/AndroidRuntime(21779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) E/AndroidRuntime(21779): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(21779): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(21779): at android.app.ActivityThread.main(ActivityThread.java:4507) E/AndroidRuntime(21779): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(21779): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(21779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978) E/AndroidRuntime(21779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) E/AndroidRuntime(21779): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(21779): Caused by: java.lang.IllegalStateException: Application does not define permission eric.bander.app.permission.C2D_MESSAGE E/AndroidRuntime(21779): at com.google.android.gcm.GCMRegistrar.checkManifest(GCMRegistrar.java:137) E/AndroidRuntime(21779): at eric.bander.app.MenuScreen.onCreate(MenuScreen.java:43) E/AndroidRuntime(21779): at android.app.Activity.performCreate(Activity.java:4469) E/AndroidRuntime(21779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) E/AndroidRuntime(21779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)

Here is my manifest file:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <permission android:name="eric.bander.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="eric.bander.app.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="eric.bander.app" /> </intent-filter> </receiver>

This is the piece of code in MainMenu:

GCMRegistrar.checkDevice(this); GCMRegistrar.checkManifest(this); final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) { GCMRegistrar.register(this, "808426403545"); } else { Toast.makeText(this, GCMRegistrar.getRegistrationId(this), Toast.LENGTH_LONG).show(); }

And I don't know if its relevant but my app strucutre is like this with the GCM intent service in another package:

eric.bander -MainMenu.class eric.bander.misc -GCMIntentService.class

I hope someone can help with this, always frustrating when you are following a tutorial.

TIA

最满意答案

我的错误是将GCMIntentService放在与注册GCM的类不同的包中。

My error was having GCMIntentService in a different package to the class that registered the GCM.

更多推荐

本文发布于:2023-07-09 10:07:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1085531.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:C2D

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!