2009-04-09 15 views
9

मैं (जब आप बंद/शक्ति प्रेस बटन लटका एक आप प्राप्त) एंड्रॉयड की प्रणाली कुंजी लॉक को सक्रिय करने के लिए है। यहाँ देखें:एंड्रॉयड - प्रणाली कुंजी लॉक का सक्रिय हो जाना (उर्फ लॉक स्क्रीन)

img

मैं पहले से ही डॉक्स ब्राउज़ किए गए लेकिन सब कुछ मैंने पाया PowerManager और KeyguardManager था। दोनों समाधान नहीं हैं :-(

तो, क्या सभी जानते हैं कि एंड्रॉइड एप्लिकेशन से इसे कैसे प्राप्त किया जाए? (यदि विशेष अनुमतियां आवश्यक हैं, तो कोई समस्या नहीं है लेकिन डिवाइस की सेटिंग्स को बदलने का कोई समाधान नहीं है। ..)

संपादित: या किसी को पता है कि यह निश्चित रूप से सब पर संभव नहीं है Btw करता Craigs कुंजी भेजने के साथ समाधान अब और काम नहीं करता है (टिप्पणी देखें)

+1

तुम भी आईआरसी पर (freenode #android) हॉपिंग कोशिश करते हैं और नेतृत्व डेवलपर खुद –

उत्तर

2

मैं थोड़ी देर के लिए एक ही प्रश्न के उत्तर की तलाश कर रहा हूं। जाहिर है, 2.0 के बाद ऐप स्तर के लिए डिवाइस मैनेजर विशेषाधिकार हटा दिए गए थे। लेकिन फ्रायओ - 2.2 के साथ डिवाइस पॉलिसी मैनेजर प्रकट हुआ है कि हमें डेवलपर्स को प्रशासनिक स्तर नियंत्रणों की भीड़ प्रदान कर रही है।

http://developer.android.com/guide/topics/admin/device-admin.html

0

यहाँ एक बहुत अच्छा उदाहरण नहीं है?।। :

http://www.anddev.org/throwing-simulating_keystrokes_programatically-t717.html

ऐसा लगता है कि आप सिस्टम में किसी भी कीस्ट्रोक को प्रोग्रामेटिक रूप से भेज सकते हैं। यह कीकोड आप KEYCODE_ENDCALL है के लिए देख रहे की तरह लगता है, लेकिन अगर यह है कि अन्य कोड के बहुत सारे यहाँ कोशिश करने के लिए कर रहे हैं काम नहीं करता:

http://developer.android.com/reference/android/view/KeyEvent.html

मैं वहाँ यदि कोई API कॉल नहीं जानते लॉक होने का कारण बनता है, लेकिन जब तक आपको बेहतर समाधान नहीं मिल जाता है तब तक यह एक सुंदर मजबूत कामकाज की तरह लगता है।

+2

इस विधि अब उपलब्ध नहीं है, यह सुरक्षा चिंताओं के लिए हटा दिया गया था है करने के लिए बात कर सकते हैं। – sooniln

+0

आह बमर, क्या आप किसी अन्य समाधान से अवगत हैं? –

+0

हम्म, एंड्रॉइड 1.0/आने वाले 1.5 लक्ष्य प्लेटफॉर्म हैं, इसलिए यह काम नहीं करेगा :-( –

0

एंड्रॉइड स्रोत के माध्यम से खोदने से विंडोमैनेजर सेवा मिलती है जो इसे सक्रिय करने के लिए सार्वजनिक विधि (startAppFreezingScreenLocked) लगता है। यह आपके उत्तर की तलाश शुरू करने के लिए एक अच्छी जगह हो सकती है, दुर्भाग्यवश ऐसा प्रतीत नहीं होता है कि आप सीधे WindowsManagerService ऑब्जेक्ट प्राप्त कर सकते हैं।

1

क्या आप देख रहे हैं KeyguardManager.KeyguardLock मेरे दोस्त में reenableKeyguard() विधि है!

+0

क्या आपने कोशिश की? क्या लॉक स्क्रीन जैसा कि आप ऊपर देख सकते हैं वास्तव में दिखाई देते हैं? मैंने कोशिश की और उसने कीबोर्ड को लॉक कर दिया लेकिन यह सिस्टम कीलॉक नहीं था ... –

+0

आह, शायद आपके प्रश्न को गलत समझा होगा। क्या यह स्क्रीन को स्वयं प्रदर्शित करने या सिस्टम कुंजी लॉक को सक्रिय करने के बारे में है? – sthg

+0

sthg, दोनों :-)। मैं सिर्फ सामान्य सिस्टम कीलॉक सक्रिय करना चाहता हूं। स्क्रीन ही उस कीलॉक का हिस्सा है। यदि उपयोगकर्ता ने कोड (या अनलॉक-पैटर्न) सक्रिय किया है, तो उसे उस कोड/पैटर्न के बारे में पूछा जाना चाहिए। कीबोर्ड को लॉक करना पर्याप्त नहीं है :-( –

1

ऐसा लगता है कि स्क्रीन लॉक समारोह विधि का उपयोग किया जाता है: PowerManager.java में

public void goToSleep(long time) 

विधि। यह इस फैशन में इसे करने के लिए एक संदर्भ प्राप्त करना संभव है:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 

हालांकि इस अनुमति

android.permission.DEVICE_POWER 

जो एक स्तर 2 अनुमति प्रणाली केवल के लिए उपलब्ध है की आवश्यकता है।

ऐसा लगता है कि यह करने योग्य नहीं है। यह केवल संस्करण 1.1 के लिए है, मुझे 1.5 के लिए पता नहीं है।

+0

हम्म, यह बुरा है। वास्तव में, मुझे लगता है कि यह भी पर्याप्त नहीं होगा, क्योंकि मुझे वास्तव में सिस्टम कुंजी लॉक की आवश्यकता है जैसा कि आप उपरोक्त स्क्रीनशॉट में देख सकते हैं। उस स्क्रीन के बारे में कुछ भी नहीं PowerManager के दस्तावेज़ों में उल्लेख किया गया है ... यह केवल इतना कहता है कि डिवाइस सो जाएगा, लेकिन यह नहीं कि सिस्टम कीलॉक सक्रिय हो जाती है। –

+1

यह सुनिश्चित नहीं है कि यह संस्करण <1.1 स्रोत के बाद से मदद करेगा, लेकिन: goToSleep कॉल PowerManagerService में जाने के लिए जाएं, फिर goSoleepLocked फिर setPowerState। और setPowerState में यह टिप्पणी है: // जब उपयोगकर्ता पावर बटन दबाता है, तो हमें हमेशा // अधिसूचना भेजनी होगी कि यह सोने जा रहा है ताकि कीगार्ड चालू हो। लेकिन // हम तब तक ऐसा नहीं कर सकता जब तक कि स्क्रीन फीका न हो जाए, इसलिए हम ' टी कीगार्ड // बहुत जल्दी दिखाएं। – JRL

+0

और LockPatternKeyguardView में निम्नलिखित फैशन में ScreenLock के लिए एक कॉल नहीं है: देखें createLockScreen() { नई LockScreen वापसी ( mContext, mLockPatternUtils, mUpdateMonitor, mKeyguardScreenCallback); } – JRL

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