在清单中的keepScreenOn = true也无法在这里起作用,因为霍尔效应传感器的操作与按下电源按钮相同。在此,我提供了一个经过测试的解决方法。在这种方法中,您可以显示活动,而不管霍尔效应传感器是否锁定设备并关闭显示屏。
在执行解锁操作之前:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
以上代码的来源 - https://stackoverflow.com/a/45951927/9640177
还要确保添加权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
设置这些标志将确保您的窗口在锁屏界面上方可见。
现在,监听ACTION_SCREEN_OFF意图。为此,添加一个广播接收器,该接收器侦听系统广播的这个意图。您需要在本地注册接收器。(stackoverflow.com/a/9478013/9640177)
在清单中
<receiver android:name=".receiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
</intent-filter>
</receiver>
接收器类
public class receiver extends BroadcastReceiver {
MyActivity activity;
receiver(MyActivity activity){
this.activity = activity;
}
@Override
public void onReceive(final Context context, Intent intent) {
activity.turnOnScreen();
}
}
活动内部
...
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
receiver r = new receiver(MyActivity.this);
registerReceiver(r, screenStateFilter);
...
public void turnOnScreen(){
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "my:Tag");
wakeLock.acquire();
wakeLock.release();
}
信用 - https://stackoverflow.com/a/44706632/9640177
这将打开显示。
不要忘记在您的活动完成任务且不需要处于前台时删除这些标志。
getWindow().removeFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
这将使您的窗口从锁屏中消失,并使应用程序正常工作。
希望这能帮到您。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
。 - khalid3eSensor.TYPE_MAGNETIC_FIELD
来检测用户在公司出售的硬件上“轻敲”手机(它是一个门控制器,您可以轻敲它来打开门,因此里面包含一些磁铁),但由于另一个传感器有时会关闭屏幕,所以在门控制器上轻敲可能会关闭屏幕。 - Budius