2011-01-17 14 views
13

आज से पहले मैंने कहा होगा कि यह संभव नहीं है, एक ऐप है जो अन्य सभी चीज़ों के ऊपर ओवरलेड हो जाता है: होम स्क्रीन, ऐप्स, डायलर इत्यादिएंड्रॉइड ऐप जो अन्य सभी ऐप्स के शीर्ष पर चलता है?

यदि आप मुफ्त एप्लिकेशन "सुपर मैनेजर" यह वास्तव में यह करता है। इसमें स्क्रीन जैसा आइकन और विजेट है जो हमेशा और हर जगह दिखाएगा। जबकि आइकन या विजेट स्क्रीन पर है, फिर भी आप इसके पीछे चल रहे ऐप से बातचीत कर सकते हैं।

यह कैसे संभव है और हम इस कार्यक्षमता को फिर से कैसे बना सकते हैं?

अद्यतन: यहां कार्रवाई की कुछ छवियां हैं। आप ओवरलेड एप्लिकेशन को डॉल्फिन के शीर्ष पर एक छोटे तीर के रूप में चल सकते हैं। फिर जब आप इसे दबाते हैं तो आप एक बड़ी विजेट की तरह चल रहे एप्लिकेशन को देख सकते हैं। विजेट ऊपर होने के बावजूद आप अभी भी पृष्ठभूमि ऐप से बातचीत कर सकते हैं। इस उदाहरण में डॉल्फ़िन पृष्ठभूमि ऐप है।

Image 1

alt text

+0

बेहतर विवरण या स्क्रीनशॉट के बारे में कैसे। – Falmarri

+1

मैंने कुछ स्क्रीन शॉट जोड़े हैं। मुझे नहीं पता कि इसे किसी भी बेहतर तरीके से कैसे समझाया जाए। यह एक ऐसा एप्लिकेशन है जो अन्य सभी अनुप्रयोगों के शीर्ष पर चलाने के लिए बनाया जाता है। – pcm2a

उत्तर

6

इस देखें:

Creating a system overlay window (always on top)

स्वीकार किए जाते हैं जवाब की टिप्पणी अनुभाग की जाँच करें। आपको एक कामकाजी उदाहरण परियोजना से लिंक मिलेगा।

== संपादित करें ==

Link to the project

+0

उदाहरण का उल्लेख आप लगभग काम करते हैं। ऑन टच ओवरले और उसके पीछे चल रहे एप्लिकेशन के लिए भी ट्रिगर हो जाता है। उदाहरण के लिए आइकन के शीर्ष पर स्थित ओवरले दबाकर उसके पीछे आइकन ट्रिगर होता है। सुपर मैनेजर उदाहरण में पीछे चल रही गतिविधि ट्रिगर नहीं होती है। – pcm2a

+0

कृपया उदाहरण के प्रोजेक्ट से सीधे लिंक करें, हमें जंगली हंस चेस पर भेजकर! –

+0

@RubberDuck: लिंक जोड़ा गया। बस एक नोट, मैं अगले हफ्ते उस परियोजना को अपडेट करने जा रहा हूं। मैं यहां अद्यतन परियोजना लिंक पोस्ट करूंगा। मुझे वास्तव में एक और परियोजना के लिए अपडेट करने की ज़रूरत है जिस पर मैं काम कर रहा हूं। –

4

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

इसी प्रकार http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT (और TYPE_SYSTEM_DIALOG) है।

अंत में, http://developer.android.com/reference/android/R.style.html#Theme_Translucent (या वेरिएंट) के साथ एक गतिविधि बनाई जा सकती है।

+0

इसके पीछे चल रहे एक अलग एप्लिकेशन के साथ बातचीत की अनुमति देने के लिए आप पारदर्शी गतिविधि कैसे प्राप्त करेंगे? जब मैंने पॉपअप बॉक्स गतिविधि बनाई है तो इसके पीछे की गतिविधि को छुआ नहीं जा सका।चल रहे एप्लिकेशन के ऊपर ऐप में अभी भी बातचीत की जा सकती है। उदाहरण के लिए, सुपर मैनेजर की शीर्ष पर गतिविधि होने पर डॉल्फिन ब्राउज़र को अभी भी स्क्रॉल किया जा सकता है। – pcm2a

+0

मुझे लगता है कि आप एक पारदर्शी गतिविधि के बजाय FLAG_NOT_TOUCH_MODAL के साथ SYSTEM_ALERT चाहते हैं तो –

5

Android 4.x से शुरू, एंड्रॉयड टीम एंड्रॉयड टीम एक नया कार्य adjustWindowParamsLw() जिसमें यह FLAG_NOT_FOCUSABLE जोड़ देगा जोड़कर एक संभावित सुरक्षा समस्या तय , FLAG_NOT_TOUCHABLE और TYPE_SYSTEM_OVERLAY विंडो के लिए FLAG_WATCH_OUTSIDE_TOUCH ध्वज हटाएं।

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

अपडेट किया गया: 2016/05/04 TYPE_TOAST Android 4.0 ~ 4.3 पर स्पर्श घटनाओं प्राप्त नहीं कर सकते। यह TYPE_SYSTEM_OVERLAY जैसा ही है। एंड्रॉइड 4.4+ पर, TYPE_TOAST को बहिष्कृत सूची से हटा दिया गया है, ताकि आप Android 4.4+ डिवाइस पर स्पर्श ईवेंट प्राप्त करने के लिए TYPE_TOAST का उपयोग भी कर सकें।

+1

आप सही हैं, TYPE_SYSTEM_OVERLAY को TYPE_PHONE के साथ प्रतिस्थापित करें, यह आईसीएस पर काम करेगा। –

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