最近做项目,需要监听开屏、锁屏(待机)的广播,发现这里还是有一些坑的。
开屏、锁屏需要监听的广播分别是:ACTION_SCREEN_ON ACTION_SCREEN_OFF。但是在写完广播接收者,然后在配置文件中声明后,发现根本比起作用。
后来发现,这两个事件有点特殊,Recevier的注册必须写在代码里面,不能也在在Manifest.xml文件里面。也就是是必须用非常驻型注册。
这样就又有一个问题:当软件退出后,这个Recevier就不会工做了,也就不能接收到广播的事件了。
解决办法是:将注册那段代码放在一个Service里面去进行,这样只要Service不停止,这个Recevier就会一直工作。
注册代码如下:
ScreenReciver mReciver=new ScreenReciver ();
IntentFilter recevierFilter=new IntentFilter();
recevierFilter.addAction(Intent.ACTION_SCREEN_ON);
recevierFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mReciver, recevierFilter);