2012-09-30 52 views
1

我想製作一個滑塊,它將改變屏幕亮度。我已經成功與上面的代碼如何在活動完成後保持亮度設置?

做亮度代碼:

BackLightControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
      // TODO Auto-generated method stub 
      float BackLightValue = (float)progress/100.0f; 
      int brightnessMode; 
      try { 
       brightnessMode = Settings.System.getInt(getContentResolver(), 
         Settings.System.SCREEN_BRIGHTNESS_MODE); 

      if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) { 
       Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 
         Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); 
      } 
       BackLightSetting.setText(String.valueOf(BackLightValue)); 
       WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); 
       layoutParams.screenBrightness = BackLightValue; 
       getWindow().setAttributes(layoutParams); 
      } catch (SettingNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     }   

     public void onStopTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 

     public void onStartTrackingTouch(SeekBar seekBar) { 
      // TODO Auto-generated method stub 

     } 
    }); 


} 

}

的問題是,它的工作,我能看到的亮度變化而滑動滑塊,但一旦活動結束,它就返回到先前的亮度級別,這是毫無意義的。雖然在使用滑塊時禁用的自動背光設置仍然存在。 我做錯了什麼? 另外,如何防止滑塊爲0,因爲屏幕熄滅,只有通過強制關閉應用程序我可以重置更改。

回答

1

爲了防止滑塊的值爲0,您可以使用類似於一個版本是: Prevent SeekBar from moving past a dynamic point,但其修改爲使用靜態值分鐘,是這樣的:

//We want a minimum om 20 percent screen brightness 
private static int MY_MIN_VALUE = 20; 

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    if (progress > MY_MIN_VALUE){ 
     seekBar.setProgress(progress); 
     saveScreenBrightness(progreess); 
    } 

    else 
     seekBar.setProgress(MY_MIN_VALUE);  
} 

,其中方法saveScreenBrightness()是更新亮度的方法。

要保存亮度的系統,請嘗試使用下面的代碼:

System.putInt(getContentResolver(), System.SCREEN_BRIGHTNESS, brightness); 

我沒有測試過這種方法,但它應該是工作。您也可以嘗試閱讀這篇文章:Changing screen brightness programmatically (as with the power widget)

+0

感謝您的快速和有價值的答案。我已經從您的鏈接中讀取了線索,以及我發現的其他一些相關內容,但我沒有設法解決它。爲此我開始了這個線程。 –

3

爲了防止滑塊爲0,只需添加1到您的發言如果結果是0:

float BackLightValue = (float)progress/100.0f; 
if(BackLightValue == 0){ 
    BackLightValue++ 
} 

要保存亮度,請使用以下代碼並嘗試將您的活動中的完成語句延遲幾百毫秒。出於某種原因,這通常可以解決問題。

System.putInt(getContentResolver(), System.SCREEN_BRIGHTNESS, brightness); 

只需在需要更改亮度的位置添加此行即可。第三個參數「亮度」應該由您的搜索條中的值代替。在你的情況BackLightValue。請記住,亮度值的範圍從1到255。


您可能需要通過這個技巧刷新屏幕:

  • 開始活動,並立即完成它

開始這個活動你設置亮度後:

context.startActivity(new Intent(context, Bright.class)); 

虛擬活動可能是:

public class Bright extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

finish(); 
    } 
} 
+1

謝謝,0問題解決了。這是我猜想的那個簡單的。爲了節省亮度,我不太明白在哪裏放置(我在android編程方面的經驗很少)。 –

+0

我無法讓它工作。我猜想System.putInt ....保存滑塊位置的值。但它 –

0

爲了防止亮度有0值(您想亮度1-255): seekBar.setMax(254); // 0-254

//然後代替OD使用進度(0-254),可使用永諾++進展(1-255)

//和設置在搜索條進展使用--brightness

相關問題