2014-12-05 73 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

相關問題