Невозможно создать экземпляр получателя java.lang.ClassNotFoundException - PullRequest
9 голосов
/ 07 марта 2012

Я получил ошибку в моем приложении для Android, когда оно пытается создать экземпляр получателя, который я использую для запуска службы при загрузке.Ошибка очевидна, она не может найти файл класса моего приемника.Но с моим файлом манифеста, пакетами и прочим все в порядке, и я понятия не имею, что происходит.Вот мой код:

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>

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

Ответы [ 4 ]

18 голосов
/ 23 августа 2012

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

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

1 голос
/ 27 января 2015

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

Обходные пути:

  • Удалите старый файл odex или
  • Дайте новое имя вашемуapk

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

1 голос
/ 07 марта 2012

try:

<receiver android:name=".BootReceiver" >

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

package="dti.obd.reader"
0 голосов
/ 13 апреля 2017

Вы должны положить Reciever в какой-то пакет Вместо этого добавить полный путь к Reciever

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

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

Надеюсь, кто-то будет плодотворным с этим опытом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...