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