2011-12-09 15 views
12

मैं डिवाइस को सोने या स्क्रीन बंद करने के लिए भेजना चाहता हूं। मैं जांच की और इस विषय मिल गया है: Turn off screen on Androidस्क्रीन को बंद करने या डिवाइस को सोने के लिए

असल में, तीन तरीकों से यह करने के लिए कर रहे हैं, लेकिन मैं तीन के लिए समस्याओं पाया है:

क) विकल्प 1:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
manager.goToSleep(int amountOfTime); 

समस्या : यह एफसी का कारण बनता है। मैंने पढ़ा है कि मुझे DEVICE_POWER अनुमतियों की आवश्यकता है, लेकिन इसे सामान्य ऐप्स के लिए नहीं दिया जा सकता है।

ख) विकल्प 2:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); 
wl.acquire(); 
wl.release(); 

समस्या: यह मेरे लिए काम नहीं करता। मुझे नहीं पता क्यों। यह मुझे एक एफसी नहीं देता है, लेकिन यह निर्दोष है।

ग) विकल्प 3:

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON; 
params.screenBrightness = 0; 
getWindow().setAttributes(params); 

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

क्या कोई मुझे सोने के लिए डिवाइस भेजने या स्क्रीन बंद करने के लिए कोई अच्छी विधि बता सकता है जो बिना किसी समस्या के चला सकता है? यह मेरे लिए दुर्लभ लगता है कि इस तरह की एक साधारण कार्यक्षमता का उपयोग करने का कोई अच्छा तरीका नहीं है (या शायद अच्छी तरह से प्रलेखित)

उत्तर

7

मैं खुद का उत्तर देता हूं। डिवाइस को बंद करना संभव है, लेकिन एप्लिकेशन को एपीआई के माध्यम से डिवाइस प्रशासक सुविधा को कार्यान्वित करना है: Device Administration

इस एपीआई में locknow() फ़ंक्शन है जो मैं चाहता हूं।

वैसे भी, यह एंड्रॉइड हार्डवेयर और सुरक्षा सुविधाओं को विस्तारित करने के लिए है और यह बहुत ही असंभव है कि कोई भी इस तरह से डिवाइस को नियंत्रित करना चाहता है।

मैं जो चाहता था वह डिवाइस को एक साधारण इशारा से लॉक करने की क्षमता है। चूंकि मैं अपना डिवाइस मैनेजर क्लास नहीं बनाना चाहता हूं, मैं जांचता हूं कि मुफ्त एप्लिकेशन "लॉकस्क्रीन" स्थापित है या इसे लॉन्च करें। यह एक शॉर्टकट है और जो मैं चाहता हूं उसे करने का एक आसान तरीका है। यह ऐप डिवाइस मैनेजर के रूप में पंजीकृत होना चाहिए ताकि इस कक्षा को कार्यान्वित किया जा सके। इसे बाजार से मुक्त करना संभव है।

+0

में यह पाया क्या होगा यदि मैं यह स्क्रीन बंद करना चाहते हैं और नहीं मेरी स्क्रीन लॉक बार तक पहुंच से वंचित हो? –

0

मेरा आवेदन पहले से ही इस ठीक करता है, मैं अपने PowerManager.class

/** 
* Force the device to go to sleep. Overrides all the wake locks that are 
* held. 
* 
* @param time is used to order this correctly with the wake lock calls. 
*   The time should be in the {@link SystemClock#uptimeMillis 
*   SystemClock.uptimeMillis()} time base. 
*/ 
public void goToSleep(long time) 
{ 
    try { 
     mService.goToSleep(time); 
    } catch (RemoteException e) { 
    } 
} 
+0

क्या आप वाकई एपीआई के पावरमैनेजर क्लास कार्यान्वयन को नहीं पकड़े हैं? मैं इस विधि का उपयोग करने में विफल रहता हूं क्योंकि मुझे नैसेसरी अनुमति नहीं मिल सकती है। –

+1

'DEVICE_POWER' अनुमति के बारे में क्या? –

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