2010-09-17 90 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系统屏幕的亮度]