2012-03-07 2 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> 

Кто-нибудь знает ERRO? Кажется, что пакет и имена все в порядке ...

ответ

16

Вы должны положить Reciever в некоторых package. Система не сможет создать экземпляр, если он находится в основном пакете.

У меня была та же проблема. К счастью, прежде чем искать ошибку в Интернете, я делал еще один проект java. Я просто понял, что ошибка там была похожа на эту. Пробовал это сейчас и работал. :)

+0

Спасибо, отлично работает, этот ans должен быть принят! +1 для вас –

+7

Можете ли вы объяснить это немного больше? – levi

1

попробовать:

<receiver android:name=".BootReceiver" > 

Он добавляет сам, потому что вы определили имя пакета:

package="dti.obd.reader" 
+0

Я уже попробовал этот путь. Вот почему я изменил, чтобы снова добавить пакет ... но никто из них не работает. Спасибо за вашу помощь! –

+1

Вам необходимо указать пакет 'AND'' '' '' '' '' '' '' '' 'письмо таким образом. Вы оба одновременно? Также взгляните на http://www.coderanch.com/t/439875/Android/Mobile/make-your-application-run-, возможно, вы можете обнаружить что-то другое. (Это вряд ли имеет какое-либо значение), но поместите строку 'user-permission' над линией' приложение'. – Caner

+0

Я пробовал все, но ничего не работает. Я совершенно не понимаю эту ошибку. Я думаю, что это что-то с именем пакета, какое-то ограничение, которое я не знаю ... –

1

Я также столкнулся с этой проблемой. Добавление полного имени пакета в определение получателя в файле манифеста не помогло. Проблема в том, что был старый файл odex, соответствующий моему файлу apk. Android-система загружает классы из файла odex, поэтому не может найти класс приемника.

Обходные:

  • Удалите старый файл вскрышных или
  • Дайте новое имя для вашего APK

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

+1

У меня возникла та же проблема. в предыдущей версии я использую имя получателя A, в текущей версии я удаляю его, а затем получаю эту ошибку. – Jonguo

+0

У нас есть это исключение в нашем приложении онлайн. И оказывается, что эти решения могут обойти стороной. – Cobain

0

Вы должны поставить Ресивер в какой-то пакет Вместо этого введите полный путь к Получить г

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

Это звучит Weired, но в моем случае это решен вопрос

Надежда Кто-то будет плодотворными с этим опытом

Смежные вопросы