2017-08-11 188 views
0

我不是英语非常好。^ _^ 共有约反过来在屏幕上很多答案使用如何在活动已打开时打开活动屏幕?

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而不是这种类型的唤醒锁,因为当用户在应用程序之间移动时,它将被平台正确管理,并且不需要特殊许可。”但是当Activity已经启动时,如何使用FLAG_KEEP_SCREEN_ON来打开屏幕并没有任何想法。

那么,有没有关于如何打开屏幕并显示一个已经启动的活动没有不推荐的方法?

我讲清楚^ _^

举例说明:在屏幕上

打开 - >打开活动A - >关闭屏幕 - >一个接收一些事件 - >如何让A打开屏幕并使用未被弃用的方法显示在锁屏前面?

谢谢!

回答

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

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

+0

对不起,但这不是我的问题。我不想检查屏幕状态。我只想知道如何从活动中以编程方式打开屏幕,当活动已打开时。换句话说,活动已经被用户打开,然后用户关闭屏幕,然后如何打开屏幕并以编程方式显示活动? –

+0

如果活动从未打开过,您可以使用'Intent'来启动活动并使用'WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON'等来打开屏幕,但是当活动已经打开时,这些方法不起作用。 –