Android 广播接收器在屏幕关闭时调用

Android 广播接收器在屏幕关闭时调用,android,Android,我正在做一个应用程序,如果我们摇晃手机,它会锁定屏幕,我已经写下了屏幕关闭的代码,但现在的问题是我需要一个广播接收器来检查屏幕是关闭还是打开,我怎么做?希望如此 这有助于您更好地实现在Android关闭屏幕时调用广播接收器的方法 编辑: 您必须向清单中添加权限,如下所示: <receiver android:name=".MyBroadCastReciever"> <intent-filter> <action android:name="a

我正在做一个应用程序,如果我们摇晃手机,它会锁定屏幕,我已经写下了屏幕关闭的代码,但现在的问题是我需要一个广播接收器来检查屏幕是关闭还是打开,我怎么做?

希望如此

这有助于您更好地实现在Android关闭屏幕时调用广播接收器的方法

编辑

您必须向清单中添加权限,如下所示:

<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>

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

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
boolean isScreenOn = powerManager.isScreenOn();
if (!isScreenOn) {//lock screen
   //do something
}
如果你想在屏幕关闭时收听,那么你需要注册一个接收器。对于Intent.ACTION\u SCREEN\u OFF和Intent.ACTION\u SCREEN\u ON,您不能在Android清单中声明它们,但它们必须在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中注册receiver

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

    }
并在活动的onDestroy中注销

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

    }

希望这对您有所帮助。

我看到了这一点,如果我按照您的链接进行,清单中的任何修改(例如,如果我们正在编写接收器监控重新启动,则意味着我们必须添加BOOT\u完成任何类似的事情)