首页 文章

如何关闭屏幕或将设备发送到睡眠状态

提问于
浏览
12

我想将设备发送到睡眠状态或关闭屏幕 . 我调查过并发现了这个话题: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 回答

  • 7

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

    在这个API中有一个 locknow() 函数可以满足我的需要 .

    无论如何,这是为了扩展Android硬件和安全功能,并且不太可能有人想以这种方式控制设备 .

    我想要的是能够从简单的手势锁定设备 . 由于我不想创建自己的设备管理器类,我检查是否安装了免费应用程序“lockScreen”并启动它 . 这是一种快捷方式,也是一种简单易行的方式 . 此应用必须注册为设备管理器,因此它已实现此类 . 它可以从市场上免费获得 .

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

相关问题