如何关闭屏幕或使设备进入睡眠状态

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);

问题:我可以让它工作,但当我尝试打开设备时,它会表现出奇怪的行为,例如不想返回,或者如果我的应用程序在前台,则按下按钮后自动进入睡眠状态。这看起来更像是提示或解决方法,而不是正常解决方案。

有人能告诉我任何一个好的方法来让设备进入睡眠或关闭屏幕,以便不会出现问题?这对我来说听起来很罕见,如此简单的功能却没有一个好的使用方法(或至少有很好的文档记录)。

2个回答

8
我回答自己。可以关闭设备,但应用程序必须通过API实现设备管理员功能:设备管理
在这个API中有一个locknow()函数,可以实现我想要的功能。
无论如何,这是为扩展安卓硬件和安全功能而设计的,很少有人想以这种方式控制设备。
我的需求是能够通过简单的手势锁定设备。由于我不想编写自己的设备管理器类,因此我检查免费应用程序“ lockScreen”是否已安装并启动它。这是一个快捷方式,也是我想要做的简单方法。这个应用程序必须注册为设备管理员,因此它已经实现了这个类。可以从市场上免费获得它。

如果我想让屏幕关闭,但不锁定直到我的屏幕锁定超时怎么办? - Kamran Ahmed

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) {
    }
}

你确定你没有只是使用了 API 的 PowerManager 类实现吗?我失败了,因为我无法获得必要的权限。 - Jannis Froese
1
DEVICE_POWER 权限怎么样? - Kamran Ahmed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接