Android में होम और अन्य सिस्टम बटन को कैसे निष्क्रिय करें?


80

मुझे अपने Android एप्लिकेशन में होम और अन्य सिस्टम बटन को अक्षम करना होगा।

उदाहरण: MX Player ( Google Play पर देखें ) - आप प्लेयर स्क्रीन पर "लॉक" आइकन दबा सकते हैं और यह सभी हार्डवेयर और सॉफ्टवेयर सिस्टम बटन को लॉक कर देता है।

यह रूटिंग के बिना ठीक काम करता है।

मैंने विभिन्न Android संस्करणों के साथ कुछ उपकरणों पर इसका परीक्षण किया। मैंने किड्स लॉक (प्लगइन) को अलग करने की कोशिश की, लेकिन इसका कोई सुराग नहीं है कि यह अभी तक कैसे काम करता है।

मुझे इसके लिए किड्स लॉक (प्लगइन) जैसे समाधान की आवश्यकता है MX Player: - होम, बैक और अन्य सभी सिस्टम बटन को अक्षम करें।

कोई सुझाव?


1
stackoverflow.com/questions/17183905/… । आप होम बटन को अक्षम नहीं कर सकते।
रघुनंदन

2
@ user1024 क्या आपको अपने प्रश्न का कोई हल मिला है? जैसा कि मैं भी एमएक्स प्लेयर में उसी तरह की कार्यक्षमता करना चाहता हूं।
चिराग शाह

2
एमएक्स प्लेयर का तरीका बल्कि दिलचस्प है। वे वास्तव में नेविगेशन बार को वापस लौटने से रोक रहे हैं।
नागरमैन

क्या आपको कभी इस मुद्दे का हल मिला? मुझे यह भी पता लगाने की जरूरत है कि इन बटनों को कैसे निष्क्रिय किया जाए। बहुत कम से कम, मैं मल्टीटास्किंग बटन कैसे प्रबंधित कर सकता हूं।
portfoliobuilder

आप मेरे उत्तर की जांच कर सकते हैं, मुझे लगता है कि आपको वह हासिल करने में मदद मिलेगी जो आप चाहते हैं कि stackoverflow.com/a/28603790/3300883
मिगुएल

जवाबों:


91

सबसे पहले, कृपया लंबे और कठिन विचार करें यदि आप वास्तव में Homeउस मामले के लिए बटन या किसी अन्य बटन को अक्षम करना चाहते हैं (उदाहरण के लिए Backबटन), यह ऐसा कुछ नहीं है जिसे किया जाना चाहिए (कम से कम अधिकांश समय, यह एक बुरा डिज़ाइन है) ) है। मैं केवल अपने लिए बोल सकता हूं, लेकिन अगर मैंने कोई ऐसा ऐप डाउनलोड किया है जो मुझे OS बटन पर क्लिक करने जैसा कुछ नहीं करने देता है, तो अगली बात यह है कि मैं उस ऐप को अनइंस्टॉल कर दूंगा और बहुत खराब समीक्षा छोड़ दूंगा। मेरा यह भी मानना ​​है कि आपके ऐप को ऐप स्टोर पर प्रदर्शित नहीं किया जाएगा।

अभी...

सूचना जो MX Playerअन्य अनुप्रयोगों के शीर्ष पर आकर्षित करने की अनुमति मांग रही है: एमएक्स प्लेयर की अनुमति
चूंकि आप डिवाइस Homeपर बटन को ओवरराइड नहीं कर सकते हैं Android(कम से कम नवीनतम ओएस संस्करणों में नहीं)। MX Playerजब आप ऐप को "लॉक" करते हैं और Homeबटन पर क्लिक करते हैं, तो अपने लॉन्चर के ऊपर ही खींचता है ।
इसका एक उदाहरण देखने के लिए थोड़ा और अधिक सरल और सीधे समझने के लिए, आप फेसबुक मैसेंजर ऐप देख सकते हैं ।

जैसा कि मुझे एमएक्स प्लेयर Status Barऔर Navigation Bar"ओवरराइडिंग" के बारे में कुछ और जानकारी प्रदान करने के लिए कहा गया था , मैं इन विषयों को भी शामिल करने के लिए अपना जवाब संपादित कर रहा हूं।

