我正在使用以下代码来保持屏幕开启:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
我唯一的问题是我想继续使用调光屏幕来节省电池。我知道如何使用 来做到这一点WakeLock
,但是没有它有没有办法做到这一点?
我正在使用以下代码来保持屏幕开启:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
我唯一的问题是我想继续使用调光屏幕来节省电池。我知道如何使用 来做到这一点WakeLock
,但是没有它有没有办法做到这一点?
通常,人们不会使用唤醒锁功能,因为这需要您为您的应用程序提供额外的权限,并且很容易引入错误,您不小心保持唤醒锁并因此保持屏幕开启。因此最好使用窗口标志FLAG_KEEP_SCREEN_ON
,您可以在活动的窗口上启用它。
另一种解决方案是将android:keepScreenOn="true"
(文档)添加到需要保持屏幕打开的视图中。这将允许您对哪些视图保持打开和哪些视图不进行更精细的控制。您甚至可以通过这种方式从资源文件中引用设置。
相关的方法setKeepScreenOn(true)
也可以用于此目的。
我不确定这种方法是否可以节省电池,但您可以创建一个不可见的活动并为其移除触摸输入并将其设置为暗淡,如下所示:
wm = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mTopView = (ViewGroup) inflater.inflate(
R.layout.activity_invisible, null);
params.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_DIM_BEHIND
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.dimAmount=0.3f;//0 is transparent 1 is opaque
rl = (RelativeLayout) mTopView.findViewById(R.id.window);
getWindow().setAttributes(params);
wm.addView(mTopView, params);}
我已经在我的一个应用程序中测试了代码。应该管用。
您可以使用clearFlag()方法清除以编程方式设置的标志
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
这将使屏幕再次变暗。