9

起動時にサービスを開始するために使用するレシーバーをインスタンス化しようとすると、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

私もこの問題に直面しました。マニフェストファイルのレシーバー定義に完全なパッケージ名を追加しても役に立ちませんでした。問題は、私のapkファイルに対応する古いodexファイルがあったことでした。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 に答える