सबसे पहले, एमएक्स प्लेयर इमर्सिव फुल-स्क्रीन मोड ( देवबाइट्स वीडियो ) का उपयोग कर रहा है KitKat
Android 4.4 (API Level 19) setSystemUiVisibility () के लिए एक नया SYSTEM_UI_FLAG_IMMERSIVE ध्वज पेश करता है, जो आपके ऐप को "पूर्ण स्क्रीन" पर जाने देता है। यह ध्वज, जब SYSTEM_UI_FLAG_HIDE_NAVIGATION और SYSTEM_UI_FLAG_FULLSCREEN झंडे के साथ जोड़ा जाता है, नेविगेशन और स्थिति बार को छुपाता है और आपके ऐप को स्क्रीन पर सभी स्पर्श घटनाओं को कैप्चर करने देता है।

जब इमर्सिव फुल-स्क्रीन मोड सक्षम हो जाता है, तो आपकी गतिविधि सभी स्पर्श घटनाओं को प्राप्त करना जारी रखती है। उपयोगकर्ता सिस्टम सलाखों को उस क्षेत्र में आवक स्वाइप के साथ प्रकट कर सकता है जहां सिस्टम बार सामान्य रूप से दिखाई देते हैं। यह System_UI_FLAG_HIDE_NAVIGATION ध्वज (और SYSTEM_UI_FLAG_FULLSCREEN ध्वज, यदि लागू हो) को साफ करता है ताकि सिस्टम बार दिखाई दे। यह आपके View.OnSystemUiVisibilityChangeListener को भी ट्रिगर करता है , यदि सेट है। हालाँकि, यदि आप कुछ समय के बाद सिस्टम बार को अपने आप छुपाना चाहते हैं, तो आप इसके बजाय SYSTEM_UI_FLAG_IMMERSIVE_STICKY ध्वज का उपयोग कर सकते हैं । ध्यान दें कि ध्वज का "चिपचिपा" संस्करण किसी भी श्रोता को ट्रिगर नहीं करता है, क्योंकि इस मोड में अस्थायी रूप से दिखाए गए सिस्टम बार एक क्षणिक स्थिति में हैं।

दूसरा: स्टेटस बार
थर्ड को छुपाना : नेविगेशन बार को छुपाना
कृपया ध्यान दें कि हालांकि इमर्सिव फुल स्क्रीन का उपयोग केवल करने के लिए है KitKat, Status Barऔर छुपाना Navigation Barकेवल के लिए नहीं है KitKat

मुझे 2nd और 3rd के बारे में कहने के लिए बहुत कुछ नहीं है, आपको लगता है कि मुझे विश्वास है, यह किसी भी मामले में तेजी से पढ़ा जाता है। बस सुनिश्चित करें कि आप View.OnSystemUiVisibilityChangeListener पर पूरा ध्यान दें

मैंने एक जिस्ट जोड़ा है जो बताता है कि मेरा क्या मतलब है, यह पूरा नहीं हुआ है और कुछ फिक्सिंग की जरूरत है लेकिन आपको यह विचार मिलेगा। https://gist.github.com/Epsiloni/8303531

सौभाग्य यह लागू करने, और मज़ा है!


1
तो यह नेविगेशन बार को कैसे छुपाता है और स्क्रीन को छूने पर इसे फिर से पॉप अप करने से रोकता है? और जब आप इमर्सिव मोड से बाहर निकलने के लिए स्वाइप मूवमेंट करते हैं, तो नेविगेशन बार तुरंत दिखाई देता है और छिप जाता है। इसके अलावा, जब लॉक किया जाता है, तब भी अधिसूचना पैनल को खींचना संभव नहीं होता है, यहां तक ​​कि जब 'इमर्सिव स्वाइप' स्टेटबार को दिखाने के लिए मजबूर करता है। इससे ऐसा कैसे होता है?
नहरमन

2
ठीक है, यह बहुत मदद करता है, लेकिन हम अभी तक वहां नहीं हैं। मैं दो टिप्पणियाँ रखने जा रहा हूँ, एक किटकैट के लिए, एक जेली बीन के लिए। किटकैट के लिए, झंडे का उपयोग करके TYPE_SYSTEM_ALERT, SYSTEM_UI_FLAG_HIDE_NAVIGATIONऔर SYSTEM_UI_FLAG_IMMERSIVE_STICKY, ऐप से बाहर निकलने का कोई तरीका नहीं है। दोनों सिस्टम बार छिपे रहते हैं। जब तक बिजली मेनू नहीं खोला जाता है। फिर नेविगेशन बार फिर से दिखाई देता है, एन होम बटन कार्यात्मक हो जाता है। एमएक्स प्लेयर उस स्थिति में नेविगेशन बार को छिपाए रखने का प्रबंधन करता है। तो किटकैट चलाने वाले उपकरणों के लिए, हमें अभी भी इसे ठीक करने की आवश्यकता है।
नहरमन

