2012-02-18 23 views
5

मैं बस ऑटो चमक को चालू और बंद करने की कोशिश कर रहा हूं। मैंऑटो चमक को चालू और बंद कैसे करें? (दोहराना नहीं)

final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.brightToggle); 

    // display auto brightness state 
    final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.autoToggle); 
    autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 

    autoBrightToggle.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (autoBrightToggle.isChecked()) { 
       setAutoBright(true); 
      } else { 
       setAutoBright(false); 
      } 
     } 
    }); // end anonymous OnClickListener function 

    // toggle the brightness mode 
    private void setAutoBright(boolean mode) { 
     if (mode) { 
     Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
     autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 
     } else { 
     Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
     autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 
     } 
    } 

कौन सा काम करने के लिए प्रतीत नहीं होता है इस कोड (onCreate विधि के अंदर) के साथ शुरू कर दिया। SetAutoBrightnessMode() विधि को फिर से रेस्यूम() में भी कहा जाता है लेकिन उसी गैर-परिणाम के साथ। वैसे भी, मुझे खेद है अगर किसी को लगता है कि यह सवाल अनावश्यक है लेकिन अन्य पोस्ट मुझे नहीं मिला जहां मुझे जाना है!

(Fwiw - मैं अपने पुराने Droid एक्स और मेरी Galaxy Nexus के इस परीक्षण कर रहा हूँ, एम्यूलेटर नहीं)

संपादित - इस को अपडेट: मुझे यकीन है कि अब है कि मैं किसी भी नहीं दिखाई दे रहा 99% कर रहा हूँ सेटिंग पैनल और डेस्कटॉप विगेट्स में प्रतिबिंबित ऑटो-ब्राइटनेस मोड में परिवर्तन - भले ही मैं वास्तव में इसका मूल्य बदल सकता हूं। समस्या का हिस्सा यह है कि मुझे नहीं पता कि ऑटो-ब्राइटनेस चालू है या नहीं, तो को निर्धारित करने के लिए बिल्कुल सही कैसे है!

उदाहरण के लिए, बदलने के जल्दी और दिख स्क्रीन करता है? मैं पर्यावरण के अनुसार चमक में तत्काल दृश्य परिवर्तन की उम्मीद कर रहा हूं - लेकिन शायद बदलाव सूक्ष्म हैं? और एक लंबी अवधि में? या शायद चमक परिवर्तन से पहले 30 सेकंड या उससे अधिक पर्यावरण परिवर्तन लेता है?

क्या कोई सुझाव दे सकता है कि मैं इसे कैसे ट्रैक कर सकता हूं? मैं Settings.System.SCREEN_BRIGHTNESS_MODE निरंतर क्वेरी करने की है की कोशिश की - किसी पाठ फ़ील्ड के लिए इस विधि को hooking:

private int getAutoBrightnessMode() { 
    try { 
     int brightnessMode = Settings.System.getInt(cr, SCREEN_BRIGHTNESS_MODE); 
    } catch (Settings.SettingNotFoundException e) { 
     e.printStackTrace(); 
     int brightnessMode = -10000; 
    } 
    return brightnessMode; 
    } 

