gpt4 book ai didi

安卓点亮屏幕

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:30 24 4
gpt4 key购买 nike

我制作了一个由 AlarmManager 安排 Activity 启动的应用程序。即使屏幕关闭并且设备被锁定,我也想出现。

要实现这一点,请设置窗口标志

final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);

尝试获取屏幕锁

if(_lock == null)
{
PowerManager pm = (PowerManager)App.getAppContext()
.getSystemService(Context.POWER_SERVICE);

_lock = pm.newWakeLock(
PowerManager.FULL_WAKE_LOCK, "ScreenOn");
_lock.acquire();
}

_lock是PowerManager.WakeLock,在onPause时释放

protected void onPause()
{
if(_lock != null)
{
_lock.release();
}
}

这段代码在onCreate和onRestart中执行。如果 Activity 尚未启动,一切正常。

但如果它较早启动,则屏幕不会关闭。

  • onRestart 首先被调用
  • 然后调用 onResume
  • 立即调用 onPause

所以 Activity 没有启动。我的问题是在这种情况下如何打开屏幕。 (我正在使用 API 15)。

最佳答案

我想到了解决方案。我创建了一个新 Activity ,它将尝试在 onCreate() 中打开屏幕,然后等待它打开。当屏幕正常时,它将启动应该显示的 Activity 。使Android始终创建此 Activity

public class TurnOnScreen extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (pm.isScreenOn()) openActivity();
else {
registerReceiver(mScreenOnReceiver, new IntentFilter(
Intent.ACTION_SCREEN_ON));
reciever_registered = true;
turnScreenOn();
}
}

@Override
public void onDestroy() {
super.onDestroy();
if (reciever_registered) {
unregisterReceiver(mScreenOnReceiver);
reciever_registered = false;
}
}

private boolean reciever_registered = false;
private final BroadcastReceiver mScreenOnReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
openActivity();
}
};

private void openActivity() {
Intent intent = new Intent();
// ....
finish();
}

private void turnScreenOn() {
final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
}
}

我还在寻找为什么onRestart没有亮屏的解释。

关于安卓点亮屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com