1
जेली बीन (16+) के लिए, IMMERSIVE_STICKYकाम नहीं करता है। इसलिए, नेविगेशन बार (स्थिति के कारण छिपी स्थिति छिपी हुई है SYSTEM_ALERT) दिखाना संभव है । हम इसका उपयोग कर पता लगा सकते हैं OnSystemUiVisibilityChangeListener, और फिर से झंडे को सक्षम कर सकते हैं । हालांकि, किसी कारण से, यह केवल एक या दूसरे के बाद काम करता है, जो कि होम बटन को दबाने के लिए पर्याप्त समय से अधिक है। एमएक्स प्लेयर का उपयोग नहीं होता है IMMERSIVE STICKY(बार किटकैट पर दिखाई देते हैं), लेकिन बार आपको पता चलने से पहले गायब हो जाते हैं।
नहरमन

1
किटकैट के लिए Github सार: gist.github.com/nhaarman/8291022 । जेली बीन के लिए गितुब गिस्ट: gist.github.com/nhaarman/8291070
नहरमन

7
FYI करें Assaf, कुछ ऐप लॉक होने की जरूरत है। उदाहरण के लिए, कियोस्क-टाइप ऐप्स जहां मालिक हार्डवेयर के टुकड़े तक अस्थायी पहुंच की अनुमति दे रहा है। मैं अभी एक फोटो बूथ ऐप बना रहा हूं, और मैं नहीं चाहता कि उपयोगकर्ता (उनकी तस्वीर खींची गई तस्वीर) कुछ भी करने में सक्षम हो (इसके अलावा कुछ और चीजें)। मालिक एक सॉफ्टवेयर बटन के माध्यम से अनलॉक कर सकता है, लेकिन अन्यथा इसे बंद करने की आवश्यकता है। मुझे क्षमा करें, लेकिन आपके उत्तर की शुरुआत में आपकी "ममतापूर्ण सलाह" ने मुझे परेशान कर दिया (और मुझे यकीन है कि ओपी सहित अन्य लोग) गलत तरीके से। हालांकि आपके जवाब के लिए धन्यवाद, मैं इस पर गौर करूंगा।
ntgCleaner

13

मैंने shaobin0604 के उत्तर का पालन ​​किया और मैं आखिरकार, जोड़कर, गृह बटन को लॉक करने में कामयाब रहा:

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

करने के लिए AndroidManifest.xmlआपको बस इतना करना है कॉपी करने के लिए है HomeKeyLocker.javaसे shaobin के lib अपनी परियोजना के लिए और में की तरह इसे लागू shaobin के उदाहरण । BTW: मेरा AVD का Android संस्करण Android 4.0.3 है


क्या यह एंड्रॉइड 4.4.4 में काम कर रहा है? क्योंकि, इसने मेरे मोटो जी में इसे आजमाया जो 4.4.4 में चल रहा है। यह मेरे लिए काम नहीं किया।
वेंकट

1
यह लाइब्रेरी सिर्फ हार्ड होम बटन को अक्षम करती है। मोटो G में सॉफ्ट होम बटन है इसलिए यह काम नहीं करता है .. @ venkat
हैरी शर्मा

एक चेतावनी एक अच्छा समाधान है, यदि सबसे अच्छा नहीं है, लेकिन ध्यान रखें, कि कुछ उपकरणों (Nexus 4 यानी।) पर यह काम नहीं करेगा और होम बटन अभी भी प्रयोग करने योग्य है!
JacksOnF1re

12

आप होम कुंजी और अन्य सिस्टम कुंजियों को निष्क्रिय करने के लिए एंड्रॉइड-होमके-लॉकर का उपयोग कर सकते हैं (जैसे बैक कुंजी और मेनू कुंजी)

आशा है कि यह आपके आवेदन में आपकी सहायता करेगा। धन्यवाद।


1
यह सिर्फ हार्ड होम बटन को अक्षम करता है ... !!
हैरी शर्मा

