Android广播接收器未收到ACTION_SCREEN_ON

kev*_*liu 3 android screen broadcastreceiver android-intent

我尝试使用以下代码在我的服务中注册接收器:

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
ScreenReceiver SR = new ScreenReceiver();
registerReceiver(SR, filter);
Run Code Online (Sandbox Code Playgroud)

这是我的广播接收器:

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

我甚至在清单中声明它但没有任何过滤器:

<receiver android:name=".ScreenReceiver" android:enabled="true" />
Run Code Online (Sandbox Code Playgroud)

但无论我做什么,当我打开屏幕时,我似乎无法接收到意图.

这个意图在Android ICS或JB中被禁用了还是我错过了什么?

任何帮助,将不胜感激!

Nik*_*huk 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);
Run Code Online (Sandbox Code Playgroud)

对于在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); 
...
Run Code Online (Sandbox Code Playgroud)