1

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

4

2 回答 2

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

    }

希望这对您有所帮助。

于 2013-01-16T07:19:50.473 回答
0

希望这个链接

如果屏幕在 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>
于 2013-01-16T05:23:00.737 回答