如果屏幕关闭,BroadCast接收器将调用

时间:2013-01-16 05:18:39

标签: android

我正在做一个应用程序,如果我们摇动手机锁定屏幕,我已经写了关闭屏幕的代码,但现在问题是我需要一个广播接收器,检查屏幕是否关闭,我怎么能做到了吗?

2 个答案:

答案 0 :(得分:3)

如果您需要在特定时刻检查屏幕是否关闭,这是一个很好的方法,无需注册接收器

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
boolean isScreenOn = powerManager.isScreenOn();
if (!isScreenOn) {//lock screen
   //do something
}

如果您想在屏幕熄灭时收听,则需要注册接收器。对于Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON,您不能在Android Manifest中声明它们,但它们必须在JAVA代码中的IntentFilter中注册,并且不需要添加任何权限

public class ScreenReceiver extends BroadcastReceiver {

    public static boolean wasScreenOn = true;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // do whatever you need to do here
            wasScreenOn = false;
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // and do whatever you need to do here
            wasScreenOn = true;
        }
    }

}

然后在活动的onCreate中注册接收器

  @Override
    protected void onCreate() {
       //your code
        BroadcastReceiver mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);            
    }

取消注册活动的onDestroy

 @Override
    protected void onDestroy() {
       //your code
        unregisterReceiver(mReceiver);         

    }

希望这对你有所帮助。

答案 1 :(得分:0)

希望这个Link

如果在Android中关闭屏幕,可以更好地实施 BroadCastReciever调用方式。

修改

您必须在清单中添加权限,如:

<receiver android:name=".MyBroadCastReciever">
    <intent-filter>
        <action android:name="android.intent.action.SCREEN_OFF"/>
        <action android:name="android.intent.action.SCREEN_ON"/>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>