2011-09-08 216 views
2

我有一个android应用程序运行前台服务,而该服务正在运行我想让用户选择保持屏幕上。Android保持屏幕在应用程序

我添加到我的设置首选项,复选框首选项,如果为true,我想保持屏幕上,但默认情况下它已设置为关闭。这只是我的用户所要求的。目前我对偏好,但是当我跑我的屏幕仍然关闭,这里的服务是我做了什么

全局变量

private static final String PREFS_DEVICE = "DeviceInfo"; 

代码,如果语句

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

应用程序正在运行,但屏幕是关闭的,这是什么ü意味着? – confucius

+0

我从一个前台服务运行的过程,所以它从状态栏运行,但这是一个漫长的过程,所以当屏幕关闭时,屏幕经常关闭,人们有内衣配置文件,所以当服务开启时,我想给屏幕保持开启的选项,以便屏幕关闭时不会减慢服务 – user577732

回答

3

试试这个:

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

不幸的是没有工作屏幕仍然关闭 – user577732

+0

你释放wakelock.Your代码看起来没问题。我已经在我的一个应用程序中以相同的方式实现了这一点。可能是你使用的问题。你可能不会以正确的方式使用它。在你想使用它的地方提供完整的代码细节。 –

+0

接受我的if语句,只是放入此代码,它工作正常谢谢:)现在修复if语句和什么不是 – user577732

1

这种方式是更好的,使用较少的权限,服务和OFC电池的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

+0

这对于向答案添加一些文本描述很有帮助,以便新用户可以更好地理解您的解决方案的原因答案并不只是复制和粘贴它。 – Flexo

3

您可以使用标志FLAG_KEEP_SCREEN_ON

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

,当你不想继续

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