3

次のコードを使用して、サービスに受信者を登録しようとしました。

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
ScreenReceiver SR = new ScreenReceiver();
registerReceiver(SR, filter);

これは私の放送受信機です:

public class ScreenReceiver extends BroadcastReceiver { 
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("RECEIVED");
    }
}

マニフェストでも宣言しましたが、フィルターはありません。

<receiver android:name=".ScreenReceiver" android:enabled="true" />

しかし、何をしても、画面をオンにしたときに意図を受け取ることができないようです。

このインテントは Android ICS または JB で無効になっていますか、それとも何か不足していますか?

どんな助けでも大歓迎です!

4

3 に答える 3

7

Android 4.0.4で動作します

BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null)
            return;
        //do something you need when broadcast received

    }
};
IntentFilter filter = new IntentFilter()
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);

context.registerReceiver(receiver, filter);

Manifest.xml でアクション Intent.ACTION_SCREEN_ON および Intent.ACTION_SCREEN_OFF を使用してレシーバーを登録する場合は、PowerManagerService.javaの Android コードが次のようになるため、役に立ちません。

...
mScreenOnIntent = new Intent(Intent.ACTION_SCREEN_ON);
mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
mScreenOffIntent = new Intent(Intent.ACTION_SCREEN_OFF);
mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
...
于 2013-02-12T13:53:20.400 に答える
4

このチュートリアルの Handling Screen OFF and Screen ON Intentsを読んでください。

于 2012-10-01T22:24:35.150 に答える
0

onReceive()おそらく、メソッド内でどの意図が来ているかを確認する必要があります。

if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)
{
    ...
}

また、そこにブレークポイントを入れてみましたか?

System.out.printlnあなたの場合にあるAPIネイティブログを使用する代わりに、他のアドバイス

Log.i("ScreenReceiver""RECEIVED");

そして、logcat でログを読むことができます。

于 2012-10-01T22:39:50.270 に答える