2010-09-17 152 views
36

我想在android中以編程方式更改屏幕亮度。 目前我使用此代碼:在android中以編程方式更改屏幕亮度

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
float brightness=1.0f; 
lp.screenBrightness = brightness; 
getWindow().setAttributes(lp); 

但此示例代碼適用於蛋糕,而不是最新版本。我正在使用最新版本的SDK ..對於更新的Android版本,首選解決方案是什麼?

+0

可能重複(http://stackoverflow.com/questions/5032588/cant-apply-system-screen-brightness-programmatically-in-android) – bummi 2014-09-22 13:23:23

+0

增加對話框顯示的亮度http://stackoverflow.com/a/29091233/185022 – 2015-03-17 04:23:04

回答

1

如何使用IHardwareService接口進行此操作?可以在tutorial中找到一個示例。

更新:教程鏈接仍然有效,但實際代碼也可用於下一個答案。

+1

哇,接受的答案*和*的投票。也許選民會在意解釋他爲什麼這樣做? – 2010-09-23 20:22:19

+44

我認爲他這樣做是因爲您的回答只包含解決方案的鏈接。 Stackoverflow旨在直接收集示例和解決方案,並且鏈接到源只是次要的。如果你的鏈接死了,你的回答就完全失效了。如果android界面發生變化,並且您有一個示例解釋並在答案的鏈接中,我可以編輯您的答案以反映api更改。 – Janusz 2011-02-07 15:17:37

+1

教程鏈接就像死一樣..沒有找到源代碼@ tutorial。 – 2013-01-25 06:55:31

75

這可能是通過使用要做到:

WindowManager.LayoutParams layout = getWindow().getAttributes(); 
layout.screenBrightness = 1F; 
getWindow().setAttributes(layout); 

參見: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#screenBrightness

+4

,但亮度值沒有得到保存,下次設備從關機時醒來......如何一直保存它不僅僅是一個窗口,而且應該是所有的..... ???? – 2011-12-16 12:26:07

+3

float prevBrightness = layout.screenBrightness;將獲得當前的亮度。將其保存在onSaveInstancedSaved()或sharedPreference – for3st 2014-05-14 14:58:32

+0

這應該是正確答案 – 2015-04-24 10:36:31

2

@kamal_tech_view:您必須轉換值layout.screenBrightness = value;浮動

4

你有被創建之前否則PARAMS添加到Window它會拋出java.lang.IllegalArgumentException: Window type can not be changed after the window is added.

請參閱使用android.app.Dialog.Dialog的例子。

final Dialog dialog = new Dialog(this) { 
      @Override 
      public void onAttachedToWindow() { 
       super.onAttachedToWindow(); 
       WindowManager.LayoutParams layout = getWindow() 
         .getAttributes(); 
       layout.screenBrightness = 1F; 
       getWindow().setAttributes(layout); 
      } 
     }; 
     dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     dialog.show(); 

請注意亮度值在0.0F和1.0F之間。

0
final Dialog dialog = new Dialog(act); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog 
       .setContentView(R.layout.menubase_brightness_control); 
     dialog.setCanceledOnTouchOutside(true); 

     SeekBar global_brightness_control = (SeekBar) dialog 
       .findViewById(R.id.global_brightness_control); 
     global_brightness_control.setMax(255); 
     global_brightness_control.setProgress(Settings.System.getInt(
       con.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)); 

     global_brightness_control 
       .setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

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

        } 

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

        } 

        public void onProgressChanged(SeekBar seekBar, 
                int progress, boolean fromUser) { 
         Settings.System 
           .putInt(con.getContentResolver(), 
             Settings.System.SCREEN_BRIGHTNESS, progress); 
        } 
       }); 

     dialog.show(); 
的[無法應用編程Android系統屏幕的亮度]