मेरे लिए पूरी तरह से काम किया। मैं शायद सभी भौतिक बटनों को अक्षम करना चाहता हूं, वास्तव में ... होम कार्ड को अक्षम करने के लिए Google कार्डबोर्ड का उपयोग करना, क्योंकि मेरा मामला इसे हिट करता है।
मैट क्रूशांक

हाल के ऐप्स बटन को कैसे निष्क्रिय करें
user3106818

# shaobin0604 आपका गीथूब कोड मोटोरोला डिवाइस पर काम नहीं कर रहा है।
ब्रजेंद्र पांडेय

11

आप यहां बताई गई स्क्रीन पिनिंग सुविधा का उपयोग करके घर को निष्क्रिय कर सकते हैं और एंड्रॉइड 5.0 बटन को पुन: उपयोग कर सकते हैं :

एंड्रॉइड 5.0 एक नया स्क्रीन पिनिंग एपीआई पेश करता है जो आपको उपयोगकर्ताओं को आपके कार्य को छोड़ने या सूचनाओं से बाधित होने से अस्थायी रूप से प्रतिबंधित करता है। इसका उपयोग किया जा सकता है, उदाहरण के लिए, यदि आप एंड्रॉइड पर उच्च दांव मूल्यांकन आवश्यकताओं, या एकल-उद्देश्य या कियोस्क एप्लिकेशन का समर्थन करने के लिए एक शिक्षा ऐप विकसित कर रहे हैं। एक बार जब आपका ऐप स्क्रीन पिनिंग को सक्रिय कर देता है, तो उपयोगकर्ता तब तक सूचनाएं नहीं देख सकते, जब तक कि आपका ऐप मोड से बाहर न हो जाए, या अन्य एप्लिकेशन एक्सेस न करें या होम स्क्रीन पर वापस न आएं।

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


6

बस एक अनुमान है, लेकिन मुझे लगता है कि SYSTEM_ALERT_WINDOW अनुमति के साथ ("अन्य एप्लिकेशन पर ड्रा करें", यहां देखें ) यह संभव हो सकता है: अपने ऐप को फुलस्क्रीन, सिस्टम अलर्ट प्रकार विंडो के रूप में प्रदर्शित करें । इस तरह यह किसी भी अन्य ऐप को छिपा देगा, यहां तक ​​कि होमस्क्रीन को भी यदि आप होम दबाते हैं, तो यह वास्तव में नहीं होगा में अक्षम , बस किसी भी दृश्य प्रभाव के बिना।

एमएक्स प्लेयर के पास यह अनुमति घोषित है, और फेसबुक मैसेंजर के पास " चैट हेड्स " को किसी भी चीज़ पर प्रदर्शित करने के लिए बहुत अधिक है - इसलिए यह समाधान हो सकता है।

अद्यतन (मेरी टिप्पणियों से जोड़ा गया): अगला, स्पर्श घटनाओं को कैप्चर करने / ऑनसिस्टम यूआईविजिबिलिटी चेंजलिस्टनर का उपयोग करके डिफ़ॉल्ट व्यवहार (स्पर्श से दिखने वाला नेबर) को हटाने के लिए संयोजन में System_UI_FLAG_HIDE_NAVIGATION का उपयोग करें। इसके अलावा, चूंकि आपने कहा था कि इमर्सिव जेस्चर काम नहीं करता है, इसलिए आप SYSTEM_UI_FLAG_IMMERSIVE_STICKY सेटिंग भी आज़मा सकते हैं (SYSTEM_UI_FLAG_FULLSCREEN और SYSTEM_UI_FLAG_HIDE_NAVIGATION के साथ)।


एक त्वरित परीक्षण - अनुमति और कॉलिंग को जोड़ने से getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);पता चलता है कि यह स्टेटसबार को छिपाएगा (और इमर्सिव फुलस्क्रीन से बाहर निकलने के लिए उपयोग किए गए आंदोलन को स्वाइप करता है) काम नहीं करता है, लेकिन नेविगेशन बार नहीं। इस बार के बटन अभी भी कार्यात्मक हैं।
नहरमन ५'१४

अब मेरे पास एसडीके नहीं है, लेकिन मेरा अगला विचार होगा कि टच इवेंट्स को कैप्चर करने / ऑनसिस्टम यूआईविजिबिलिटी चेंजस्लीस्टेनर का उपयोग करके डिफ़ॉल्ट व्यवहार (ओवरबार टच पर दिखाई देने वाला) को देखने के लिए संयोजन में System_UI_FLAG_HIDE_NAVIGATION का उपयोग किया जाएगा।
मोलन्नम

