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

阅读本教程 处理屏幕关闭和屏幕开启意图,它可以帮助您。

于 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 回答