लेकिन यह हमेशा 0 पढ़ता एक onResume() के बाद भी। : - ((

मैं जानता हूँ कि यह एक सरल प्रक्रिया है, लेकिन मैं अपने दम पर इस सामग्री को जानने के लिए कोशिश कर रहा हूँ, और लगभग कोई औपचारिक सीएस प्रशिक्षण पड़ा है ... इसलिए सभी मैं कह सकता है मैं बहुत हूँ इस से निराश और लगता है कि मैं अपने आप को एक कोने में और इस बिंदु पर काम किया है मैं बहुत नाराज मैं सीधे अब और नहीं सोच सकता हूँ।

तो मदद बहुत अच्छा होगा।

+0

कुछ भी नहीं ?? मैं उम्मीद कर रहा था कि यह कुछ आसान था! –

+0

मुझे लगता है कि आपको एंड्रॉइड मेनिफेस्ट में उचित अनुमतियां देनी होंगी (उदा। 'Android.permission.WRITE_SETTINGS') भी। –

+0

धन्यवाद - मैंने ऐसा किया था। इसका उल्लेख करना चाहिए था। –

उत्तर

8

मैं में दृष्टिकोण निम्नलिखित का उपयोग करें मेरा आवेदन। एचटीसी डिजायर एचडी और गैर-चीनी चीनी गोलियों की जोड़ी पर परीक्षण किया गया।
मेनिफेस्ट अनुमति में जोड़ें:

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

और स्वत: चमक को टॉगल करने के लिए कोड के नीचे उपयोग करें। कोड में एक चाल है: हमें मैन्युअल रूप से ऐप की चमक को "रीफ्रेश" करने की आवश्यकता है, क्योंकि यह स्वचालित रूप से परिवर्तित नहीं होता है। हो सकता है कि यह आपके मामले में समस्या हो।

void setAutoBrightness(boolean value) { 
    if (value) { 
     Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
    } else { 
     Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
    } 

    // After brightness change we need to "refresh" current app brightness 
    if (isChecked) { 
     refreshBrightness(-1); 
    } else { 
     refreshBrightness(getBrightnessLevel()); 
    } 
} 

private void refreshBrightness(float brightness) { 
    WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    if (brightness < 0) { 
     lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE; 
    } else { 
     lp.screenBrightness = brightness; 
    } 
    getWindow().setAttributes(lp); 
} 

int getBrightnessLevel() { 
    try { 
     int value = Settings.System.getInt(getContentResolver(), SCREEN_BRIGHTNESS); 
     // convert brightness level to range 0..1 
     value = value/255; 
     return value; 
    } catch (SettingNotFoundException e) { 
     return 0; 
    } 
} 
+0

सेर्गेई का जवाब देने के लिए धन्यवाद, लेकिन मुझे यकीन नहीं है कि यह मेरे प्रश्न का समाधान है। मुझे seekbar का उपयोग करके किए गए किसी भी बदलाव को प्रतिबिंबित करने के लिए स्क्रीन/विंडो प्राप्त करने में कोई परेशानी नहीं है, स्क्रीन की चमक मैन्युअल रूप से विंडो विशेषताओं को रीफ्रेश करने की आवश्यकता के बिना तुरंत बदल जाती है। ऑटो-ब्राइटनेस के बारे में, मेरे पास आपके सेटऑटोब्राइटनेस विधि के समान सटीक कोड है, यह ऐसा कुछ नहीं लगता है।मैं चमक मूल्यों को सेट करने के बाद 'ताज़ा करने' के अपने विचार का उपयोग करने का प्रयास कर रहा हूं, लेकिन ऐसा लगता है कि ऑटो-ब्राइटनेस ऑटो मोड में है या नहीं –

+0

जैसा कि मैंने सर्गेई के ऊपर उल्लेख किया है - आप कैसे सक्षम हैं यह बताने के लिए कि मोड को टॉगल किया गया है या नहीं? मैं बस सेटिंग और/या मेरे पावर सेटिंग्स विजेट देख रहा था ... लेकिन मुझे लगता है कि यह बदलावों को प्रतिबिंबित नहीं कर रहा था। इसलिए मैंने इसे अपने स्वयं को अंधेरे से प्रकाश में जाने का परीक्षण करने की कोशिश की - लेकिन मुझे नहीं पता कि यह चमक कितनी तेज़ी से बदलता है - आप ऊपर जो देख रहे हैं उसके पूर्ण स्पष्टीकरण के लिए आप देख सकते हैं। –

+0

'चेक किया गया' का अर्थ यहां क्या है? आप इस चर को कहां सेट करते हैं? – Deqing