2011-10-04 16 views
27

Ekranın parlaklığını program aracılığıyla nasıl değiştireceğimi araştırıyordum ve this buldum çok iyi bir çözüm ve güzel çalışıyor, ancak yalnızca uygulamam etkinken çalışıyor. Uygulamam kapatıldıktan sonra, uygulamamı başlatmadan önce parlaklık aynı değere geri döndürülüyor.Ekran parlaklığını program aracılığıyla değiştirme (güç parçacığındaki gibi)

Parlaklık düğmesindeki parlaklık düğmesine bastığımda olduğu gibi parlaklığı değiştirmek istiyorum. Android'den gelen güç parçasında 3 durum vardır. Çok parlak biri çok karanlık ve arada bir. Bu Widget'a basıldığında olduğu gibi parlaklığı değiştirmek mümkün mü?

enter image description here

Edit1: hayır 200 ama şimdi ben yarattım ve benim tezahür etmek permision eklendi ancak uygulamanın Ben parlaklığı herhangi bir değişiklik görmüyorum başlatıldığında, ben 100 ile 10 ile çalıştı ve herhangi bir öneride değişiklik yapar?

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
android.provider.Settings.System.putInt(this.getContentResolver(), 
     android.provider.Settings.System.SCREEN_BRIGHTNESS, 200); 
} 
+0

sen uğraş olan bu http:/ yüzden bunu ... ekranı yenile /stackoverflow.com/questions/3865883/changing-screen-brightness-in-android-emulator eğer özel parlaklık proprety değiştirmek – PedroAGSantos

cevap

38

arasında değişen bir tam sayıdır

android.provider.Settings.System.putInt(getContext().getContentResolver(), 
android.provider.Settings.System.SCREEN_BRIGHTNESS, bright); 

Çalıştığını bulduğum tam kod:

Settings.System.putInt(this.getContentResolver(), 
     Settings.System.SCREEN_BRIGHTNESS, 20); 

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
lp.screenBrightness =0.2f;// 100/100.0f; 
getWindow().setAttributes(lp); 

startActivity(new Intent(this,RefreshScreen.class)); 

Sorgunun kodu ekran yenilenmez çünkü çalışmaz. Ekranı yenilemeye çalışan bir kişi, kukla aktiviteyi başlatıyor ve finish() numaralı telefonu aramak için bu kukla etkinliğin yaratılmasından daha fazladır.

+0

Tek yapman gereken. :/Hangi telefonu kullanıyorsunuz? – Glitch

+0

Bu garip değil, htc desire kullanıyorum, Samsung galaksideki kodu da denedim ... Bu cihaz sorunu değil, android çalışıyor, sadece win yöneticisi yenilenene kadar parlaklığı uygulamıyor ve o arkaya, ana dümeye basarak ya da yeni etkinlik yaratarak yenilenir ... – Lukap

+0

Belki de bir widget kullanıyorsanız yenilenmesi gerekiyor, ancak kodu oncreate koymak durumunda, bu kukla aktivite olmadan uygulamanın başlaması için kesinlikle ek aktivite, (en azından bu benim durumum) kesinlikle gerekir work property – Lukap

13

Kullanım Tor-Morten adlı kişinin o bağlantıdaki çözüm değil, aynı zamanda şöyle ayarı sistemi parlaklığını ayarlayın: bright 1'den budur 255.

+0

değiştirmek değil eğer bazı istisna var sanırım, ben bazı izin yok sanırım w izin – Lukap

+0

Birisi hangi izinlere ihtiyacım olduğunu biliyor mu? – Lukap

+0

Izin izni ve istisna atmıyoruz ama bu hiç de parlaklığı değiştirmiyor, sorun ne diyebilirim? – Lukap

6

Parametreleri ayarlarken aktivitenin bağlamını geçmek, başka bir faaliyeti başlatma gereği duymadan işi de alır. Me-

