2012-02-18 74 views
5

我只是试图打开和关闭自动亮度。 我开始使用此代码(onCreate方法内)如何打开和关闭自动亮度? (不是重复)

final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.brightToggle); 

    // display auto brightness state 
    final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.autoToggle); 
    autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 

    autoBrightToggle.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (autoBrightToggle.isChecked()) { 
       setAutoBright(true); 
      } else { 
       setAutoBright(false); 
      } 
     } 
    }); // end anonymous OnClickListener function 

    // toggle the brightness mode 
    private void setAutoBright(boolean mode) { 
     if (mode) { 
     Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
     autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 
     } else { 
     Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
     autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 
     } 
    } 

似乎这不工作。 setAutoBrightnessMode()方法也在onResume()中再次调用,但具有相同的非结果。 无论如何,如果有人觉得这个问题是多余的,但是其他帖子没有让我去哪里,我很抱歉!

(FWIW - 我在我的旧的Droid X和我的Galaxy Nexus的测试这个,而不是模拟器)

编辑 - 更新本: 我确信,现在我没有看到任何我99%更改“设置”面板和桌面小部件中反映的“自动亮度”模式 - 尽管我实际上可能正在更改其值。 问题的一部分是我不知道如果自动亮度开启或不开启,确切地确定

例如,屏幕快速和明显地改变?我一直期待根据环境立即发现明亮的亮度变化 - 但也许这些变化很微妙?并在更长的时间?或者在亮度变化之前可能需要30秒或更长时间的环境变化?

有人可以建议我如何跟踪?我试着查询Settings.System.SCREEN_BRIGHTNESS_MODE恒 - 挂钩这种方法到一个文本框:

private int getAutoBrightnessMode() { 
    try { 
     int brightnessMode = Settings.System.getInt(cr, SCREEN_BRIGHTNESS_MODE); 
    } catch (Settings.SettingNotFoundException e) { 
     e.printStackTrace(); 
     int brightnessMode = -10000; 
    } 
    return brightnessMode; 
    } 

但它始终即使读数为0,一个的onResume()。 : - ((

我知道这是一个简单的程序,但我试图自己学习这些东西,并且几乎没有正式的CS培训......所以我只能说我很这个沮丧,觉得我把自己累得一个角落里,在这一点上我很恼火同心难改了。

因此,帮助将是巨大的。

+0

什么都没有?我希望这是简单的! – 2012-02-19 07:22:20

+0

我想你将不得不在Android清单中授予适当的权限(例如'android.permission.WRITE_SETTINGS')。 – 2012-02-20 20:10:53

+0

谢谢 - 我确实这么做了。应该提到这一点。 – 2012-02-21 00:44:08

回答

8

我用下面的方法中我的应用程序在HTC Desire HD和noname中文平板电脑上测试
加入清单许可:

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

并使用下面的代码来切换自动亮度。代码中有一个技巧:我们需要手动刷新应用程序的亮度,因为它不会自动更改。可能是你的情况是这个问题。

void setAutoBrightness(boolean value) { 
    if (value) { 
     Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
    } else { 
     Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
    } 

    // After brightness change we need to "refresh" current app brightness 
    if (isChecked) { 
     refreshBrightness(-1); 
    } else { 
     refreshBrightness(getBrightnessLevel()); 
    } 
} 

private void refreshBrightness(float brightness) { 
    WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    if (brightness < 0) { 
     lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE; 
    } else { 
     lp.screenBrightness = brightness; 
    } 
    getWindow().setAttributes(lp); 
} 

int getBrightnessLevel() { 
    try { 
     int value = Settings.System.getInt(getContentResolver(), SCREEN_BRIGHTNESS); 
     // convert brightness level to range 0..1 
     value = value/255; 
     return value; 
    } catch (SettingNotFoundException e) { 
     return 0; 
    } 
} 
+0

谢谢你回答谢尔盖,但我不知道这是我的问题的解决方案。我没有任何困难让屏幕/窗口反映使用seekBar对其进行的任何更改,屏幕的亮度即时更改,而无需手动刷新窗口属性。关于自动亮度,我使用与setAutoBrightness方法完全相同的代码,但它似乎没有做任何事情。在设置亮度值后,我一直试图使用'刷新'的想法,但它似乎没有任何影响自动亮度是否处于自动模式或不如 – 2012-02-21 05:23:35

+0

正如我上面提到的谢尔盖 - 你怎么能够判断模式是否被切换?我只是在看设置和/或我的电源设置小部件...但我开始想,也许它不反映这些变化。所以我试着只是测试一下自己从黑暗走向光明 - 但我不知道它如何快速地改变亮度等。 - 你可以在上面看到我所要求的完整解释。 – 2012-02-22 05:27:03

+0

'isChecked'是什么意思?你在哪里设置这个变量? – Deqing 2014-01-06 08:39:50