2

我有一个运行前台服务的 android 应用程序,当该服务运行时,我想为用户提供保持屏幕打开的选项。

我在我的设置首选项中添加了一个复选框首选项,如果为真,我想保持屏幕打开,但默认情况下将其设置为关闭。这只是我的用户所要求的。目前我有偏好,但是当我运行该服务时,我的屏幕仍然关闭,这就是我所做的

全局变量

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

4 回答 4

4

您可以使用标志 FLAG_KEEP_SCREEN_ON

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

当你不想继续

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
于 2015-01-13T03:22:55.590 回答
3

试试这个:

mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,         
                            "");    
mWakeLock.acquire();
于 2011-09-08T04:27:20.927 回答
1

这种方式要好得多,因为使用更少的权限、服务和 ofc 电池

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

已编辑

于 2014-09-13T14:12:04.740 回答
-1

遵循 Mark Murphy 通过WakefulIntentService提供的模式。你可以在他的书中找到 很好的解释

于 2011-09-08T03:41:06.743 回答