इसके अलावा, चूंकि आपने कहा था कि इमर्सिव जेस्चर काम नहीं करता है, इसलिए आप SYSTEM_UI_FLAG_IMMERSIVE_STICKY सेटिंग भी आज़मा सकते हैं (SYSTEM_UI_FLAG_FULLSCREEN और SYSTEM_UI_FLAG_HIDE_NAVIGATION के साथ)।
मोलन्नम

4

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

आप यहां और अधिक विवरण देख सकते हैं: Android 4.0+ में होम बटन अक्षम करें

अंत में, बैक बटन को अक्षम किया जा सकता है, जैसा कि आप इस अन्य प्रश्न में देख सकते हैं: एंड्रॉइड में बैक बटन अक्षम करें


2
मैं सिर्फ एक नेक्सस 4 पर कहा के रूप में एमएक्स खिलाड़ी का परीक्षण किया है, और यह वास्तव में होम बटन = एस
पॉज़ो एप्स

बैक बटन का मतलब उस तरीके से काम करना है, जिसके लिए इसे बनाया गया है। मैं बैक बटन को अक्षम करने के खिलाफ सुझाव दूंगा।
रघुनन्दन

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

एमएक्स प्लेयर को स्थापित करने और इसका परीक्षण करने का प्रयास करें। यह होम बटन को निष्क्रिय करता है। यह सभी सिस्टम बटन को निष्क्रिय कर देता है। एमएक्स प्लेयर किड्स लॉक (प्लगइन) का उपयोग करता है। मैंने किड्स लॉक (प्लगइन) को अलग करने की कोशिश की, लेकिन इसका कोई सुराग नहीं है कि यह अभी तक कैसे काम करता है। यही कारण है कि मैं यह सवाल पूछता हूं।
user1024

1
ध्यान दें कि यह उत्तर जिस तरह से mx खिलाड़ी इस सुविधा को लागू नहीं करता है , प्रदान करता है ।
नहरमन

3

यदि आप एंड्रॉइड 5.0 और इसके बाद के संस्करण को लक्षित करते हैं। आप उपयोग कर सकते हैं:

Activity.startLockTask()

यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनकी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपने स्वयं के पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे । - समीक्षा से
user1140237

1
@ user1140237 क्यों नहीं?
10

1
यह केवल तभी किया जा सकता है जब आप एक उपकरण प्रशासक हों, जो एक सामान्य ऐप नहीं होना चाहिए
रॉन

3

पहले एक विधि बनाएँ:

public void hideNavigationBar() {
        final View decorView = this.getWindow().getDecorView();
        final int uiOptions =
                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                YourActivityName.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        decorView.setSystemUiVisibility(uiOptions);

                    }
                });
            }
        };

        timer.scheduleAtFixedRate(task, 1, 2);

    }

फिर आप इसे onCreate()अपनी गतिविधि के तरीके पर कहते हैं । इसे फिर से onResume()विधि पर बुलाओ । फिर आप इस तरह से अपनी गतिविधि में एक और विधि जोड़ सकते हैं:

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        hideNavigationBar();
    }

वही होगा। याद रखें कि जब तक उपयोगकर्ता अगली बार स्क्रीन को छूता है, तब तक यह स्क्रीन को लॉक कर देगा, टाइमर क्लास में आप देरी को बदल सकते हैं और यह आपको उस उदाहरण के लिए चीजों को बदलने की अनुमति देगा। फिर यह स्क्रीन को फिर से लॉक कर देगा।


2

मैं भी कुछ समय के लिए इसे खोज रहा था, और आखिरकार मैं इसे करने में सक्षम था, जैसे कि नेविगेशन बार अप्राप्य है, स्टेटस बार अप्राप्य है, भले ही आप लंबे समय तक प्रेस पावर बटन, न तो पावर मेनू और न ही नेविगेशन बटन दिखाए जाते हैं। @Assaf Gamliel की बदौलत उनका जवाब मुझे सही रास्ते पर ले गया। मैंने कुछ मामूली संशोधनों के साथ इस ट्यूटोरियल का अनुसरण किया । प्रकार निर्दिष्ट करते समय, मैंने WindowManager.LayoutParams.TYPE_SYSTEM_ERRORइसके बजाय निर्दिष्ट किया WindowManager.LayoutParams.TYPE_PHONE, अन्यथा हमारा "ओवरले" सिस्टम बार को छिपाएगा नहीं। आप झंडे, ऊँचाई, चौड़ाई आदि के साथ चारों ओर खेल सकते हैं ताकि आप जैसा चाहें वैसा व्यवहार करें।


