我想将设备发送到睡眠状态或关闭屏幕 . 我调查过并发现了这个话题:Turn off screen on Android
基本上,有三种方法可以做到,但我发现三者有问题:
a)选择1:
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
manager.goToSleep(int amountOfTime);
Problem: 它导致FC . 我已经阅读了我需要 DEVICE_POWER
权限,但它不能被授予普通应用程序 .
b)选择2:
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");
wl.acquire();
wl.release();
Problem: 这对我不起作用 . 我不知道为什么 . 它没有给我一个FC,但它是无害的 .
c)选择3:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Problem: 我可以让它工作但是当试图打开设备它会做一些奇怪的事情,比如不喜欢返回,或者如果我的应用程序在前面,按下按钮后自动进入睡眠状态 . 与普通解决方案相比,这看起来更像是提示或解决方法 .
任何人都可以告诉我任何好的方法来发送设备进入睡眠或关闭屏幕,可以运行没有问题吗?对我来说这样一个简单的功能并不是一个好的方法来使用它(或者至少有详细记录)
2 回答
我回答自己 . 可以关闭设备,但应用程序必须通过API实现设备管理员功能:Device Administration
在这个API中有一个
locknow()
函数可以满足我的需要 .无论如何,这是为了扩展Android硬件和安全功能,并且不太可能有人想以这种方式控制设备 .
我想要的是能够从简单的手势锁定设备 . 由于我不想创建自己的设备管理器类,我检查是否安装了免费应用程序“lockScreen”并启动它 . 这是一种快捷方式,也是一种简单易行的方式 . 此应用必须注册为设备管理器,因此它已实现此类 . 它可以从市场上免费获得 .
我的应用程序已经做到了这一点,我在
PowerManager.class
找到了这个