以编程方式在Android中将屏幕关闭

15

可能是这个问题的重复:Android: 如何以编程方式打开和关闭屏幕? - tir38
1个回答

22

是的,在这种情况下最好使用编程方式设置屏幕超时时间。

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000);

1000 毫秒等于 1 秒,您可以将其替换为所需的任何值。

需要的权限:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

更新:

它将覆盖手机系统的值(设置/显示/睡眠),因此您可能需要在完成后恢复当前设置:

private static final int SCREEN_OFF_TIME_OUT = 13000;
private int mSystemScreenOffTimeOut;
private void setScreenOffTimeOut() {
    try {
        mSystemScreenOffTimeOut = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT);
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, SCREEN_OFF_TIME_OUT);
    } catch (Exception e) {
        Utils.handleException(e);
    }
}

private void restoreScreenOffTimeOut() {
    if (mSystemScreenOffTimeOut == 0) return;
    try {
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, mSystemScreenOffTimeOut);
    } catch (Exception e) {
        Utils.handleException(e);
    }
}

你正在尝试设置默认的系统屏幕超时时间,而不仅仅是针对你自己的应用程序。 - ρяσѕρєя K
最终,您的应用程序必须使用系统来关闭屏幕。单独的应用程序无法使屏幕关闭。您的应用程序上一分钟的不活动与屏幕上一分钟的不活动相同,对吗? - Royston Pinto
如果我们使用 Settings.System.SCREEN_OFF_TIMEOUT 来设置屏幕超时时间,即使用户从应用程序中移动,该设置仍然保持不变。 - ρяσѕρєя K
2
是的,这就是它的工作方式。否则,另一个解决方法是为他安排一个一分钟的处理程序,将屏幕超时设置为1秒,以便快速关闭。然后使用广播接收器接收ACTION_SCREEN_OFF并将屏幕超时重置为旧值。 - Royston Pinto
有没有办法在我们将屏幕设置为关闭时处理用户的触摸? - Mohamad Ghaith Alzin
我使用了以下代码来移除超时 Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, Integer.MAX_VALUE);,其中我们将超时时间设置为整数的最大值,这样就可以避免屏幕再次关闭! - Mohamad Ghaith Alzin

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