9

当我的 android 应用程序尝试实例化我用来在启动时启动服务的接收器时,我的 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

4 回答 4

20

你必须把你Receiver的一些package。如果它在主包上,系统将无法实例化它。

我有同样的问题。幸运的是,在互联网上搜索错误之前,我正在做另一个 java 项目。我刚刚意识到那里的错误与这个相似。我刚刚尝试过并且有效。:)

于 2012-08-23T12:29:43.340 回答
2

我也遇到过这个问题。将完整的包名称添加到清单文件中的接收器定义没有帮助。问题是有一个旧的 odex 文件对应于我的 apk 文件。Android 系统从 odex 文件加载类,因此找不到接收器类。

解决方法:

  • 删除旧的 odex 文件,或
  • 为您的 apk 取一个新名称

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

于 2015-01-27T14:15:47.977 回答
1

尝试:

<receiver android:name=".BootReceiver" >

它添加了包名本身,因为您定义了:

package="dti.obd.reader"
于 2012-03-07T12:21:32.017 回答
1

您必须将您的接收器放在某个包中而不是添加接收器的完整 路径

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

听起来很奇怪,但就我而言,它解决了问题

希望有人能通过这次经历取得丰硕的成果

于 2017-04-13T12:20:18.733 回答