4

再起動イベントをリッスンしようとしています。

次のクラスを作成しました。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class OnBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("MYBOOTRECEIVER", "HELLO!");
    }
}

次に、マニフェスト ファイルに次の xml を追加しました。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mypackage"
    android:installLocation="internalOnly"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="8" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application android:label="@string/app_name" >
        <receiver android:name=".OnBootReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

しかし、このアプリをインストールしてデバイスを再起動しても、何も起こりません。(私はAndroid 3.2を搭載したGalaxy Tab 8.9を使用しています)。マニフェストからわかるように、内部メモリにアプリをインストールしました (stackoverflow の同様の質問で提案されているように) ... Quickboot_poweron アクションも入れました (Galaxy タブが htc デバイスと同様の動作をするかどうかを確認するため) ...しかし、何もありません。誰かが私を助けてくれることを願っています!

4

3 に答える 3

8

以前、3.0 以降のデバイスで同じ問題に直面しました。

理由は

3.1 以降では、アプリケーションがインストールされると「停止」状態になるため、ユーザーが明示的に起動するまで実行できません。強制停止を押すと、この状態に戻ります。

ユーザーが初めてアプリを実行すると (強制停止しないと)、すべてが以前と同じように動作します。再起動すると、BOOT_COMPLETED ブロードキャストが受信されます。ただし、ユーザーがアプリをインストールした場合、アプリを手動で実行するまで、または手動で実行しない限り、ブロードキャストは受信されません。

したがって、あなたの場合、ランチャー アクティビティを作成し、そのランチャー アクティビティを少なくとも 1 回開始する必要があります。その後、ブート イベント ブロードキャストの受信を開始します。

于 2012-06-19T10:29:59.450 に答える
1

問題は、Honeycomb 以降では、ブロードキャスト信号によって、他の方法で開始されていないアプリケーションが自動的に開始されないことです。これを変更するために使用できるフラグがありますが、BOOT_COMPLETED ブロードキャストにはそのフラグがありません。このニュアンスを克服するには、システム パーティションにインストールする必要があります。

システム パーティションにインストールできない場合は、別の方法で開始する必要があります。ユーザーに手動で開始するよう説得するか、提供するウィジェットをユーザーにインストールしてもらうなどです。

于 2012-06-19T10:23:13.427 に答える
0

マニフェストのアクションの記述は、カテゴリ部分を除いて正しいです。これは、起動完了を受け取るだけの場合は除外できます。また、Receiver ファイルではこれで問題なく動作しますが、受信したアクションを区別するために常に if-else ステートメントを使用する必要があります。

    if (action.equals(android.intent.action.BOOT_COMPLETED)) {
       Log.i("MYBOOTRECEIVER", "BOOT COMPLETED RECEIVED");
    }
于 2012-06-19T10:23:15.847 に答える