如何在活动已打开时打开活动中的屏幕?

时间:2017-08-11 04:30:04

标签: android

我不是很擅长英语。^ _ ^ 关于使用

打开屏幕有很多答案
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"/>。所有这些都不是我想要的。

谷歌表示:“大多数应用程序应该使用FLAG_KEEP_SCREEN_ON而不是这种类型的唤醒锁定,因为当用户在应用程序之间移动并且不需要特殊权限时,它将由平台正确管理。”但是,当活动已经启动时,它并没有想到如何使用FLAG_KEEP_SCREEN_ON打开屏幕。

那么,有没有关于如何打开屏幕并显示已经启动的活动而没有弃用方法的想法?

我清楚了吗?^ _ ^

图说:

开启屏幕 - &gt;打开活动A - &gt;关闭屏幕 - &gt; A收到一些事件 - &gt;如何让A打开屏幕并使用未弃用的方法在锁定屏幕前显示?

谢谢!

1 个答案:

答案 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()
}

根据屏幕打开或关闭,您可以执行操作。