2010-12-28 14 views
17

एंड्रॉइड में आपको पसंदीदा स्क्रीन चमक कैसे प्राप्त होती है?एंड्रॉइड में पसंदीदा स्क्रीन चमक प्राप्त करें

स्क्रीन चमक बदलने के लिए मैं WindowManager.LayoutParams.screenBrightness का उपयोग करता हूं। प्रलेखन के अनुसार:

यह स्क्रीन के उपयोगकर्ता की पसंदीदा चमक ओवरराइड करने के लिए इस्तेमाल किया जा सकता। 0 से कम मान, डिफ़ॉल्ट, पसंदीदा स्क्रीन चमक का उपयोग करने का मतलब है। 0 से 1 अंधेरे से पूर्ण चमकदार चमक को समायोजित करता है।

screenBrightness 0 से कम है, मैं पसंदीदा स्क्रीन चमक से शुरू करना चाहता हूं। मैं यह मूल्य कैसे प्राप्त कर सकता हूं?

+0

मुझे लगता है कि मेरे लिए सवाल का ध्यान यह है (धन्यवाद डेविड): क्या मैं स्वचालित मोड में सिस्टम द्वारा सेट की गई वास्तविक वास्तविक स्क्रीन चमक प्राप्त कर सकता हूं? – Yossi

+0

@hpique क्या आपको इस प्रश्न/समस्या का समाधान मिल सकता है? – safari

उत्तर

-1

प्रश्न के उत्तर देने के लिए अच्छी तरह से पूछा गया है कि आप Settings.system.SCREEN_BRIGHTNESS से पसंदीदा चमक प्राप्त कर सकते हैं। यह रेंज 0-255 है।

int UserBrightness = Settings.System.getInt(getContentResolver(), 
      Settings.System.SCREEN_BRIGHTNESS,-1); 

क्या curent चमक वास्तव में स्वचालित मोड या किसी ऐप अपने आप चमक की स्थापना करके सेट के रूप में, इस समय है एक अलग प्रश्न वास्तव में है और मैं भी जवाब में रुचि होगी।

35

मैं जवाब देने का प्रयास करूंगा क्योंकि मैंने कुछ समय पहले ही इसकी खोज की है। मेरा लघु उत्तर है: व्यापक शोध के बाद ऑटो मोड पर वर्तमान चमक स्तर प्राप्त करने का कोई तरीका नहीं मिला है।

मैं इसे कई उत्तरों में तोड़ दूंगा। मैं परिसर को नहीं छोड़ूंगा, ताकि googlers को यह सहायक मिल सके। छोड़ें जो आपको चाहिए नहीं है।

1- प्राप्त चमक सेटिंग मूल्य

जब screenBrightness 0 से कम है मैं वरीय स्क्रीन चमक के साथ शुरू करना चाहते हैं। मैं यह मूल्य कैसे प्राप्त कर सकता हूं?

ऐसे व्यक्ति के लिए जिसकी प्रतिष्ठा है, मुझे यकीन है कि आप खोज के बारे में पहले ही ड्रिल जानते हैं। एसओ पर इसके बारे में बहुत सारे जवाब हैं। बस इसी तरह के प्रश्नों के साथ सही पैनल की जांच करें ... जो कहा, मैं ज्यादा जानकारी नहीं दूंगा।

int oldBrightness = Settings.System.getInt(getContext().getContentResolver(), 
      Settings.System.SCREEN_BRIGHTNESS); 

यह कैसे Android के BrightnessPreference.java 2.3.5 में ऐसा है (लाइन 68 देखें)। यह भी वही है (व्यावहारिक कारणों से) क्या lfor पोस्ट किया गया है।

यह नाम दिया है कुछ नहीं के लिए वर्ष चमक नहीं है। यह एक सेटिंग है जो कहीं भी संग्रहीत है, वर्तमान मूल्य नहीं। आप केवल यह सुनिश्चित कर सकते हैं कि यदि आप मैन्युअल चमक मोड में हैं तो उपयोगकर्ता यह अनुभव कर रहा है कि उपयोगकर्ता क्या अनुभव कर रहा है। अन्यथा, आप बस नहीं जानते। आप की जाँच करनी चाहिए:

int mode = Settings.System.getInt(getContext().getContentResolver(), 
        Settings.System.SCREEN_BRIGHTNESS_MODE); 

2- स्क्रीन चमक को सुनें बदलता है

हम जानते हैं, आम तौर पर, जब हम एंड्रॉयड में परिवर्तन को सुनने के लिए चाहते हैं, हम Intent कार्यों को सुनने की कोशिश कर सकते हैं, BroadcastReceiver दर्ज की एस और वह सब।हालांकि, AFAIK, उदाहरण के लिए SCREEN_[ON|OFF] जैसे चमक परिवर्तनों के लिए ACTION_ नहीं है। शायद सिस्टम में एक छिपा हुआ है, लेकिन मैंने इसे कभी नहीं देखा है, और यदि यह सार्वजनिक रूप से उपलब्ध नहीं है, तो आपके पास उससे निपटने के सभी संभावित नुकसान हैं।

डियान हैकबर्न से दिसम्बर 2010 का एक संदेश है, जहां वह कहती है कि "there is no broadcast for screen brightness changes"

तो, मुझे विश्वास नहीं है कि ऐसा कुछ करने में एक तरीका है। aprox

