我尝试使用以下代码在我的服务中注册接收器:
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中是禁用的还是我错过了什么?
任何帮助将不胜感激!
答案 0 :(得分: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);
...
答案 1 :(得分:4)
阅读本教程 Handling Screen OFF and Screen ON Intents, 它可以帮助你。
答案 2 :(得分:0)
也许您应该检查onReceive()
方法中的意图:
if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)
{
...
}
另外,你试过在那里放一个断点吗?
其他建议,而不是使用System.out.println
使用API本机日志,这将是您的情况
Log.i("ScreenReceiver""RECEIVED");
你可以在logcat中读取日志。