2010-09-17 28 views
36

Android'de programatik olarak ekran parlaklığını değiştirmek istiyorum. Şu anda Bu kodu kullanın:android olarak programatik olarak ekran parlaklığını değiştirme

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

Ama bu örnek kod kekin değil son sürümlerinde çalışır. SDK'nın en son sürümünü kullanıyorum. Daha yeni Android Sürümleri için tercih edilen çözüm hangisidir?

+0

olası yinelenen (http://stackoverflow.com/questions/5032588/cant-apply-system-screen-brightness-programmatically-in-android) – bummi

+0

İletişim kutusunun parlaklığını artırın http://stackoverflow.com/a/29091233/185022 –

cevap

1

Bunun için IHardwareService arabirimini kullanmaya ne dersiniz? Bir örnek bu tutorial'da bulunabilir.

Güncelleme: öğretici bağlantı hala çalışıyor, ancak gerçek kod bir sonraki cevapta da kullanılabilir.

+1

Vay, kabul edilmiş bir cevap * ve * aşağıya oy. Belki seçmen bunu neden yaptığını açıklamak ister mi? –

+44

Sanırım öyle yaptı çünkü cevabınız sadece çözümün bir bağlantısını içeriyor. Stackoverflow doğrudan örnek ve çözümler toplamak için tasarlanmıştır ve kaynaklara bağlantı sadece ikincildir. Bağlantınız kesilirse cevabınız tamamen öldü. Android arayüzleri değişirse ve bir örneğiniz var ise bir açıklama ve cevabın linkinde cevabınızı sadece api değişikliklerini yansıtacak şekilde düzenleyebilirim. – Janusz

+1

Öğretici bağlantı ölü gibidir .. kaynak bulunamadı @tutorial. –

75

Bu kullanarak yapmak mümkündür:

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

Ayrıca bkz: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#screenBrightness

+4

ama parlaklık değeri bir dahaki sefere güç tasarrufu için bir sonraki kez cihaz için uyanamadı ... nasıl sadece bir pencere için tutarlı bir şekilde kaydetmek ama tüm ..... için olmalıdır ???? –

+3

float prevBrightness = layout.screenBrightness; mevcut parlaklığı alacak. OnSaveInstancedSaved() veya sharedPreference – for3st

+0

içinde kaydedin. Bu doğru yanıt –

1

çok geç cevap ama geliştirmek istiyorum ..

Ben Tor-Morten adlı kişinin koduyla ama onunla çalıştı Özellikle ekranın kendisi için, herhangi bir yeri değiştirmek istedim, bunun için hizmet yaptım.

Change brightness according to surrounding light in android

Umut, O başkalarına faydalı olacaktır.

2

@kamal_tech_view: Değeri düzenine dönüştürmelisiniz. ScreenBrightness = value; o

java.lang.IllegalArgumentException: Window type can not be changed after the window is added. bir android.app.Dialog.Dialog ile örneğe bakın atacağım

4

Bunu başka türlü oluşturulmadan önce Window params eklemek zorunda yüzer.

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(); 

Lütfen parlaklık değerinin 0.0F ile 1.0F arasında olduğunu unutmayın.

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(); 
[programlı Android'de sistem ekran parlaklığını uygulanamıyor] ait
İlgili konular