在android中调用隐藏API关闭屏幕

在android中调用隐藏API关闭屏幕,android,Android,我正在考虑在我的应用程序中使用隐藏的api关闭屏幕。 setScreenStatefrom做了我想要的,但它是一个隐藏的API。这是否意味着我不应该使用它?我认为这是一个相当稳定的API。 目前,我正在将屏幕超时设置为1毫秒,然后在屏幕关闭后重置超时。然而,android忽略了1毫秒,而关闭它需要大约3秒的时间,有时它会完全忽略它而不关闭。 有什么建议吗 setScreenState…做我想做的,但是 这是一个隐藏的API。那是不是意味着我 你不应该用它吗 是的,这意味着你不应该使用它。在这种情

我正在考虑在我的应用程序中使用隐藏的api关闭屏幕。
setScreenState
from做了我想要的,但它是一个隐藏的API。这是否意味着我不应该使用它?我认为这是一个相当稳定的API。
目前,我正在将屏幕超时设置为1毫秒,然后在屏幕关闭后重置超时。然而,android忽略了1毫秒,而关闭它需要大约3秒的时间,有时它会完全忽略它而不关闭。
有什么建议吗

setScreenState…做我想做的,但是 这是一个隐藏的API。那是不是意味着我 你不应该用它吗


是的,这意味着你不应该使用它。在这种情况下,整个类似乎被排除在SDK之外

以下是我为解决屏幕睡眠问题所做的工作。您可以在“活动”窗口中执行此操作。我将其与此定制锁屏活动的睡眠超时时间减少到5秒配对。你可以在我的项目页面上查看我所有的源代码,但这里有一个关于关闭屏幕的相关部分,这对我在droid上的工作很有用

public void setBright(float value) {
    Window mywindow = getWindow();
    WindowManager.LayoutParams lp = mywindow.getAttributes();
    lp.screenBrightness = value;
    mywindow.setAttributes(lp);
}

//call this task to turn off the screen in a fadeout.


class Task implements Runnable {
    public void run() {                
        if (bright != 0) {
            setBright(bright/100); //start at 10% bright and go to 0 (screen off)
            bright--;
            serviceHandler.postDelayed(myTask, 100L);
        } else {
            setBright((float) 0.0); 
            bright = 10;//put bright back
        }
    }
}
我使用handler任务作为方法的测试,当我在第一次构建中从onBackPressed调用它时,它工作了。现在,我只需要在onCreate中将活动设置为0.0。这使得即使我的用户意外地按了音量键唤醒了CPU,屏幕也不会真正打开。当我希望屏幕继续显示时,我将按键事件调用设置为大于0的值(1.0表示最大亮度)。我很幸运,这适用于我的定制锁屏活动。我发现更改文字亮度系统设置不是这样工作的,也不会使屏幕关闭

查看我的项目svn上的其他来源


您认为要求android团队添加对关闭屏幕的支持或定义屏幕是否应通过锁中介器替换唤醒的支持有多困难?类似于您如何编写替代Home Launcher应用程序?

使用部分唤醒锁


您是否在寻找如何使用它?还是另一种关闭屏幕的方式?您可以使用反射来调用该方法,即使它是“隐藏的”。但是,您可能会得到一个异常,表示您无权访问该方法。对于某些API,只有“系统”进程才能使用它们。因为你的应用程序不是一个“系统”进程,所以你不能使用它。我更喜欢使用一个公共API,但我找不到一个,我现在使用的屏幕超时技术有时也不起作用。我想我对反射很熟悉,但我还没有试过。我想我的问题是:如果我找不到替代方案,那么使用相对稳定的隐藏API有多糟糕?@i4ndroid我怀疑谷歌是否会添加API来让开发者关闭屏幕。但不要像我一样阻止你向他们请愿。我想看看。我玩弄了屏幕关闭超时,那5秒的延迟真是个杀手。我已经放弃了关闭屏幕的功能。我以后可能会重新访问它。@i4ndroid建议在通知栏中设置一个FLAG_consuming_EVENT文件夹图标,以显示应用程序快捷方式列表,而不是将应用程序快捷方式添加到锁定屏幕。只是个主意。我自己也想过做类似的事情,但我太忙了,忙着做其他项目。另外,请不要在发布应用程序时命名为Smart Lockscreen,因为我的应用程序称为Smart Lock。这个隐藏的API在安卓2.3上还能工作吗?我无法在Android 2.3.x上运行,甚至setScreenState被调用为false,我在日志中看到它,屏幕没有关闭,代码:-或我的代码中有任何错误?如果你知道可靠关闭屏幕的方法,请告诉我!我也在测试您是否能够将超时的缩短与降低亮度的代码结合起来。我已经安装了亮度小部件,其中的滑块允许我将其一直设置为0,一旦设置为0,屏幕实际上就会关闭!如果我能找到什么地方,我会回来报到的。嘿,大卫,我叫它麦洛克。只是一个简单的开关,用于抑制锁屏或睡眠超时。我的主版本已经运行了设置界面的快捷方式,但我的想法是制作一个新的模拟主屏幕的锁屏。无论如何,我今天学到了一种方法,我可以关闭屏幕或保持它关闭,尽管CPU唤醒与自定义锁屏幕。它相当巧妙。我只是希望我们能够在电源管理器中定义屏幕唤醒的规则并将其发送到睡眠状态。我要向安卓团队请愿。观看了您的smartlock视频,非常精彩的更新:如果我在弹出“关闭”键盘保护窗口时遇到按键事件,而我真的不想打开屏幕,则此功能非常适合我关闭屏幕的需要。当你想关闭屏幕时,用相同的功能锁定活动时,你似乎可以调用类似的show\u。我的最新资料显示了一个超时,所以如果用户在“静默”唤醒期间按下电源,它将被处理。我还没有测试过,当真正的屏幕关闭广播发出操作系统超时结束的信号时,当锁定的窗口自动结束时,如何让show\u显示。如何重新打开它?当我调用setBright(1.0)时;屏幕仍然关闭!如何使屏幕在“关闭”或完全变暗时仍能收听触摸事件?