13

我想让设备进入睡眠状态或关闭屏幕。我调查并发现了这个主题:在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);

问题:我可以让它工作,但是当尝试打开设备时它会做一些奇怪的事情,比如不喜欢返回,或者如果我的应用程序在前面,按下按钮后会自动进入睡眠状态。这看起来更像是一个提示或解决方法,而不是正常的解决方案。

谁能告诉我有什么好方法可以让设备进入睡眠状态或关闭屏幕,并且可以毫无问题地运行?在我看来,像这样的简单功能并不能很好地使用它(或者至少有据可查),这听起来很少见

4

2 回答 2

8

我自己回答。可以关闭设备,但应用程序必须通过 API 实现设备管理员功能:设备管理

在这个 API 中有一个locknow()函数可以做我想要的。

无论如何,这是为了扩展 android 硬件和安全功能,任何人都不太可能想以这种方式控制设备。

我想要的是能够通过一个简单的手势来锁定设备。因为我不想创建自己的设备管理器类,所以我检查是否安装了免费应用程序“lockScreen”并启动它。这是做我想做的事的捷径和简单的方法。这个应用程序必须注册为设备管理器,所以它已经实现了这个类。可以从市场上免费获得它。

于 2011-12-12T11:05:00.483 回答
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) {
    }
}
于 2014-06-01T03:32:25.883 回答