我想将设备发送到睡眠状态或关闭屏幕。我调查过并发现了这个主题:Turn off screen on Android
基本上,有三种方法可以做到,但我发现三者有问题:
a)选择1:
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
manager.goToSleep(int amountOfTime);
问题:导致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();
问题:这对我不起作用。我不知道为什么。它不会给我一个FC,但它是无害的。
c)选择3:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
问题:我可以让它工作但是当试图打开设备时它会做出奇怪的事情,比如不喜欢返回,或者如果我的应用程序在前面,会自动进入睡眠状态按下按钮后。与普通解决方案相比,这看起来更像是一个提示或解决方法。
任何人都可以告诉我任何好的方法来发送设备进入睡眠状态或关闭屏幕,可以无问题地运行吗?对我来说这样一个简单的功能并没有很好的方法来使用它(或者至少有详细记录),这听起来很少见。
答案 0 :(得分:7)
我自己回答。可以关闭设备,但应用程序必须通过API实现设备管理员功能:Device Administration
在此API中,有一个locknow()
函数可以执行我想要的操作。
无论如何,这是为了扩展Android硬件和安全功能,并且不太可能有人想以这种方式控制设备。
我想要的是能够从简单的手势锁定设备。由于我不想创建自己的设备管理器类,我检查是否安装了免费应用程序“lockScreen”并启动它。这是一种快捷方式,也是一种轻松的方式来做我想做的事情。此应用必须注册为设备管理器,因此它已实现此类。它可以从市场上免费获得。
答案 1 :(得分:0)
我的应用程序已经很好了,我在PowerManager.class
/**
* Force the device to go to sleep. Overrides all the wake locks that are
* held.
*
* @param time is used to order this correctly with the wake lock calls.
* The time should be in the {@link SystemClock#uptimeMillis
* SystemClock.uptimeMillis()} time base.
*/
public void goToSleep(long time)
{
try {
mService.goToSleep(time);
} catch (RemoteException e) {
}
}