59

लॉक स्क्रीन पर दिखाई देने के लिए मैं Activity या Dialog कैसे प्रदर्शित कर सकता हूं?डिफ़ॉल्ट लॉक स्क्रीन पर एंड्रॉइड गतिविधि

मैं पहले से ही जब स्क्रीन Activity.onCreate() विधि में विभिन्न खिड़की प्रकार की स्थापना द्वारा चालू हो जाती है मेरी ताला गतिविधि प्रदर्शित की कोशिश की है:

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

और SYSTEM_ALERT_WINDOW और INTERNAL_SYSTEM_WINDOW अनुमति के साथ अन्य लोगों के साथ।

डिवाइस को अनलॉक करने के बाद मेरी गतिविधि दिखाई दे रही है।

अद्यतन:

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

+1

वास्तव में क्या आप को पूरा करने के प्रयास कर रहे हैं? क्या आप अपनी लॉक स्क्रीन को लागू करने की कोशिश कर रहे हैं या आप लॉक स्क्रीन (जो भी है) पर अपनी अलर्ट विंडो दिखाना चाहते हैं या ...? –

+1

दरअसल मैं चाहता हूं कि मैं दोनों को लागू करने में सक्षम था: अपनी लॉक स्क्रीन और मौजूदा लॉक स्क्रीन पर एक संवाद। – plugmind

+0

मैं आपको लॉक स्क्रीन पर एक विंडो दिखाने के बारे में बता सकता हूं: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED –

उत्तर

104
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON| 
      WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD| 
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED| 
      WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

गतिविधि शुरू होने पर लॉक स्क्रीन को अक्षम करने के लिए इस झंडे का उपयोग करने का प्रयास करें।

एपीआई स्तर 17 के बाद आप उदाहरण की तरह

<activity 
     android:name=".yourActivityName" 
     android:showOnLockScreen="true" 
     android:screenOrientation="sensorPortrait" > 

showOnLockScreen उपयोग कर सकते हैं ...

+2

इसमें किसी भी अनुमति की आवश्यकता नहीं है। चौंका देने वाला। –

+4

मेरे मामले में काम नहीं कर रहा है, क्या इसके लिए कोई विशेष अनुमति है? –

+5

बात यह है कि कम से कम 4.4 पर यह लॉक स्क्रीन पर पासवर्ड सेट होने पर काम नहीं करता है। क्या किसी को पता है कि लॉक स्क्रीन को कैसे रखा जाए, लेकिन फिर भी इस पर संवाद प्रदर्शित करने में सक्षम हो? –

17

उपयोग इस onCreate विधि में

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
// This line should be before setContentView..  
setContentView(......); 

आशा इस काम करेंगे धन्यवाद

+0

फ़ोन बजने के दौरान डिस्प्ले से कैसे बचें। अलार्म रिंगिंग आदि .. – Subha

26

गतिविधि के लिए मत जाओ, क्योंकि एंड्रॉइड सुरक्षा कारण के लिए आपकी गतिविधि के पीछे लॉक स्क्रीन नहीं दिखाएगा, इसलिए गतिविधि के बजाय सेवा का उपयोग करें।

नीचे मेरी सेवा में मेरी सेवा के स्टार्ट कमांड में मेरा कोड है।

WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

View mView = mInflater.inflate(R.layout.score, null); 

WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, 
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0, 
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
    | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */, 
PixelFormat.RGBA_8888); 

mWindowManager.addView(mView, mLayoutParams); 

और प्रकट

+2

बहुत बहुत धन्यवाद! –

+1

आपको बहुत बहुत धन्यवाद ... –

+1

मैं प्रदर्शन के शीर्ष पर लेआउट दिखाने के लिए इसका उपयोग कर सकता हूं। लेकिन यह ईवेंट प्राप्त नहीं कर रहा है, भले ही मैं ईवेंट हैंडलर जोड़ूं। उस समस्या को कैसे दूर करें? – nagylzs

0

आप यहाँ आपको लगता है कि यह काम कर रहा जवाब में से किसी में कोड का उपयोग कर सकते करने के लिए <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> जोड़ें। तब घर काम करने के लिए बटन, परिवर्तन TYPE_SYSTEM_ALERT या TYPE_SYSTEM_OVERLAY (क्या आप वर्तमान में उपयोग पर निर्भर करता है) TYPE_SYSTEM_ERROR को रोकने के लिए:

params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.MATCH_PARENT, 
    WindowManager.LayoutParams.MATCH_PARENT, 
    WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN | 
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD, 
    PixelFormat.TRANSLUCENT 
); 
params.gravity = Gravity.TOP; 
mOverlay = (RelativeLayout) inflater.inflate(R.layout.main, (ViewGroup) null); 
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
mWindowManager.addView(mOverlay, params); 
संबंधित मुद्दे