1

मुझे नहीं पता कि होम बटन कैसे व्यवहार्य है। जब तक मेरे ज्ञान मुझे फोलोइंग लिंक मिला।

लिंक देखें: - http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME

मुख्य कोड स्थिर: होम कुंजी। इस कुंजी को रूपरेखा द्वारा नियंत्रित किया जाता है और इसे कभी भी अनुप्रयोगों तक नहीं पहुंचाया जाता है।

लेकिन, हम बैक बटन को डिसेबल कर सकते हैं। आशा है कि निम्नलिखित कोड आपको मदद करता है।

@Override
public void onBackPressed() {
    //return nothing 
    return;
}

2
सवाल एमएक्स प्लेयर की कार्यक्षमता की विशेष रूप से नकल करने का है।
नहरमन n

1

एक पुराने विषय को ताज़ा करना। मैं यह प्राप्त करने में सक्षम था कि होम बटन (भौतिक या आभासी) दबाए जाने पर मेरी गतिविधि गुना नहीं होती है। यहाँ गतिविधि onCreate()विधि के लिए मेरा कोड है :

super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm_screen);
        context = getApplicationContext();
        int windowType;
        if (Build.VERSION.SDK_INT>=26) windowType = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        else windowType = WindowManager.LayoutParams.TYPE_TOAST;
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                windowType,
                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                        | WindowManager.LayoutParams.FLAG_FULLSCREEN,
                PixelFormat.TRANSLUCENT
        );
        wm = (WindowManager) getApplicationContext()
                .getSystemService(Context.WINDOW_SERVICE);

        mTopView = (ViewGroup) getLayoutInflater().inflate(R.layout.activity_alarm_screen, null);
        getWindow().setAttributes(params);
        //Set up your views here
        testView = mTopView.findViewById(R.id.test);
        wm.addView(mTopView, params);

एपीआई 26 और इसके बाद के संस्करण पर आपको उपयोगकर्ता से स्क्रीन ओवरले की अनुमति लेनी होगी। Android 7 और 8 पर परीक्षण किया गया।


0

आप ICS onwords से होम बटन को अक्षम नहीं कर सकते, लेकिन अन्य बटन को निम्नानुसार अक्षम कर सकते हैं

@Override
public boolean dispatchKeyEvent(KeyEvent keyEvent){
   return true;
}

1
सवाल एमएक्स प्लेयर की कार्यक्षमता की विशेष रूप से नकल करने का है।
नहरमन n

0

पोस्ट आईसीएस यानी एंड्रॉइड 4+, सुरक्षा कारणों से होमबटन के ओवरराइडिंग को हटा दिया गया है, ताकि उपयोगकर्ता मैलवेयर से बाहर निकल सके, ताकि एप्लिकेशन मैलवेयर बन जाए।

साथ ही, उपयोगकर्ता को एप्लिकेशन से दूर नहीं जाने देना वास्तव में अच्छा अभ्यास नहीं है। लेकिन, जब से आप लॉक स्क्रीन एप्लिकेशन बना रहे हैं, तो आप क्या कर सकते हैं, एक्टिविटी को लॉन्चर घोषित कर सकते हैं, ताकि जब होमबटन को दबाया जाए तो यह आपके एप्लिकेशन को पुनः आरंभ करेगा और स्वयं वहीं रहेगा (यूजर्स को एक मामूली झिलमिलाहट के अलावा कुछ भी नहीं दिखाई देगा) स्क्रीन में)।

आप निम्न लिंक से जा सकते हैं:

http://dharmendra4android.blogspot.in/2012/05/override-home-button-in-android.html


सवाल एमएक्स प्लेयर की कार्यक्षमता की विशेष रूप से नकल करने का है।
नहरमन '

0

सच कहूँ तो होम बटन को कम से कम नए एपीआई स्तरों पर अक्षम करना संभव नहीं है, जो कि 4.0 के बाद से है। ऐसा करना भी उचित नहीं है। हालाँकि, आप ओवरराइड करके बैक बटन को ब्लॉक कर सकते हैं

