我有一个运行前台服务的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" />
有什么我做错了。是否有不同的方法从服务中执行此操作,或者只是不可能从服务中执行此操作(希望情况并非如此)。
答案 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中找到解释 非常好的