Android 无法获得 SCREEN_ON和SCREEN_OFF广播问题

转自:http://blog.csdn.net/huangliop/article/details/7290931

这两个事件有点特殊,Recevier的注册必须写在代码里面,不能也在在Manifest.xml文件里面。也就是是必须用非常驻型注册。

这样就代理一个问题:当软件退出后,这个Recevier就不会工做了,也就不能接收到广播的事件了。


解决办法是:将注册那段代码放在一个Service里面去进行,这样只要Service不停止,这个Recevier就会一直工作。

注册代码如下:

  1. ScreenOnBroadcastReciver sOnBroadcastReciver=new ScreenOnBroadcastReciver();
  2. IntentFilter recevierFilter=new IntentFilter();
  3. recevierFilter.addAction(Intent.ACTION_SCREEN_ON);
  4. recevierFilter.addAction(Intent.ACTION_SCREEN_OFF);
  5. registerReceiver(sOnBroadcastReciver, recevierFilter);
        ScreenOnBroadcastReciver sOnBroadcastReciver=new ScreenOnBroadcastReciver();
        IntentFilter recevierFilter=new IntentFilter();
        recevierFilter.addAction(Intent.ACTION_SCREEN_ON);
        recevierFilter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(sOnBroadcastReciver, recevierFilter);


 

上面说的这种情况,在Android里面还有一些。我目前只知道这两个广播。

 

Android中,要注册ACTION_SCREEN_ON 和 ACTION_SCREEN_OFF 的广播接收器,你需要按照以下步骤操作: 1. 首先,在你的AndroidManifest.xml文件中添加一个BroadcastReceiver声明,设置其action属性为`android.intent.action.SCREEN_ON`和`android.intent.action.SCREEN_OFF`: ```xml <receiver android:name=".YourScreenStateReceiver"> <intent-filter> <action android:name="android.intent.action.SCREEN_ON" /> <action android:name="android.intent.action.SCREEN_OFF" /> </intent-filter> </receiver> ``` 记得替换`.YourScreenStateReceiver`为你自定义的BroadcastReceiver类名。 2. 创建一个新的Java或Kotlin类,它继承自BroadcastReceiver。例如: ```java public class YourScreenStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { // 当屏幕开启时执行的代码 Log.d("YourApp", "Screen is ON"); } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { // 当屏幕关闭时执行的代码 Log.d("YourApp", "Screen is OFF"); } } } ``` 3. 在需要的地方初始化BroadcastReceiver,如Activity的onCreate()函数中,或者使用`registerReceiver()`方法动态注册: ```java IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(YourScreenStateReceiver.getInstance(), filter); ``` 这样,每当屏幕状态改变时,你的BroadcastReceiver就会收到相应事件并执行相应的回调方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值