8

画面がオンになったときに呼び出される BroadcastReceiver を取得しようとしています。私の AndroidManifest.xml では、次のように指定しました。

                <receiver android:name="IntentReceiver">
                    <intent-filter>
                            <action android:name="android.intent.action.SCREEN_ON"></action>
                    </intent-filter>
                </receiver>

ただし、レシーバーが呼び出されることはないようです (ブレークポイントは起動せず、ログ ステートメントは無視されます)。テスト用に SCREEN_ON を BOOT_COMPLETED に交換しましたが、これ呼び出されます。

これは 1.6 (SDK レベル 4) プロジェクトにあります。

Google コード検索でこれが明らかになり、プロジェクトをダウンロードして同期し、最新のツールで動作するように変換しましたが、そのイベントをインターセプトすることもできません。

http://www.google.com/codesearch/p?hl=en#_8L9bayv7qE/trunk/phxandroid-intent-query/AndroidManifest.xml&q=android.intent.action.SCREEN_ON

これはおそらくサポートされていませんか?

以前は、 Context.registerReceiver() の呼び出しでこのイベントを正常にインターセプトできました。

registerReceiver(new BroadcastReceiver() {

  @Override
  public void onReceive(Context context, Intent intent) {
    // ... 
  }
}, new IntentFilter(Intent.ACTION_SCREEN_ON));

ただし、これは長寿命のサービスによって実行されました。CommonsWare からの賢明なアドバイスに従って、長寿命の Service を削除し、別の手法を使用することにしました。しかし、画面のオフとオンのイベントを検出する必要があります。

4

3 に答える 3

13

CommonsWare からの賢明なアドバイスに従って、長寿命の Service を削除し、別の手法を使用することにしました。

実際、私のアドバイスはもっと水色だったと思います... :-)

しかし、画面のオフとオンのイベントを検出する必要があります。

Android が新しいプロセスを開始したくない特定のイベントがあるため、すべての種類のものを一度に実行する必要があるため、デバイスが遅くなりすぎないようにします。ACTION_SCREEN_ONその一つです。そのトピックに関する水色のアドバイスについては、この前の質問を参照してください。

そのため、「これらのイベントを制御する必要は本当にあるのか?」と自問する必要があります。あなたの答えが「いいえ」であれば、コア Android チームはそれを歓迎します。

于 2010-04-05T01:46:27.180 に答える