2011-11-09 12 views
6

मेरे पास एक ऐप है, जो कि बच्चा सुरक्षित होना चाहिए। मतलब यह है कि, यह किसी भी एक कुंजी स्पर्श को अवरुद्ध करता है, फिर भी ऐप से बाहर निकलने के लिए लंबे समय तक दबाता है। ऐसा इसलिए है कि बच्चा खेलते समय भी (बुरा) काम करने से सुरक्षित होगा। संस्करण 2.3.4 तक, मैं इसे प्राप्त करने में सफल रहा। हालांकि, अब मैं 2 समस्या है:एंड्रॉइड पर टॉडलर सुरक्षित ऐप

  1. मधुकोश पर, मैं स्थिति बार सूचनाएं जिस पर दबाया जा सकता है। इसके अलावा, मेरे पास स्विच-विंडोज कुंजी है जिसे दबाया जा सकता है। एकमात्र चीज जिसके साथ मैं सफल हुआ वह स्टेटस बार को मंद करना है।
  2. आइसक्रीम सैंडविच (एमुलेटर का उपयोग करके, मेरे पास अभी भी इस संस्करण के साथ एक असली डिवाइस नहीं है), अगले कोड को कॉल करते समय, मुझे एक अपवाद मिलता है जिसे पकड़ा भी नहीं जा सकता है। अपवाद:

    java.lang.IllegalArgumentException: खिड़की के जोड़े जाने के बाद विंडो प्रकार बदला नहीं जा सकता है।

कोड:

@Override 
public void onAttachedToWindow() 
    { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 
    super.onAttachedToWindow(); 
    } 

मैं क्या कर सकता है?

+0

कैसे आप घर कुंजी को प्रेस अवरुद्ध कर रहे हैं आईसीएस में होम बटन छिपा है? – slayton

+0

@ स्लेटन क्या आपने अभी कोशिश की है जो मैंने अभी लिखा है? यह गतिविधि वर्ग में लिखा गया है। –

+0

@androiddeveloper मुझे भी मेरे आवेदन में एक ही त्रुटि मिल रही है और मैं भी ATttachedTowindow() कोड पर उपयोग कर रहा हूं ... आपने इस समस्या को कैसे हल किया? –

उत्तर

2

एंड्रॉइड संस्करण 4 (एपीआई 14 और ऊपर) के लिए, यह उपयोग करना संभव हो सकता है: getWindow()। SetType (WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

हालांकि, एमुलेटर पर, यह होम बटन को अवरुद्ध नहीं करता है, इसलिए यह थोड़े बेकार है। मुझे अभी भी पता नहीं है कि यह वास्तविक उपकरणों पर ठीक काम करता है या नहीं।

शायद अगले कार्यवाही का उपयोग करना संभव है: ऐप को डिफ़ॉल्ट होम स्क्रीन ऐप के रूप में सेट करें। यदि एप्लिकेशन सक्रिय था, तो होम बटन दबाया गया था, इसे कैप्चर करें और कुछ भी नहीं करें। यदि एप्लिकेशन पृष्ठभूमि पर था (या बंद) पर होम बटन दबाया गया था, तो पहले चयनित डिफ़ॉल्ट होम ऐप खोलें।

वैकल्पिक रूप से, मैं उपयोगकर्ता को प्रत्येक बार शुरू होने के लिए डिफ़ॉल्ट होम लॉन्चर ऐप सेट करने के लिए कह सकता हूं, और इसे बंद करने के बाद इसे फिर से रीसेट कर सकता है (या तो पिछले एक या कुल रीसेट)।

क्या यह संभव है? यदि हां, तो कैसे?


के बाद से एंड्रॉयड लॉलीपॉप (संस्करण 5.0 जो एपीआई 21 है), वहाँ स्क्रीन पिन करने का एक तरीका है, और इस उपयोगकर्ता या एप्लिकेशन (लिंक here) रूप से चालू किया जा सकता है:

मैन्युअली:: उपयोगकर्ताओं सेटिंग्स में pinning> सुरक्षा> स्क्रीन पिन स्क्रीन सक्षम करें, और कार्यों को वे हाल ही की स्क्रीन में हरे पिन आइकन स्पर्श करके पिन करना चाहते हैं का चयन कर सकते

वहाँ स्क्रीन पिन को सक्रिय करने के दो तरीके हैं। प्रोग्रामेटिक रूप से: प्रोग्रामिंग के स्क्रीन पिनिंग को सक्रिय करने के लिए, अपने ऐप से startLockTask() को कॉल करें। यदि अनुरोध करने वाला ऐप डिवाइस स्वामी नहीं है, तो उपयोगकर्ता को पुष्टिकरण के लिए संकेत दिया जाता है। एक डिवाइस स्वामी ऐप setLockTaskPackages() विधि को उपयोगकर्ता पुष्टिकरण चरण के बिना पिनेबल सक्षम करने के लिए सक्षम करने के लिए कॉल कर सकता है।

यह क्या करता है? आगे पढ़ने के लिए और देखें:

जब कार्य ताला सक्रिय है, निम्नलिखित व्यवहार होता है:

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

इतना ही नहीं, लेकिन this post के अनुसार, आप भी इस उपयोगकर्ता के पुष्टि के बिना बदल सकते हैं, और यह विशेष राज्य से बाहर निकलने को अपने ऐप्लिकेशन के तर्क के तहत किया जाएगा।

बच्चा सुरक्षित ऐप के लिए सही चीज़ की तरह लगता है।

1

मुझे नीचे दिए गए कोड के लिए (संस्करण 4.4.4)

public void onCreate(Bundle savedInstanceState) { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION); 
      super.onAttachedToWindow(); 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

    } 
+0

आपको यह समाधान कैसे मिला? –

+0

यह मेरे लिए काम किया। –

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