2014-12-05 113 views
3

我正在开发一个android应用程序。java.lang.RuntimeException:无法实例化服务com.google.android.gcm.GCMBroadCastReceiver

我正在使用GCM实施推送通知。

但是,我无法接收来自我的服务器的推送通知。错误日志如下所示。

java.lang.RuntimeException: Unable to instantiate service 
com.google.android.gcm.GCMBroadCastReceiver: java.lang.ClassNotFoundException: 
Didn't find class "com.google.android.gcm.GCMBroadCastReceiver" on path: DexPathList 

AndroidManifest.xml如下。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="net.myapp" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="net.myapp.permission.RECEIVE" /> 

    <permission 
     android:name="net.myapp.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="net.myapp.permission.C2D_MESSAGE" /> 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="21" /> 

    <application 
     android:name="net.myapp.sub.AppController" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <meta-data 
      android:name="com.facebook.sdk.ApplicationId" 
      android:value="@string/app_id" /> 

     <activity 
      android:name="net.myapp.MainActivity" 
      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="net.myapp.DetailActivity" 
      android:uiOptions="splitActionBarWhenNarrow" > 
      <meta-data 
       android:name="android.support.UI_OPTIONS" 
       android:value="splitActionBarWhenNarrow" /> 

      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="twittercallback" /> 
      </intent-filter> 
     </activity> 

     <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="net.myapp" /> 
      </intent-filter> 
     </receiver> 

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

    </application> 

</manifest> 

GcmBroadcastReceiver.java位于下方。

package net.myapp; 

import android.app.Activity; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.support.v4.content.WakefulBroadcastReceiver; 

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     ComponentName comp = new ComponentName(context.getPackageName(), 
       GcmIntentService.class.getName()); 

     startWakefulService(context, (intent.setComponent(comp))); 
     setResultCode(Activity.RESULT_OK); 
    } 

} 

我确认我正确导入了android-support-v4.jar和google-play-services.jar。 我尝试了Google搜索的一些解决方案,但是我还无法解决。

你能告诉我如何解决上述问题吗?

+0

你有没有添加'gcm.jar'文件到你的'libs'文件夹? ? – Piyush 2014-12-05 11:09:10

+0

谢谢你的回复。我已经导入了google-play-services.jar,所以我认为不需要导入gcm.jar。这是错的吗? – supermonkey 2014-12-05 12:16:45

+0

你需要添加它。 – Piyush 2014-12-05 12:17:17

回答

1

清单中您写道:

android:name="com.google.android.gcm.GCMBroadcastReceiver" 

但是你GcmBroadcastReceiver.java是包net.myapp

变化android:name="com.google.android.gcm.GCMBroadcastReceiver"android:name="net.myapp.GcmBroadcastReceiver"

+0

谢谢您的回复。我做了你提到的,但是,它不能很好地工作。你能告诉我另一种解决方案吗? – supermonkey 2014-12-05 12:17:57

+0

@szakira你仍然有同样的错误?如果没有,比你得到的问题的答案。对于另一个问题,您应该创建另一个问题 – Suvitruf 2014-12-05 12:29:41

+0

我仍然有同样的错误... – supermonkey 2014-12-05 12:30:37

相关问题