2012-03-07 83 views
8

當我嘗試實例化一個接收器時,我的android應用程序出現錯誤,該接收器用於在啓動時啓動服務。錯誤很明顯,它找不到我的接收器的類文件。但是,我的清單文件,包和所有內容都可以,我不知道發生了什麼。這裏是我的代碼:無法實例化接收器java.lang.ClassNotFoundException

package dti.obd.reader; 

import dti.obd.reader.service.MainService; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class BootReceiver extends BroadcastReceiver 
{ 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      Intent serviceIntent = new Intent(MainService.class.getName()); 
      context.startService(serviceIntent); 
     } 
} 

我的清單文件:

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

    <uses-sdk android:minSdkVersion="8" /> 


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

     <service android:name=".service.MainService" > 
      <intent-filter > 
       <action android:name="dti.obd.reader.service.MainService" /> 
      </intent-filter> 
     </service> 

     <receiver android:name="dti.obd.reader.BootReceiver" > 
      <intent-filter > 
       <action android:name="android.intent.action.BOOT_COMPLETED" > 
       </action> 
      </intent-filter> 
     </receiver> 
    </application> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

</manifest> 

有誰知道埃羅?看來,包裝和名稱都行......

回答

16

你必須把你的Reciever在一些package。如果系統位於主包裝上,系統將無法實例化。

我有同樣的問題。幸運的是,在搜索互聯網上的錯誤之前,我正在做另一個Java項目。我剛剛意識到那裏的錯誤與此類似。試過了,現在就工作了。 :)

+0

謝謝!工作正常,這個答案應該被接受!+1爲你 – 2013-02-25 13:07:32

+7

你能解釋一下嗎? – levi 2014-08-07 01:45:59

1

嘗試:

<receiver android:name=".BootReceiver" > 

它增加了包的名稱本身,因爲你定義:

package="dti.obd.reader" 
+0

我已經嘗試過這種方式。這就是爲什麼我改變了再次指定包...但他們都沒有工作。謝謝你的幫助! – 2012-03-07 12:33:05

+1

你需要用這種方式指定包'AND'寫'receiver'行。你們倆在同一時間嗎?也可以看一下http://www.coderanch.com/t/439875/Android/Mobile/make-your-application-run-as或許你可以發現不同的東西。 (這不太可能會產生任何影響),但將'user-permission'行放在'application'行的上方。 – Caner 2012-03-07 12:41:45

+0

我嘗試了一切,但沒有任何工作。我對這個錯誤感到非常瘋狂。我認爲它與包的名稱,一些限制,我不知道... – 2012-03-07 13:24:55

1

我也遇到了這個問題。在清單文件中將完整軟件包名稱添加到接收者定義中並沒有幫助問題是有一箇舊的odex文件對應於我的apk文件。 Android系統從odex文件加載類,因此無法找到接收者類。

解決方法:

  • 刪除舊的ODEX文件,或
  • 的新名稱,以您的APK

http://www.addictivetips.com/mobile/what-is-odex-and-deodex-in-android-complete-guide/

+1

我面臨同樣的問題。在以前的版本中,我使用接收器名稱A,在當前版本中,我已將其刪除,然後得到此錯誤 – Jonguo 2015-03-12 07:19:33

+0

我們在我們的應用程序中發現了這個異常,結果證明這些解決方案可以解決。 – Cobain 2017-07-04 06:05:02

0

你必須把你的Reciever在一些包 改爲添加的完整路徑接收[R

<receiver android:name="com.yourpackage.BootReceiver" > 

聽起來Weired但在我的情況下,它解決了這個問題

希望有人會卓有成效這方面的經驗

相關問題