public void onBackPressed() {
    // do not call super onBackPressed.
}

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

इस तरह, भले ही होम बटन दबाया जाए आप अपने ऐप को शीर्ष पर लाने में सक्षम होंगे।

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

खुश कोडिंग।

PS: होम बटन को दबाने पर होम इवेंट को इंटरसेप्ट करना संभव नहीं है।

आप संलग्न करने के लिए उपयोग कर सकते हैं खिड़की के तरीके और भी कीप तरीके, लेकिन 4.0 के बाद से एपीआई स्तर के लिए नहीं।


सवाल एमएक्स प्लेयर की कार्यक्षमता की विशेष रूप से नकल करने का है।
नहरमन '

@NiekHaarman, वास्तव में नहीं। सवाल "होम, बैक और अन्य सभी सिस्टम बटन को अक्षम करना है।" विशेष रूप से MX प्लेयर को पसंद करते हैं, MIMIC को नहीं।
एडम

@adam नहीं, इस सवाल पर मैंने जो जवाब दिया, उससे इस सवाल का जवाब मिलता है जो एमएक्स प्लेयर की कार्यक्षमता की नकल करने के लिए विशेष रूप से पूछा जाता है।
नहरमन 17

0

रोटेशन का उपयोग करना अपवाद का कारण बनता है, इसलिए मैंने इसका उपयोग करके अपनी गतिविधि निर्धारित की है:

HomeKeyLocker locker;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_splash);

    locker = new HomeKeyLocker();               
    locker.lock(this);
}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    locker.unlock();
}

@Override
public void onConfigurationChanged(Configuration config) {
    super.onConfigurationChanged(config);
    locker.lock(this);
}

आपको @ Lê Quang Duy सुझाव का उपयोग करना होगा।


0

मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जिसमें टैबलेट को केवल एप्लिकेशन के लिए लॉक करना है। सबसे पहले मैंने अपने ऐप को MainLauncher के रूप में रखा, फिर मैंने एंड्रॉइड व्यू का उपयोग करके टास्कबार को लॉक किया। अंत में मैं टैबलेट को ब्लॉक करता हूं। यह एक विशेषता नहीं है जिसे मैं कई टैबलेट मॉडल में उपयोग करने के लिए इंगित करता हूं, क्योंकि प्रत्येक डिवाइस मॉडल में इसे ब्लॉक करने की सुविधा है।

लेकिन कुल मिलाकर यह सभी के लिए काम करता है। आप कमांड का उपयोग कर सकते हैं

Java.Lang.Runtime.GetRuntime().Exec("su -c sed -i '/VOLUME_UP/s/^# //g' /system/usr/keylayout/Generic.kl");

बटन को निष्क्रिय करने के लिए एक उदाहरण के रूप में। लेकिन सब कुछ सिस्टम फ़ाइलों को फ़ोल्डर के अंदर बदलने पर आधारित है "/ system / usr / keylayout / ..."। नोट: केवल रूट किए गए उपकरणों पर काम करता है।

एक और तरीका है जो मैं अभी भी विकसित कर रहा हूं, रूटडायरेक्ट्री तक पहुंचने के लिए StreamWrite और StreamReader का उपयोग कर रहा हूं और बटन को अक्षम और सक्षम करने के लिए पूरी फाइल को फिर से लिखता हूं।

उम्मीद है की यह मदद करेगा।

और कोई भी प्रश्न उपलब्ध रहता है।


0

रूट किए गए (या कस्टम रोम) एंड्रॉइड डिवाइस पर सॉफ्ट-नेव को पूरी तरह से हटाने की तलाश में किसी के लिए , आप build.propसिस्टम फ़ोल्डर के भीतर पाठ फ़ाइल को संशोधित कर सकते हैं ।

निम्नलिखित चर / मान सेट करें:

gemu.hw.mainkeys=1

यह वह है जो विक्रेताओं को नरम नौसेना को निष्क्रिय करने के लिए उपयोग करते हैं, जब उनके पास भौतिक बटन होते हैं।


-3

2-3 साल बाद जवाब देने के लिए क्षमा करें। लेकिन आप सभी सिस्टम बटन की गतिविधि छिपा सकते हैं। बस इस मेरे उत्तर की जांच करें किसी भी गतिविधि में वर्चुअल होम बटन को कैसे अक्षम करें?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.