Settings.System.putInt(getContext().getContentResolver(), 
    SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 

3- व्यापक प्रकाश को सुनें बदलता है

आप कर सकते हैं, हालांकि,: बेशक, आप सेटिंग में ही बदल सकते हैं। प्रकाश की मात्रा का पता लगाएं। आप implements SensorEventListener करने की जरूरत है और:

// class definition: 
private SensorManager sensorManager; 

@Override 
public void onSensorChanged(SensorEvent event) { 
    float values = event.values[0]; // Ambient LUX 
} 
// onCreate: 
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
sensorManager.registerListener(this, 
    sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT), 
    SensorManager.SENSOR_DELAY_UI); 

4- अनुमान चमक परिवर्तन

कि सभी ने कहा, मैं भी Hackborn के सवाल दोहराने चाहिए के बाद: "क्या आप को पूरा करने के प्रयास कर रहे हैं" (यह बक्षीस मालिक के लिए है)। मुझे यह देखने में खुशी होगी कि कैसे एंड्रॉइड मैप्स परिवेश लक्स चमक स्क्रीन करने के लिए। मुझे पूरा यकीन है कि यह रैखिक चीज नहीं है (नक्शा Sensor.getMaximumRange() रैखिक रूप से 0..1 फ्लोट अंतराल पर)। मैंने देखा है कि आम तौर पर यह मैप किया गया लॉगरिदमिक (निचले चमक सीमा में बेहतर समायोजन प्रदान करता है), लेकिन मुझे पैरामीटर के बारे में कोई जानकारी नहीं है। शायद एक सुझाया गया डिफ़ॉल्ट तरीका है कि हर कोई उपयोग करता है, लेकिन मैं कोई विशेषज्ञ नहीं हूं।

आप मिल सकता है कैसे एंड्रॉयड स्रोतों जहां यह है कि, यह है कि यह बहुत अच्छा होगा में जगह में देख कर यह करता है। लेकिन वैसे भी, मैं आपको एक ही प्रश्न के साथ छोड़ने के लिए इतना लंबा नहीं आया था। मुझे जो मिला है वह Sensor.getMaximumRange()SensorEventvalues[0] से प्राप्त होने वाली चीज़ों के अनुरूप नहीं है। यहां, मेरे पास एक तीव्र सेंसर (नेक्सस एस) है, और हालांकि रिपोर्ट अधिकतम 3,000 है, मैंने 10,240 तक के मान देखे हैं।

तो, सेंसर प्राप्त करना विश्वसनीय नहीं है (?)। मैं एंड्रॉइड का उपयोग करके देखे गए व्यवहार से अनुमान लगा रहा हूं, कि किसी भी तरह से यह अधिकतम चमक के लिए MaxaxValue() प्राप्त करता है, और इसके ऊपर कोई भी मूल्य कोई फर्क नहीं पड़ता है।

5- कहाँ यहाँ

से जाने के लिए मैं एंड्रॉयड स्रोतों में अधिक देखने के लिए चाहते हैं। कहीं, शायद निम्न स्तर पर, हार्डवेयर प्रबंधन सामग्री, आप देख सकते हैं कि वे कैसे मानचित्र करते हैं। फिर भी, मुझे आश्चर्य है कि क्या यह विश्वसनीय है, इस बात पर विचार करते हुए कि डियान हैकबर्न ने क्या कहा (वे ऐसा नहीं करना चाहते हैं कि आप ऐसा करें)। मुझे लगता है कि उनके पास इसका पर्दाफाश करने का कोई कारण नहीं था। शायद जरूरत है: ऐप को सिस्टम सेटिंग क्यों जाननी चाहिए? इसे या तो अपने स्वयं के, ऐप-वाइड लेवल, या चरम मामलों में, सिस्टम-व्यापी प्रतिस्थापन या प्रबंधक के लिए अपनी "ऑटोब्राइटनेस चेंज विधि" (ऊपर बिंदु 4 के रूप में) प्रदान करने की आवश्यकता है। शायद यही मूल डेवलपर्स सोचा था।

वैसे भी, यदि कोई अन्य विवरण ढूंढता है, तो मुझे जानकर बहुत खुशी होगी।

+0

धन्यवाद, बहुत अच्छा जवाब, लेकिन जैसा कि आप शुरुआत में बताते हैं, आपके पास विशिष्ट प्रश्न का उत्तर नहीं है। यदि कोई उत्तर नहीं आता है तो मैं आपको बक्षीस दूंगा। – Yossi

+0

धन्यवाद, लेकिन इसके बारे में चिंता न करें। मेरा मुख्य इरादा विषय में कुछ जोड़ रहा था क्योंकि मैंने पहले से ही इसका शोध किया है (जैसा कि आप देख सकते हैं)। अगर कोई इस मुद्दे पर सकारात्मक उत्तर के साथ यहां आ जाता है तो मैं वास्तव में खुश रहूंगा। :-) – davidcesarino

+2

डेविड, ऊपर आइटम 2 के बारे में (स्क्रीन चमक में परिवर्तन सुनें): Google की पावर कंट्रोल एपविजेट चमक सेटिंग में बदलावों को सुनने के लिए एक सामग्री ऑब्सर्वर पंजीकृत करता है। वास्तविक स्क्रीन चमक परिवर्तनों को सुनने के समान नहीं है, लेकिन कुछ भी बेहतर नहीं है: resolver.registerContentObserver (सेटिंग्स.System.getUriFor (सेटिंग्स.System.SCREEN_BRIGHTNESS), झूठी, यह); resolver.registerContentObserver (सेटिंग्स.System.getUriFor (सेटिंग्स.System.SCREEN_BRIGHTNESS_MODE), झूठी, यह); –

संबंधित मुद्दे