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