2012-02-18 77 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