我不是很擅长英语。^ _ ^ 关于使用
打开屏幕有很多答案getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
在Activity.onCreate()
中,只有在屏幕开启前未启动活动时,它才能真正打开屏幕。如果在屏幕关闭之前启动了活动,那么我会关闭屏幕(活动onStop()
但不会onDestroy()
),然后活动会收到任何事件,因此必须再次打开屏幕,如何实现这个?
我尝试将getWindow().addFlags(...)
放在onStart()
和getWindow().clearFlags(...)
onStop()
中,它并不总是有效,有时它有效,有时则不然。
最后,我使用
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "VideoChat");
mWakeLock.acquire();
在onStart()
中并保留getWindow().addFlags(...)
中的onCreate()
,当屏幕关闭时,我可以真正打开屏幕并在“锁定屏幕”前显示我的活动活动处于“onStop()
州”。
但是,PowerManager.FULL_WAKE_LOCK
在API级别17中已弃用。我的最低API为18,目标API为25.上述方法需要<uses-permission android:name="android.permission.WAKE_LOCK"/>
。所有这些都不是我想要的。
那么,有没有关于如何打开屏幕并显示已经启动的活动而没有弃用方法的想法?
我清楚了吗?^ _ ^
图说:
开启屏幕 - &gt;打开活动A - &gt;关闭屏幕 - &gt; A收到一些事件 - &gt;如何让A打开屏幕并使用未弃用的方法在锁定屏幕前显示?
谢谢!
答案 0 :(得分:0)
您可以跟进SO回答,当您收到活动时,请检查
StackApp.isInForeground()
如果返回false,则在这种情况下,检查屏幕是否打开。如果它在后台,那么请检查,
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
final boolean isScreenOn;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
isScreenOn = powerManager.isInteractive();
} else {
isScreenOn = powerManager.isScreenOn()
}
根据屏幕打开或关闭,您可以执行操作。