2010-05-05 89 views
9

我发现两种方法在保持在屏幕上:保持屏幕上,哪种方式?

第一个是简单的:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

第二个是使用激活锁定,并需要额外的权限:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen"); 

有这两种方法之间有什么真正的区别,除了第二种方法比较复杂,需要额外的许可?最终结果总是一样吗?

+0

*如果*一个需要许可,其他没有,有**是**肯定是差(或API中的错误)。但是,我不知道有什么区别。 – 2010-05-05 09:27:50

+0

权限可能在那里,因为你可以用它做更强大的事情,不仅保持屏幕开启。我只是想知道更多关于最终结果的信息,如果两种方式总是保持屏幕无论如何。 – 2010-05-05 09:47:46

回答

22

您应该看到Coding for (Battery) Life谷歌IO演示,幻灯片16

如果你不想的话:你可以做的XML中的任何一个布局元素的第一个,它是建议之一来使用(不知道把它应用到窗口上,可能会和wakelock一样糟糕,不知道)。

XML:

​​

窗口标志:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
+0

谢谢,我不知道xml的方式。我认为它几乎与窗口一样。然而在演讲中,它说如果忘记了唤醒锁,则代价很高。所以如果做得对,他们应该没问题。 看来最终的结果是一样的。那么我会选择推荐的方式。 – 2010-05-05 09:46:12

+1

@JanS。您应该观看视频:http://www.youtube.com/watch?feature = player_detailpage&v = OUemfrKe65c#t = 1793(在29:53)。如果你只有一个基于UI的应用程序,使用wakelock和它的权限是不需要的,并且在有错误或崩溃的情况下是非常有问题的。如果您使用此标志,您可以避免使用唤醒锁,只要用户停留在当前布局上就可以保持屏幕显示。 – 2014-01-19 17:50:06