WindowManager.LayoutParams lp = this.getWindow().getAttributes(); 
lp.screenBrightness =0.00001f;// i needed to dim the display 
this.getWindow().setAttributes(lp); 

çalışmış aşağıdaki I onSensorChanged bu tetiklendiği zaman ekran soluk() yöntem içinde bu kod parçası vardı.

+2

Hiçbir zaman sıfıra ayarlamayın. 0.00001f'ye ayarlayın. Onu sıfıra ayarlamak, bazı telefonların süresiz olarak ekranını kapatmasına neden olur ve güç düğmesini basılı tutarak veya pili çıkartarak telefonu sıfırlamanızı sağlar. –

+1

Teşekkürler, cevabı değiştirdim. –

9

Bu sorunu bugün çözdüm. AndroidManifest.xml dosyasına izni koymak için sahip olduğunuz ilk olarak

:

o dosyaya koymak için kesin bir yerdir
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

?

<manifest> 
    <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
    <application> 
     <activity /> 
    </application> 
</manifest> 

Bu izin, diğer uygulamaları da etkileyen ayarları değiştirmenize izin verildiğini söylüyor.

Şimdi üzerinde ve

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); //this will set the automatic mode on 
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); //this will set the manual mode (set the automatic mode off) 

kapalı parlaklık otomatik mod otomatik mod üzerinde veya şu anda kapalı mı ayarlayabilirsiniz?el parlaklığını değiştirmek isterseniz,

int mode = -1; 
try { 
    mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); //this will return integer (0 or 1) 
} catch (Exception e) {} 

Yani bilgi alabilir, önce manuel modunu ayarlamak gerekiyor ve bundan sonra parlaklığını değiştirebilir.

not: SCREEN_BRIGHTNESS_MODE_AUTOMATIC 1

notudur: SCREEN_BRIGHTNESS_MODE_MANUAL 0

Şimdi el parlaklığını değiştirebilir yerine bu

if (mode == 1) { 
    //Automatic mode 
} else { 
    //Manual mode 
} 

bu

if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) { 
    //Automatic mode 
} else { 
    //Manual mode 
} 

kullanmalıdır olduğunu

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness); //brightness is an integer variable (0-255), but dont use 0 

ve parlaklık

try { 
    int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //returns integer value 0-255 
} catch (Exception e) {} 

Şimdi her şey doğru ayarlanmış olduğundan okumak, ama ... Henüz değişikliği göremez. Değişikliği görmek için bir şey daha lazım!

try { 
     int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //this will get the information you have just set... 

     WindowManager.LayoutParams lp = getWindow().getAttributes(); 
     lp.screenBrightness = (float) br/255; //...and put it here 
     getWindow().setAttributes(lp); 
    } catch (Exception e) {} 

izni unutma ...

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
+0

KOMPLEKS ÖRNEĞİ Screen_brightness modunun manuel olarak ayarlanması için – PEPAN

+0

+1. Ayrıca, API 23 ve üstü için, bildirimdeki izinlerin ayarlanması artık işe yaramaz - bkz. Https://developer.android.com/training/permissions/requesting.html. API 23 ve üstündeki izinlerin nasıl değiştirileceğine ilişkin http://stackoverflow.com/questions/32266425/android-6-0-permission-denial-requires-permission-android-permission-write-sett sayfasına bakın. – Ying

3

KOMPLEKS ÖRNEK:

try { 
     //sets manual mode and brightnes 255 
     Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); //this will set the manual mode (set the automatic mode off) 
     Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255); //this will set the brightness to maximum (255) 

     //refreshes the screen 
     int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); 
     WindowManager.LayoutParams lp = getWindow().getAttributes(); 
     lp.screenBrightness = (float) br/255; 
     getWindow().setAttributes(lp); 

    } catch (Exception e) {} 
+0

PEPAN

+0

İzinleri unutma! Ya da hiçbir şey olmayacak! – PEPAN