2013-11-21 9 views
7

मुझे स्क्रीन चमक सेट करने का प्रयास करने में परेशानी हो रही है। ऐसा करने के लिए मैं निम्नलिखित कोड का उपयोग करें:कुछ एंड्रॉइड डिवाइस पर ब्राइटनेस सेट करने पर समस्या

Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness); 

जहां brightness 0 और 255 के

समस्या के बीच एक मूल्य है कि कुछ डिवाइस में यह काम करता है है (HTC One, Nexus 5, ...) , दूसरों में नहीं! उदाहरण के लिए, यदि मैं सैमसंग डिवाइस में स्क्रीन चमक सेट करने के लिए इस फ़ंक्शन का उपयोग करता हूं तो स्क्रीन चमकदार या मंद नहीं होती है, अगर मैं "अधिसूचना पैनल" (स्क्रीन के शीर्ष से नीचे स्लाइडिंग) में जाता हूं तो मैं चमक स्तर देख सकता हूं बदला हुआ।

क्या कोई भी सभी एंड्रॉइड डिवाइसों के साथ काम करने वाली चमक सेट करने का तरीका जानता है? और क्या किसी को पता है कि यह कुछ उपकरणों में क्यों काम करता है, लेकिन दूसरे में नहीं?

UPDATE 1:

यह विधि एक BroadcastReceiver में प्रयोग किया जाता है, तो कोई गतिविधि नहीं है वहाँ!

+0

कौन सा डिवाइस इस समस्या है? कोई विशिष्ट ब्रांड या एंड्रॉइड संस्करण? – gian1200

+0

एंड्रॉइड के प्रत्येक संस्करण पर प्रत्येक सैमसंग डिवाइस मैंने परीक्षण किया है (सभी 4.0 +)। –

+0

क्या आपने चमक स्थापित करने के बाद एक डमी गतिविधि शुरू करने का प्रयास किया है? इस दृष्टिकोण का यहां उल्लेख किया गया है: [लिंक] (http://stackoverflow.com/a/7658364)। – Vikram

उत्तर

0

आप चमक सेटिंग को बदलने के बजाय वर्तमान विंडो के लिए चमक को ओवरराइड कर सकते हैं।

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    if (overrideBrightness) 
     lp.screenBrightness = BRIGHTNESS_OVERRIDE_FULL; 
    else 
     lp.screenBrightness = BRIGHTNESS_OVERRIDE_NONE; 
    getWindow().setAttributes(lp); 
+0

कोई गतिविधि नहीं है! बस एक प्रसारणकर्ता –

1

चमक के लिए सिस्टम सेटिंग बदलना काम कर सकता है, लेकिन वास्तव में बदलने के लिए स्क्रीन चमक को ट्रिगर नहीं करेगा। विंडोमैनगर को रीफ्रेश होने के लिए एक ईवेंट प्राप्त करने की आवश्यकता होगी, as pointed out in an answer to this related question। इसके अलावा, यदि चमक स्विच ऑटो पर सेट किया गया है, तो प्रकाश सेटिंग सेंसर के मूल्य में परिवर्तन होने पर आपकी सेटिंग ओवरराइड हो जाएगी।

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

ऐसा करने का एक आम तरीका है एक प्रणाली मोडल विंडो प्रदर्शित कर रहा है, और इसके गुणधर्मों को LayoutParams लागू करने:

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

final View view = new View(this); 
int dimension = 0; 
int pixelFormat = PixelFormat.TRANSLUCENT; 
if (DISPLAY) { 
    view.setBackgroundColor(Color.argb(128, 255, 0, 0)); 
    dimension = LayoutParams.MATCH_PARENT; 
    pixelFormat = PixelFormat.RGBA_8888; 
} 
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     dimension, dimension, 
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
     WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL 
       | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
     pixelFormat); 
// 0f = minimum brightness; 1f = maximum brightness 
float brightness = 1f; 
params.screenBrightness = brightness; 
Settings.System.putInt(cResolver, 
     Settings.System.SCREEN_BRIGHTNESS, 255 * brightness); 
final WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
wm.addView(view, params); 

आप अपने प्रकट करने के लिए निम्न अनुमति जोड़ने की आवश्यकता होगी

स्निपेट में, DISPLAY परीक्षण उद्देश्यों के लिए ओवरले विंडो के प्रदर्शन को सक्षम करने के लिए एक सरल स्विच है। (आपको आधा पारदर्शी लाल ओवरले देखना चाहिए।)

+0

"सिस्टम मोडल विंडो" के साथ आपका क्या मतलब है? यह एक दयालु गतिविधि है? –

+0

एक अर्थ में, लेकिन यह कुछ हद तक भूरे रंग का क्षेत्र है। गतिविधियां विंडो सजावट में दृश्य प्रदर्शित करने के लिए WindowManager के साथ संचार करने का ख्याल रखती हैं। एक गतिविधि बनाने के बजाय, आप एक दृश्य जोड़ने के लिए सीधे इसके साथ बातचीत कर सकते हैं।दृश्य लेआउटपैम्स के साथ जोड़ा गया है जो निर्दिष्ट करता है कि यह अदृश्य है, अन्य सभी अनुप्रयोगों को ओवरले करता है, स्पर्श या फोकस को अवरुद्ध नहीं करता है, और स्क्रीन चमक निर्दिष्ट करता है। –

+0

यह कारण फोन पर बहुत धीमा है। यह ठीक काम करता है, कहने के लिए कुछ भी नहीं, लेकिन कुछ ऐसा विकसित नहीं कर सकता जो फोन को धीमा कर देता है! –

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