Android Keep屏幕在应用程序中

时间:2011-09-08 03:17:40

标签: android screen preferences backlight

我有一个运行前台服务的Android应用程序,当该服务正在运行时,我想让用户选择保持屏幕开启。

我添加了我的设置首选项,一个复选框首选项,如果为true,我想保持屏幕开启,但默认设置为关闭。这只是我的用户要求的东西。目前我有偏好,但当我运行服务时,我的屏幕仍然关闭,这就是我所做的

全局变量

private static final String PREFS_DEVICE = "DeviceInfo";

代码和if语句

SharedPreferences settings = getSharedPreferences(PREFS_DEVICE, 0);
            if(settings.getBoolean("screenPref", false)) {
                final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
                this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
                this.mWakeLock.acquire();
            }

然后我将此添加到我的清单

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

有什么我做错了。是否有不同的方法从服务中执行此操作,或者只是不可能从服务中执行此操作(希望情况并非如此)。

4 个答案:

答案 0 :(得分:3)

试试这个:

mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,         
                            "");    
mWakeLock.acquire();

答案 1 :(得分:3)

您可以使用标志FLAG_KEEP_SCREEN_ON

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

当你不想继续

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

答案 2 :(得分:1)

这种方式要好得多,bcz使用少权限,服务和电池

public void setWakelock(Activity Target, boolean State)
{
    if (State) Target.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    else Target.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    return;
}

<强> EDITED

答案 3 :(得分:-1)

按照Mark Murphy提供的WakefulIntentService模式。你可以在book中找到解释 非常好的