Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序在Android上通过谷歌云消息强制关闭_Android_Google Cloud Messaging - Fatal编程技术网

应用程序在Android上通过谷歌云消息强制关闭

应用程序在Android上通过谷歌云消息强制关闭,android,google-cloud-messaging,Android,Google Cloud Messaging,我正在制作我自己的Android应用程序,并在开发过程中发现了GCM(谷歌云消息)。我严格遵循了以下教程: 好消息是,除了每次我发送推送通知时,设备上的应用程序强制关闭外,几乎所有功能都正常工作。我认为Eclipse项目没有任何问题,我正在我的设备上运行Android 4.2.2。没有编译错误。我不明白为什么应用程序总是强制关闭,这让我抓狂 代码与上面链接中列出的代码完全相同。以下是我的日志,仅供参考: E/AndroidRuntime( 7261): FATAL EXCEPTION: main

我正在制作我自己的Android应用程序,并在开发过程中发现了GCM(谷歌云消息)。我严格遵循了以下教程:

好消息是,除了每次我发送推送通知时,设备上的应用程序强制关闭外,几乎所有功能都正常工作。我认为Eclipse项目没有任何问题,我正在我的设备上运行Android 4.2.2。没有编译错误。我不明白为什么应用程序总是强制关闭,这让我抓狂

代码与上面链接中列出的代码完全相同。以下是我的日志,仅供参考:

E/AndroidRuntime( 7261): FATAL EXCEPTION: main
E/AndroidRuntime( 7261): java.lang.RuntimeException: Unable to instantiate receiver com.javapapers.android.GcmBroadcastReceiver: java.lang.ClassNotFoundException: Didn't find class "com.javapapers.android.GcmBroadcastReceiver" on path: /data/app/com.javapapers.android-1.apk
E/AndroidRuntime( 7261):        at android.app.ActivityThread.handleReceiver(ActivityThread.java:2428)
E/AndroidRuntime( 7261):        at android.app.ActivityThread.access$1600(ActivityThread.java:151)
E/AndroidRuntime( 7261):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1358)
E/AndroidRuntime( 7261):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 7261):        at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 7261):        at android.app.ActivityThread.main(ActivityThread.java:5285)
E/AndroidRuntime( 7261):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 7261):        at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 7261):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
E/AndroidRuntime( 7261):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
E/AndroidRuntime( 7261):        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:126)
E/AndroidRuntime( 7261):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 7261): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.javapapers.android.GcmBroadcastReceiver" on path: /data/app/com.javapapers.android-1.apk
E/AndroidRuntime( 7261):        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
E/AndroidRuntime( 7261):        at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime( 7261):        at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime( 7261):        at android.app.ActivityThread.handleReceiver(ActivityThread.java:2423)
E/AndroidRuntime( 7261):        ... 11 more
W/GTalkService( 1430): [DataMsgMgr] broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.javapapers.android (has extras) }
我的清单如下所示:

    <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<permission
    android:name="com.javapapers.android.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

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

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="16" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

    <activity
        android:name=".RegisterActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name="com.javapapers.android.MainActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="@string/app_name" >
    </activity>

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

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


我正绞尽脑汁想弄清楚到底出了什么问题,所以非常感谢您的任何帮助。

您的
GcmBroadcastReceiver
位于哪个软件包中


当使用
前缀时,就像您在声明
.GcmBroadcastReceiver
时所做的那样,
将转换为您的包名。因此,除非
GcmBroadcastReceiver
位于
com.javapapers.android
中,否则它将无法工作。

即使我也面临同样的担忧。右键单击project go to->build Path->Config build Path->order and export->选中标记Android依赖项(google paly services.jar)移到顶部。现在清理、构建并运行应用程序。

供将来参考:不要在pastebin链接中发布近7000行logcat。我已经在你的问题中编辑了相关部分。问题很可能是您没有在清单中声明
BroadcastReceiver
。至于声明它,我用清单文件更新了OP。它被声明为“.GcmBroadcastReceiver”只是为了确定,我回到项目中是为了确定。“GcmBroadcastReceiver”位于com.javapapers.android包中,所以一切都应该正常。我继续前进,将清单中的“.GcmBroadcastReceiver”改为“com.javapapers.android.GcmBroadcastReceiver”,但在运行应用程序时没有任何区别。我刚意识到一件事。当我使用安卓4.2.2设备时,我引用了谷歌API[安卓4.3]。我应该试着换一下吗?问题是,在我遵循的教程(OP中的链接)中,没有人提到类似的问题。我担心如果我更改GoogleAPI参考,事情可能会变得更糟。编辑:好的,我尝试将GoogleAPI的版本更改为4.2.2。应用程序仍然强制关闭。