2009-12-27 92 views
3

我正在开发一个可能在晚上使用的Android应用程序。因此,我需要关闭按钮的背光灯。我怎样才能做到这一点?在我自己的手机上,经过一段时间后背光会关闭,但在摩托罗拉Droid上我不认为会发生这种情况。关闭按钮的背光

我正在使用wakelock来保持屏幕。我应该使用另一面旗帜吗?我该怎么做?

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, WAKE_LOCK_TAG); 
mWakeLock.acquire(); 

非常感谢!

// Kaloer

+0

您是否找到解决此问题的解决方案?我也想关闭按钮上的背光灯。 – 2010-11-05 09:30:44

+1

是的,我做过,或者它是Android 2.2的新功能。看看这里http://stackoverflow.com/questions/2892160/uimodemanager-nightmode-froyo – Kaloer 2010-11-05 16:01:25

回答

0

据我所知,没有API控制按钮的背光源 - 对不起!

+0

好的..谢谢你的回答:) – Kaloer 2009-12-27 15:22:20

+0

在2.2它是有API的 – pengwang 2011-01-06 11:35:17

+0

@pengwang,请你在列表中粘贴一个链接到这个API? – greenoldman 2012-10-10 18:56:26

4

有一个hack:

private void setDimButtons(boolean dimButtons) { 
    Window window = getWindow(); 
    LayoutParams layoutParams = window.getAttributes(); 
    float val = dimButtons ? 0 : -1; 
    try { 
     Field buttonBrightness = layoutParams.getClass().getField(
       "buttonBrightness"); 
     buttonBrightness.set(layoutParams, val); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    window.setAttributes(layoutParams); 
} 
+1

我不知道我是否会称之为“黑客”。这是反思。 – gobernador 2012-08-26 20:00:48

+1

这很有趣。有没有办法从活动外部访问'getWindow()',比如在服务中? – faizal 2014-07-15 07:38:59

1

我看这是大部分是在一个评论链接回答一个老问题,但要清楚到别人谁碰到这个问题来了,这是我自己的回答。

它的内置自API 8(doc

float android.view.WindowManager.LayoutParams.buttonBrightness 



这是我用我的应用程序的一个什么样的稍加修改/简体版(不含无关的代码)。需要内部类来防止在不支持它的旧平台上启动时发生崩溃。

private void nightMode() { 
    Window win = getWindow(); 
    LayoutParams lp = win.getAttributes(); 
    if (prefs.getBoolean("Night", false)) 
     changeBtnBacklight(lp, LayoutParams.BRIGHTNESS_OVERRIDE_OFF); 
    else changeBtnBacklight(lp, LayoutParams.BRIGHTNESS_OVERRIDE_NONE); 
    win.setAttributes(lp); 
} 

private void changeBtnBacklight(LayoutParams lp, float value) { 
    if (Integer.parseInt(Build.VERSION.SDK) >= 8) { 
     try { 
      new BtnBrightness(lp, value); 
     } catch (Exception e) { 
      Log.w(TAG, "Error changing button brightness"); 
      e.printStackTrace(); 
     } 
    } 
} 

private static class BtnBrightness { 
    BtnBrightness(LayoutParams lp, float v) { 
     lp.buttonBrightness = v; 
    } 
} 
+0

有没有办法从活动外部访问'getWindow()',就像在服务中一样? – faizal 2014-07-15 07:39:33