2011-10-04 29 views
27

मैं खोज रहा था कि स्क्रीन की चमक को कैसे बदलना है और मुझे this मिला है, यह बहुत अच्छा समाधान है और यह अच्छा काम करता है, लेकिन यह केवल मेरे काम सक्रिय होने पर ही काम करता है। मेरे एप्लिकेशन को बंद करने के बाद, जब मैं अपना ऐप शुरू करता हूं तो चमक उसी मूल्य पर वापस लौटा दी जाती है।स्क्रीन चमक को प्रोग्रामेटिक रूप से बदलना (पावर विजेट के साथ)

मैं अपने पावर विजेट से चमक बटन पर दबाए जाने की तरह चमक को बदलने में सक्षम होना चाहता हूं। एंड्रॉइड से आने वाले पावर विजेट में 3 राज्य हैं। एक बहुत उज्ज्वल एक बहुत अंधेरा और बीच में एक। क्या इस विजेट पर कोई दबाए जाने पर चमक को बदलना संभव है?

enter image description here

Edit1: मैं 200 लेकिन साथ इस बनाया है और मैं अपने प्रकट करने के लिए permision जोड़ा है, लेकिन जब अनुप्रयोग शुरू कर दिया है मैं चमक में कोई परिवर्तन नहीं दिख रहा है, मैं 100 के साथ 10 के साथ करने की कोशिश की है और अब कोई कोई सुझाव बदलता है?

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

आप tryed है इन http://stackoverflow.com/questions/3865883/changing-screen-brightness-in-android-emulator किनारे पर नहीं है अगर कस्टम कस्टम प्रॉपर्टी – PedroAGSantos

उत्तर

38

यह वह जगह है लेकर एक पूर्णांक है पूरा कोड जो मुझे काम करने के लिए मिला:

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

मेरे प्रश्न से कोड काम नहीं करता है क्योंकि स्क्रीन ताज़ा नहीं होती है। तो स्क्रीन को रीफ्रेश करने पर एक हैक डमी गतिविधि शुरू कर रहा है और finish() पर कॉल करने के लिए उस डमी गतिविधि के निर्माण के बजाय चमक का परिवर्तन प्रभावी होता है।

+0

अजीब है कि आपको ऐसा करना है। :/आप किस फोन का उपयोग कर रहे हैं? – Glitch

+0

यह अजीब बात नहीं है, मैं एचटीसी इच्छा का उपयोग करता हूं, मैंने सैमसंग गैलेक्सी पर भी कोड की कोशिश की ... यह डिवाइस समस्या नहीं है, यह एंड्रॉइड काम करता है, यह जीतने वाले प्रबंधक को ताज़ा होने तक चमक नहीं लगाता है और वह पीठ, होम बटन दबाकर या नई गतिविधि बनाकर ताज़ा हो जाओ ... – Lukap

+0

शायद यदि आप किसी विजेट का उपयोग करते हैं तो उसे रीफ्रेश करने की आवश्यकता नहीं होती है, लेकिन यदि आप कोड को ऑनक्रेट में डालते हैं, तो निश्चित रूप से इसे शुरू करने के लिए अतिरिक्त गतिविधि की आवश्यकता होती है, (कम से कम यह मेरा मामला था) उस डमी गतिविधि के बिना ऐप नहीं करता है कार्य संपत्ति – Lukap

13
कि कड़ी में

उपयोग टो-मोर्टेन के समाधान, लेकिन यह भी प्रणाली चमक इतनी तरह सेटिंग सेट:

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

कहाँ bright 1 से 255

+0

बदलता है मुझे कुछ अपवाद मिलता है मुझे लगता है कि मेरे पास कुछ अनुमति नहीं है, क्या आप अनुमति – Lukap

+0

क्या कोई जानता है कि मुझे किस अनुमति की आवश्यकता है? – Lukap

+0

मैं अनुमति <उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.WRITE_SETTINGS" /> जोड़ता हूं और यह अपवाद नहीं फेंकता है लेकिन यह चमक को बिल्कुल नहीं बदलता है, क्या आप मुझे परेशान कर सकते हैं समस्या क्या है? – Lukap

6

पैरामीटर सेट करते समय गतिविधि के संदर्भ को पास करना भी एक और गतिविधि शुरू करने की आवश्यकता के बिना काम पूरा करेगा। के लिए मुझ

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

काम किया निम्नलिखित मैं onSensorChanged() तरीका है जिसके प्रदर्शन जब भी यह शुरू हो रहा था मंद कर अंदर कोड के इस टुकड़े था।

+2

इसे शून्य पर सेट न करें। इसे 0.00001f पर सेट करें। इसे शून्य पर सेट करने से कुछ फोन अपने स्क्रीन को अनिश्चित काल तक बंद कर देंगे, जिससे आप पावर बटन दबाकर या बैटरी को हटाकर फोन रीसेट कर सकते हैं। –

+1

धन्यवाद, उत्तर संशोधित। –

9

मैंने आज इस समस्या को हल किया है।

पहले आप अपनी AndroidManifest.xml फ़ाइल में एक अनुमति डाल करने के लिए के रूप में:

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

कहाँ यह फाइल में डाल करने के लिए सही जगह है?

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

यह अनुमति कहती है कि आपको अन्य एप्लिकेशन को प्रभावित करने वाली सेटिंग्स को बदलने की अनुमति है।

अब आप पर और

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) 

बंद चमक स्वचालित मोड स्वचालित मोड पर या अभी बंद कर दिया है निर्धारित कर सकते हैं?आप चमक मैन्युअल रूप से बदलना चाहते हैं तो आप

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

तो जानकारी प्राप्त कर सकते,, आपको पहले मैनुअल मोड सेट करने के लिए की अपेक्षा की जाती है और उसके बाद आप चमक बदल सकते हैं।

ध्यान दें: SCREEN_BRIGHTNESS_MODE_AUTOMATIC 1

टिप्पणी है: SCREEN_BRIGHTNESS_MODE_MANUAL 0

आप इस

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

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

के बजाय

का उपयोग करना चाहिए अब आप मैन्युअल रूप से चमक बदल सकते हैं

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

और पढ़ने चमक

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

अब सब कुछ ठीक से सेट किया गया है, लेकिन ... आप अभी तक परिवर्तन नहीं देख सकता। परिवर्तन देखने के लिए आपको एक और चीज़ चाहिए! स्क्रीन रिफ्रेश ... इसलिए ऐसा करते हैं:

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) {} 

अनुमति मत भूलना ...

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

COMPLEX उदाहरण? मैनुअल में screen_brightness मोड समायोजित करने की आवश्यकता के लिए – PEPAN

+0

+1। साथ ही, एपीआई 23 और उसके बाद, मैनिफेस्ट में अनुमतियां सेट करने से अब काम नहीं होता है - https://developer.android.com/training/permissions/requesting.html देखें। एपीआई 23 और ऊपर के लिए अनुमतियों को बदलने के तरीके के लिए http://stackoverflow.com/questions/32266425/android-6-0-permission-denial-requires-permission-android-permission-write-sett देखें। – Ying

3

जटिल उदाहरण:

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

<उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.WRITE_SETTINGS" /> – PEPAN

+0

अनुमति को न भूलें! या कुछ नहीं होने वाला है! – PEPAN