डिवाइस एडमिन के बारे में खास जानकारी

डिवाइस एडमिन की सुविधा बंद होना. Android 9 (एपीआई लेवल 28) से, डिवाइस एडमिन के डिवाइस पर लागू करने पर, एडमिन से जुड़ी कुछ नीतियों को 'अब लागू नहीं है' के तौर पर मार्क कर दिया जाएगा. हमारा सुझाव है कि आप इस बदलाव के लिए, अभी से तैयारी शुरू कर दें. सीखने में माइग्रेशन के विकल्प देखने के लिए, डिवाइस एडमिन की सुविधा बंद होना.

Android, एंटरप्राइज़ ऐप्लिकेशन के लिए, ये सुविधाएं देता है: Android डिवाइस एडमिन एपीआई. डिवाइस एडमिनिस्ट्रेशन एपीआई, सिस्टम लेवल पर डिवाइस एडमिनिस्ट्रेशन की सुविधाएं देता है. इन एपीआई की मदद से, सुरक्षा की जानकारी देने वाले ऐसे ऐप्लिकेशन जो एंटरप्राइज़ सेटिंग में काम के होते हैं. इन ऐप्लिकेशन में आईटी पेशेवरों को कर्मचारी के डिवाइस पर बेहतर कंट्रोल की ज़रूरत होती है. उदाहरण के लिए, Android के बिल्ट-इन ईमेल ऐप्लिकेशन ने Exchange के साथ बेहतर तरीके से काम करने के लिए, इन एपीआई का इस्तेमाल किया है. ईमेल ऐप्लिकेशन के ज़रिए, Exchange एडमिन ये काम कर सकते हैं: पासवर्ड नीतियां लागू करें — इनमें अक्षर और अंक वाले पासवर्ड या अंकों वाले पासवर्ड शामिल हैं पिन — सभी डिवाइसों पर एडमिन, खोए या चोरी हुए हैंडसेट को किसी भी जगह से वाइप कर सकते हैं. इसका मतलब है कि वे हैंडसेट को फ़ैक्ट्री डिफ़ॉल्ट सेटिंग पर वापस ला सकते हैं. Exchange का इस्तेमाल करने वाले लोग, अपना ईमेल और कैलेंडर डेटा सिंक कर सकते हैं.

यह दस्तावेज़ उन डेवलपर के लिए है जो एंटरप्राइज़ डेवलप करना चाहते हैं Android-पावर्ड डिवाइसों के लिए समाधान ढूंढ सकते हैं. इसमें चैनल पर मौजूद अलग-अलग सुविधाओं पर चर्चा की गई है को ज़्यादा बेहतर सुरक्षा देने के लिए, Device Administration API से दिया गया है कर्मचारी के ऐसे डिवाइस जो Android की मदद से काम करते हैं.

ध्यान दें Android for Work डिप्लॉयमेंट के लिए, वर्क पॉलिसी कंट्रोलर बनाने के बारे में जानकारी पाने के लिए, डिवाइस नीति कंट्रोलर बनाएं लेख पढ़ें.

डिवाइस के मालिक वाला बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला मोड

Android 14 (एपीआई लेवल 34) में, बिना यूज़र इंटरफ़ेस वाले सिस्टम यूज़र मोड (ऐसे डिवाइस जो कौनसा UserManager.isHeadlessSystemUserMode true नतीजे दिखाता है). हेडलेस सिस्टम यूज़र मोड में सिस्टम का उपयोगकर्ता बैकग्राउंड का उपयोगकर्ता और असली उपयोगकर्ता के लिए, फ़ोरग्राउंड के अतिरिक्त उपयोगकर्ताओं पर निर्भर रहता है इंटरैक्शन. Android 14 में, डिवाइस के मालिक के लिए हेडलेस अफ़िलिएट मोड भी जोड़ा गया है. इस मोड में, सिस्टम के उस उपयोगकर्ता के अलावा, अफ़िलिएट किए गए सभी उपयोगकर्ताओं के लिए प्रोफ़ाइल का मालिक जोड़ा जाता है जिस पर डिवाइस का मालिक सेट होता है.

हेडलेस सिस्टम उपयोगकर्ता (जहां सिस्टम उपयोगकर्ता बैकग्राउंड में चलता है) के साथ कॉन्फ़िगर किए गए डिवाइसों में, फ़ोरग्राउंड उपयोगकर्ता या उपयोगकर्ताओं पर सिर्फ़ डिवाइस की ऐसी नीतियां लागू होती हैं जो ग्लोबल दायरे में आती हैं (सभी उपयोगकर्ताओं पर लागू होने वाली नीतियां). यहां जाएं: addUserRestriction देखें.

Android डिवाइस बनाने वाली कंपनियां इनका इस्तेमाल कर सकती हैं: दिशा-निर्देश source.android.com पर पब्लिश किया गया है.

डिवाइस एडमिन एपीआई की खास जानकारी

यहां अलग-अलग तरह के ऐसे ऐप्लिकेशन के उदाहरण दिए गए हैं जो डिवाइस एडमिन एपीआई का इस्तेमाल कर सकते हैं:

  • ईमेल क्लाइंट.
  • रिमोट वाइप करने वाले सुरक्षा ऐप्लिकेशन.
  • डिवाइस मैनेजमेंट सेवाएं और ऐप्लिकेशन.

यह कैसे काम करता है?

डिवाइस के एडमिन ऐप्लिकेशन लिखने के लिए, डिवाइस एडमिन एपीआई का इस्तेमाल किया जाता है अपने डिवाइसों पर इंस्टॉल करते हैं. डिवाइस का एडमिन ऐप्लिकेशन, उम्मीद के मुताबिक नीति को लागू करता है की नीतियों के बारे में ज़्यादा जानें. यह इस तरह से काम करता है:

  • सिस्टम एडमिन, डिवाइस एडमिन ऐप्लिकेशन लिखता है. यह ऐप्लिकेशन, डिवाइस की रिमोट/लोकल सुरक्षा नीतियों को लागू करता है. इन नीतियों को कोड में हार्ड कोड किया जा सकता है या ऐप्लिकेशन, किसी तीसरे पक्ष से डाइनैमिक तौर पर नीतियां फ़ेच कर सकता है सर्वर.
  • यह ऐप्लिकेशन, लोगों के डिवाइस पर इंस्टॉल किया जाता है डिवाइस. Android यह काम करता है फ़िलहाल, अपने-आप प्रावधान करने की सुविधा उपलब्ध नहीं है. उपयोगकर्ताओं को ऐप्लिकेशन उपलब्ध कराने के लिए, सिस्टम एडमिन ये तरीके अपना सकते हैं:
    • Google Play.
    • किसी दूसरे स्टोर से इंस्टॉल करने की सुविधा चालू की जा रही है.
    • ईमेल या वेबसाइटों जैसे अन्य तरीकों से ऐप्लिकेशन को डिस्ट्रिब्यूट करना.
  • सिस्टम, उपयोगकर्ता को डिवाइस एडमिन ऐप्लिकेशन चालू करने के लिए कहता है. यह कैसे और कब होता है, यह इस बात पर निर्भर करता है कि ऐप्लिकेशन को कैसे लागू किया गया है.
  • डिवाइस एडमिन ऐप्लिकेशन चालू करने के बाद, उपयोगकर्ताओं पर इसकी नीतियां लागू हो जाती हैं. उन नीतियों का अनुपालन करने से आमतौर पर लाभ मिलते हैं, जैसे संवेदनशील सिस्टम और डेटा का ऐक्सेस.

अगर उपयोगकर्ता डिवाइस एडमिन ऐप्लिकेशन को चालू नहीं करते हैं, तो यह डिवाइस पर बना रहता है, लेकिन बंद रहता है. उपयोगकर्ताओं पर इसकी नीतियां लागू नहीं होंगी. साथ ही, उन्हें ऐप्लिकेशन के कोई फ़ायदा भी नहीं मिलेगा. उदाहरण के लिए, हो सकता है कि वे डेटा सिंक न कर पाएं.

अगर कोई उपयोगकर्ता नीतियों का पालन नहीं करता है, तो ऐप्लिकेशन यह तय करता है कि इस स्थिति को कैसे मैनेज किया जाए. उदाहरण के लिए, अगर कोई उपयोगकर्ता ऐसा पासवर्ड सेट करता है जो दिशा-निर्देशों का उल्लंघन करता है. हालांकि, आम तौर पर ऐसा होने पर उपयोगकर्ता, डेटा सिंक नहीं कर पाएगा.

अगर कोई डिवाइस ऐसे सर्वर से कनेक्ट करने की कोशिश करता है जिसके लिए ऐसी नीतियां ज़रूरी हैं जो डिवाइस एडमिनिस्ट्रेशन एपीआई में काम नहीं करती हैं, तो उसे कनेक्ट करने की अनुमति नहीं दी जाएगी. फ़िलहाल, Device Administration API, कुछ हिस्से को अनुमति नहीं देता है. प्रॉविज़निंग. दूसरे शब्दों में, अगर कोई डिवाइस (उदाहरण के लिए, कोई लेगसी डिवाइस) बताई गई सभी नीतियों के साथ काम नहीं करता है, तो उस डिवाइस को कनेक्ट करने की अनुमति नहीं दी जा सकती.

अगर किसी डिवाइस में एक से ज़्यादा एडमिन ऐप्लिकेशन चालू हैं, तो सबसे सख्त नीति यह है लागू किया गया. किसी विशेष एडमिन को टारगेट करने का कोई तरीका नहीं है है.

डिवाइस के किसी मौजूदा एडमिन ऐप्लिकेशन को अनइंस्टॉल करने के लिए, उपयोगकर्ताओं को: सबसे पहले, एडमिन के तौर पर ऐप्लिकेशन का रजिस्ट्रेशन रद्द करें.

नीतियां

एंटरप्राइज़ सेटिंग में, अक्सर ऐसा होता है कि कर्मचारी के डिवाइसों को जो डिवाइस के इस्तेमाल को कंट्रोल करने वाली नीतियों के सख्त सेट का पालन करते हों. डिवाइस एडमिनिस्ट्रेशन एपीआई, टेबल 1 में दी गई नीतियों के साथ काम करता है. ध्यान दें कि फ़िलहाल, डिवाइस एडमिनिस्ट्रेशन एपीआई सिर्फ़ स्क्रीन लॉक के लिए पासवर्ड का इस्तेमाल करता है:

टेबल 1. डिवाइस एडमिन एपीआई पर काम करने वाली नीतियां.

नीति ब्यौरा
पासवर्ड चालू है यह ज़रूरी है कि डिवाइस, पिन या पासवर्ड पूछें.
पासवर्ड की कम से कम लंबाई पासवर्ड के लिए वर्णों की ज़रूरी संख्या सेट करें. उदाहरण के लिए, आपके पास पिन या पासवर्ड में कम से कम छह वर्ण होने की ज़रूरी शर्त तय करने का विकल्प है.
अक्षरों और अंकों वाला पासवर्ड ज़रूरी है पासवर्ड में अक्षरों और संख्याओं का कॉम्बिनेशन होना चाहिए. इनमें सिंबल वाले वर्ण शामिल हो सकते हैं.
जटिल पासवर्ड ज़रूरी है यह ज़रूरी है कि पासवर्ड में कम से कम एक अक्षर, एक संख्यात्मक अंक और एक खास निशान होना चाहिए. Android 3.0 में पेश किया गया.
पासवर्ड में कम से कम अक्षर होने ज़रूरी हैं कम से कम इतने सभी एडमिन या किसी खास व्यक्ति के लिए पासवर्ड में ज़रूरी अक्षर. Android 3.0 में पेश किया गया.
पासवर्ड में कम से कम छोटे अक्षरों की ज़रूरी संख्या लोअरकेस की कम से कम संख्या सभी एडमिन या किसी खास व्यक्ति के लिए पासवर्ड में ज़रूरी अक्षर. Android 3.0 में लॉन्च किया गया.
पासवर्ड में कम से कम बिना अक्षर वाले वर्ण होने चाहिए सभी एडमिन या किसी एक एडमिन के पासवर्ड में, अक्षर के अलावा कम से कम इतने वर्ण होने चाहिए. Android 3.0 में लॉन्च किया गया.
पासवर्ड में कम से कम कितने अंक होने चाहिए सभी एडमिन या किसी खास व्यक्ति के लिए, पासवर्ड में अंकों वाली कम से कम संख्या. Android 3.0 में लॉन्च किया गया.
पासवर्ड में कम से कम कितने सिंबल होने चाहिए सभी एडमिन या किसी एक के लिए, पासवर्ड में कम से कम सिंबल की ज़रूरी संख्या. Android 3.0 में पेश किया गया.
पासवर्ड में अपरकेस अक्षरों की ज़रूरी कम से कम संख्या सभी एडमिन या किसी खास व्यक्ति के लिए, पासवर्ड में कम से कम अंग्रेज़ी के बड़े अक्षर होने ज़रूरी हैं. Android 3.0 में पेश किया गया.
पासवर्ड की समयसीमा खत्म होने का समय जब पासवर्ड की समयसीमा खत्म हो जाती है, तो इसे मिलीसेकंड में डेल्टा के रूप में तब दिखाया जाता है, जब डिवाइस एडमिन समयसीमा खत्म होने का समय सेट करता है. Android 3.0 में पेश किया गया.
पासवर्ड के इतिहास पर पाबंदी इस नीति से, उपयोगकर्ताओं को पिछले n यूनीक पासवर्ड का फिर से इस्तेमाल करने से रोका जाता है. आम तौर पर, इस नीति का इस्तेमाल setPasswordExpirationTimeout(), जो उपयोगकर्ता एक तय समय के बाद अपने पासवर्ड अपडेट कर सकें. Android 3.0 में पेश किया गया.
पासवर्ड डालने की ज़्यादा से ज़्यादा कोशिशें यह बताता है कि कोई उपयोगकर्ता डिवाइस अपना डेटा वाइप करता है. Device Administration API, एडमिन को ये काम करने की भी अनुमति देता है डिवाइस को दूर से फ़ैक्ट्री डिफ़ॉल्ट पर रीसेट करें. यह डेटा को तब सुरक्षित रखता है, जब डिवाइस खो जाता है या चोरी हो जाता है.
ज़्यादा से ज़्यादा कितने समय तक कोई गतिविधि नहीं होगी, इस बारे में जानकारी देने के लिए समय लॉक करें उपयोगकर्ता के आखिरी बार स्क्रीन को छूने के बाद से अब तक का समय सेट करता है या डिवाइस द्वारा स्क्रीन लॉक करने से पहले एक बटन दबाया गया. ऐसा होने पर, उपयोगकर्ताओं को अपने डिवाइसों का इस्तेमाल करने और डेटा ऐक्सेस करने से पहले, फिर से अपना पिन या पासवर्ड डालना होगा. यह वैल्यू 1 से 60 मिनट के बीच हो सकती है.
डिवाइस के स्टोरेज को एन्क्रिप्ट (सुरक्षित) करना ज़रूरी है इससे पता चलता है कि अगर डिवाइस में स्टोरेज एरिया को एन्क्रिप्ट करने की सुविधा है, तो उसे एन्क्रिप्ट किया जाना चाहिए. Android 3.0 में पेश किया गया.
कैमरा बंद करें इससे पता चलता है कि कैमरे को बंद किया जाना चाहिए. ध्यान दें कि इसे हमेशा के लिए बंद करने की ज़रूरत नहीं है. कैमरे को डाइनैमिक तरीके से चालू/बंद किया जा सकता है जानकारी, जैसे कि संदर्भ, समय वगैरह के हिसाब से. इसे Android 4.0 में लॉन्च किया गया था.

अन्य सुविधाएं

ऊपर दी गई टेबल में दी गई नीतियों के साथ-साथ, डिवाइस एडमिनिस्ट्रेशन एपीआई की मदद से ये काम किए जा सकते हैं:

  • उपयोगकर्ता को कोई नया पासवर्ड सेट करने का निर्देश दें.
  • डिवाइस तुरंत लॉक हो जाएगा.
  • डिवाइस का डेटा मिटाएं. इसका मतलब है कि डिवाइस को फ़ैक्ट्री डिफ़ॉल्ट सेटिंग पर वापस लाएं.

सैंपल ऐप्लिकेशन

इस पेज पर दिए गए उदाहरण, डिवाइस एडमिनिस्ट्रेशन एपीआई के सैंपल पर आधारित हैं. यह सैंपल, SDK टूल के सैंपल में शामिल होता है. यह सैंपल, Android SDK Manager के ज़रिए उपलब्ध होता है. साथ ही, यह आपके सिस्टम में <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java के तौर पर मौजूद होता है.

सैंपल ऐप्लिकेशन, डिवाइस एडमिन की सुविधाओं का डेमो देता है. यह उपयोगकर्ताओं को एक यूज़र इंटरफ़ेस दिखाता है, जिसकी मदद से वे डिवाइस एडमिन ऐप्लिकेशन को चालू कर सकते हैं. ऐप्लिकेशन चालू करने के बाद, वे यूज़र इंटरफ़ेस में मौजूद बटन का इस्तेमाल करके ये काम कर सकते हैं:

  • पासवर्ड की क्वालिटी सेट करें.
  • उपयोगकर्ता के पासवर्ड के लिए ज़रूरतें तय करें, जैसे कि कम से कम लंबाई, वर्णों की संख्या.
  • पासवर्ड सेट करें. अगर पासवर्ड, तय की गई नीतियों के मुताबिक नहीं है, तो सिस्टम गड़बड़ी का मैसेज दिखाता है.
  • सेट करें कि डिवाइस को वाइप करने से पहले कितने विफल पासवर्ड प्रयास हो सकते हैं (यानी, फ़ैक्ट्री सेटिंग पर वापस लाया जा सकता है).
  • सेट करें कि पासवर्ड की समयसीमा कब खत्म होगी.
  • पासवर्ड के इतिहास की अवधि सेट करें. length से, इतिहास में सेव किए गए पुराने पासवर्ड की संख्या का पता चलता है. इस वजह से लोग दोबारा इस्तेमाल नहीं कर सकते आपके द्वारा उपयोग किए गए अंतिम n पासवर्ड में से एक.
  • अगर डिवाइस पर स्टोरेज एरिया को एन्क्रिप्ट करने की सुविधा काम करती है, तो यह बताएं कि स्टोरेज एरिया को एन्क्रिप्ट किया जाना चाहिए.
  • यह सेट करें कि इनऐक्टिव रहने के लिए, डिवाइस पर ज़्यादा से ज़्यादा कितना समय बिताया जा सकता है लॉक करें.
  • डिवाइस तुरंत लॉक हो जाए.
  • डिवाइस का डेटा मिटाएं (यानी, फ़ैक्ट्री सेटिंग पहले जैसी करें).
  • कैमरा बंद करें.

पहला डायग्राम. सैंपल ऐप्लिकेशन का स्क्रीनशॉट

डिवाइस एडमिन ऐप्लिकेशन डेवलप करना

सिस्टम एडमिन, डिवाइस एडमिनिस्ट्रेशन एपीआई का इस्तेमाल करके, ऐसा ऐप्लिकेशन लिख सकते हैं जो डिवाइस की सुरक्षा से जुड़ी नीति को रिमोट/लोकल तौर पर लागू करता हो. इस सेक्शन में, डिवाइस एडमिन ऐप्लिकेशन बनाने के तरीके के बारे में खास जानकारी दी गई है.

मेनिफ़ेस्ट बनाना

डिवाइस एडमिनिस्ट्रेशन एपीआई का इस्तेमाल करने के लिए, ऐप्लिकेशन के मेनिफ़ेस्ट में ये चीज़ें शामिल होनी चाहिए:

  • DeviceAdminReceiver का एक सबक्लास, जिसमें ये शामिल हैं:
    • BIND_DEVICE_ADMIN की अनुमति.
    • ACTION_DEVICE_ADMIN_ENABLED का जवाब देने की क्षमता इंटेंट, जिसे मेनिफ़ेस्ट में इंटेंट फ़िल्टर के तौर पर दिखाया जाता है.
  • मेटाडेटा में इस्तेमाल की गई सुरक्षा नीतियों का एलान.

यहां डिवाइस एडमिन के सैंपल मेनिफ़ेस्ट का एक हिस्सा दिया गया है:

<activity android:name=".app.DeviceAdminSample"
            android:label="@string/activity_sample_device_admin">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.SAMPLE_CODE" />
    </intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
        android:label="@string/sample_device_admin"
        android:description="@string/sample_device_admin_description"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

ध्यान दें कि:

  • यहां दिए गए एट्रिब्यूट, स्ट्रिंग संसाधनों के बारे में बताते हैं. सैंपल ऐप्लिकेशन के लिए, ये ApiDemos/res/values/strings.xml में मौजूद होते हैं. संसाधनों के बारे में ज़्यादा जानकारी के लिए, देखें आवेदन के संसाधन.
    • android:label="@string/activity_sample_device_admin", गतिविधि के लिए उपयोगकर्ता के पढ़ने लायक लेबल को दिखाता है.
    • android:label="@string/sample_device_admin", अनुमति के लिए उपयोगकर्ता के पढ़ने लायक लेबल को दिखाता है.
    • android:description="@string/sample_device_admin_description" से, अनुमति के बारे में उपयोगकर्ता के लिए लिखी गई जानकारी का पता चलता है. विवरण आम तौर पर लंबा होता है और इससे जानकारी मिलती है लेबल जोड़ें.
  • android:permission="android.permission.BIND_DEVICE_ADMIN" एक ऐसी अनुमति है जो DeviceAdminReceiver सबक्लास के पास होनी चाहिए. इससे यह पक्का होता है कि सिर्फ़ सिस्टम ही रिसीवर से इंटरैक्ट कर सकता है. किसी भी ऐप्लिकेशन को यह अनुमति नहीं दी जा सकती. यह अन्य ऐप्लिकेशन को आपके डिवाइस के एडमिन ऐप्लिकेशन का गलत इस्तेमाल करने से रोकता है.
  • android.app.action.DEVICE_ADMIN_ENABLED प्राइमरी है वह कार्रवाई जिसे DeviceAdminReceiver सब-क्लास मैनेज करके, को डिवाइस मैनेज करने की अनुमति दी गई है. जब उपयोगकर्ता डिवाइस एडमिन ऐप्लिकेशन को चालू करता है, तब इसे रिसीवर पर सेट किया जाता है. आम तौर पर, आपका कोड इसे onEnabled() में मैनेज करता है. यह सुविधा काम करे, इसके लिए यह ज़रूरी है कि कॉन्टेंट पाने वाले व्यक्ति के पास BIND_DEVICE_ADMIN की अनुमति भी हो, ताकि दूसरे ऐप्लिकेशन इसका गलत इस्तेमाल न कर सकें.
  • जब कोई उपयोगकर्ता डिवाइस एडमिन ऐप्लिकेशन को चालू करता है, तो इससे रिसीवर को किसी खास सिस्टम के ब्रॉडकास्ट की प्रतिक्रिया में कार्रवाई करने की अनुमति इवेंट. सही इवेंट होने पर, ऐप्लिकेशन कोई नीति लागू कर सकता है. उदाहरण के लिए, अगर उपयोगकर्ता ऐसा नया पासवर्ड सेट करने की कोशिश करता है जो नीति की ज़रूरी शर्तों को पूरा नहीं करता, तो ऐप्लिकेशन उपयोगकर्ता को ऐसा कोई दूसरा पासवर्ड चुनने के लिए कह सकता है जो ज़रूरी शर्तों को पूरा करता हो.
  • अपने ऐप्लिकेशन को पब्लिश करने के बाद, रिसीवर का नाम बदलने से बचें. अगर मेनिफ़ेस्ट में मौजूद नाम बदल जाता है, तो उपयोगकर्ता जब ऐप्लिकेशन को अपडेट करते हैं, तो डिवाइस एडमिन की सुविधा बंद हो जाती है. ज़्यादा जानने के लिए, <receiver> देखें.
  • android:resource="@xml/device_admin_sample" मेटाडेटा में इस्तेमाल की जाने वाली सुरक्षा नीतियों के बारे में बताता है. मेटाडेटा अतिरिक्त जानकारी देता है डिवाइस एडमिन के लिए खास जानकारी, जिसे DeviceAdminInfo क्लास की मदद से पार्स किया गया है. यहां इसका कॉन्टेंट दिया गया है device_admin_sample.xml:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>
</device-admin>

अपने डिवाइस के एडमिन ऐप्लिकेशन को डिज़ाइन करते समय, आपको ये काम करने की ज़रूरत नहीं है इसमें वे सभी नीतियां शामिल होनी चाहिए जो आपके ऐप्लिकेशन के लिए काम की हैं.

मेनिफ़ेस्ट फ़ाइल के बारे में ज़्यादा चर्चा के लिए, Android डेवलपर गाइड देखें.

कोड लागू करना

डिवाइस एडमिन एपीआई में ये क्लास शामिल हैं:

DeviceAdminReceiver
डिवाइस एडमिन कॉम्पोनेंट लागू करने के लिए बेस क्लास. यह क्लास, सिस्टम से भेजी गई रॉ इंटेंट ऐक्शन को समझने में मदद करती है. आपके डिवाइस एडमिन ऐप्लिकेशन में DeviceAdminReceiver सब-क्लास.
DevicePolicyManager
किसी डिवाइस पर लागू की गई नीतियों को मैनेज करने के लिए क्लास. इस क्लास के ज़्यादातर क्लाइंट ने ऐसा DeviceAdminReceiver पब्लिश किया होगा जिसे उपयोगकर्ता ने फ़िलहाल चालू किया है. DevicePolicyManager, इन चीज़ों के लिए नीतियां मैनेज करता है एक या उससे ज़्यादा DeviceAdminReceiver इंस्टेंस
DeviceAdminInfo
इस क्लास का इस्तेमाल, डिवाइस एडमिन कॉम्पोनेंट के लिए मेटाडेटा बताने के लिए किया जाता है.

ये क्लास, डिवाइस एडमिन ऐप्लिकेशन के लिए बुनियादी सुविधाएं उपलब्ध कराती हैं. इस सेक्शन के बाकी हिस्से में, डिवाइस एडमिन ऐप्लिकेशन लिखने के लिए, DeviceAdminReceiver और DevicePolicyManager एपीआई का इस्तेमाल करने का तरीका बताया गया है.

DeviceAdminReceiver को सब-क्लास बनाना

डिवाइस एडमिन ऐप्लिकेशन बनाने के लिए, आपको सब-क्लास बनाना होगा DeviceAdminReceiver. DeviceAdminReceiver क्लास इसमें कॉलबैक की एक सीरीज़ होती है, जो किसी खास इवेंट के दौरान ट्रिगर होती हैं होता है.

अपने DeviceAdminReceiver सबक्लास में, सैंपल ऐप्लिकेशन कुछ खास इवेंट के जवाब में सिर्फ़ Toast सूचना दिखाता है. उदाहरण के लिए:

KotlinJava
class DeviceAdminSample : DeviceAdminReceiver() {

    private fun showToast(context: Context, msg: String) {
        context.getString(R.string.admin_receiver_status, msg).let { status ->
            Toast.makeText(context, status, Toast.LENGTH_SHORT).show()
        }
    }

    override fun onEnabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_enabled))

    override fun onDisableRequested(context: Context, intent: Intent): CharSequence =
            context.getString(R.string.admin_receiver_status_disable_warning)

    override fun onDisabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_disabled))

    override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) =
            showToast(context, context.getString(R.string.admin_receiver_status_pw_changed))
...
}
public class DeviceAdminSample extends DeviceAdminReceiver {

    void showToast(Context context, String msg) {
        String status = context.getString(R.string.admin_receiver_status, msg);
        Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEnabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_enabled));
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return context.getString(R.string.admin_receiver_status_disable_warning);
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_disabled));
    }

    @Override
    public void onPasswordChanged(Context context, Intent intent, UserHandle userHandle) {
        showToast(context, context.getString(R.string.admin_receiver_status_pw_changed));
    }
...
}

ऐप्लिकेशन चालू किया जा रहा है

डिवाइस एडमिन ऐप्लिकेशन के पास होने वाले एक बड़े इवेंट में से एक इवेंट, उपयोगकर्ता का है ऐप को चालू कर रही हूँ. उपयोगकर्ता को लागू की जाने वाली नीतियों के बारे में बताना. अगर उपयोगकर्ता ऐप्लिकेशन को चालू नहीं करता है, तो भी वह डिवाइस पर मौजूद रहेगा. हालांकि, उसकी नीतियां लागू नहीं होंगी और उपयोगकर्ता को ऐप्लिकेशन के कोई फ़ायदा नहीं मिलेगा.

ऐप्लिकेशन को चालू करने की प्रोसेस तब शुरू होती है, जब उपयोगकर्ता ACTION_ADD_DEVICE_ADMIN को ट्रिगर करने वाली कार्रवाई इंटेंट. इस सैंपल ऐप्लिकेशन में भेजा जाता है, तो यह तब होता है जब उपयोगकर्ता चालू करें एडमिन चेकबॉक्स पर सही का निशान लगाएं.

जब उपयोगकर्ता एडमिन मोड चालू करें चेकबॉक्स पर क्लिक करता है, तो डिसप्ले बदल जाता है. साथ ही, उपयोगकर्ता को डिवाइस एडमिन ऐप्लिकेशन चालू करने के लिए कहा जाता है, जैसा कि दूसरी इमेज में दिखाया गया है.

दूसरी इमेज. सैंपल ऐप्लिकेशन: ऐप्लिकेशन को चालू करना

नीचे दिया गया कोड, एडमिन मोड चालू करें चेकबॉक्स पर क्लिक करने पर लागू होता है. इसे ट्रिगर करने का असर यह होता है कि onPreferenceChange() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है कॉलबैक. यह कॉलबैक तब ट्रिगर होता है, जब उपयोगकर्ता ने इस Preference की वैल्यू बदल दी हो और उसे सेट और/या सेव किया जा रहा हो. अगर उपयोगकर्ता ऐप्लिकेशन को चालू कर रहा है, तो डिसप्ले बदलकर उपयोगकर्ता को डिवाइस एडमिन ऐप्लिकेशन को चालू करने के लिए प्रॉम्प्ट करता है, जैसा कि दूसरी इमेज में दिखाया गया है. ऐसा न होने पर, डिवाइस का एडमिन ऐप्लिकेशन बंद हो जाता है.

KotlinJava
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
    if (super.onPreferenceChange(preference, newValue)) return true
    val value = newValue as Boolean
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply {
                    putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample)
                    putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                            activity.getString(R.string.add_admin_extra_app_text))
                }
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN)
                // return false - don't update checkbox until we're really active
                return false
            } else {
                dpm.removeActiveAdmin(deviceAdminSample)
                enableDeviceCapabilitiesArea(false)
                adminActive = false
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value)
    }
    return true
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    if (super.onPreferenceChange(preference, newValue)) {
        return true;
    }
    boolean value = (Boolean) newValue;
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                        activity.getString(R.string.add_admin_extra_app_text));
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
                // return false - don't update checkbox until we're really active
                return false;
            } else {
                dpm.removeActiveAdmin(deviceAdminSample);
                enableDeviceCapabilitiesArea(false);
                adminActive = false;
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value);
    }
    return true;
}

द लाइन intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample) बताता है कि mDeviceAdminSample (जो (DeviceAdminReceiver कॉम्पोनेंट) टारगेट करने के लिए बनी नीति है. यह लाइन, दूसरी इमेज में दिखाए गए यूज़र इंटरफ़ेस को शुरू करती है. इसमें, उपयोगकर्ताओं को डिवाइस के एडमिन को सिस्टम से जोड़ना (या उन्हें इसे अस्वीकार करने की अनुमति देना).

जब ऐप्लिकेशन को कोई ऐसी कार्रवाई करने की ज़रूरत हो जो डिवाइस का एडमिन ऐप्लिकेशन चालू है, तो इससे पुष्टि होती है कि ऐप्लिकेशन सक्रिय है. ऐसा करने के लिए, यह DevicePolicyManager तरीके का इस्तेमाल करता है isAdminActive(). ध्यान दें कि DevicePolicyManager तरीका isAdminActive(), DeviceAdminReceiver लेता है कॉम्पोनेंट को अपने आर्ग्युमेंट के तौर पर शामिल करना चाहिए:

KotlinJava
private lateinit var dpm: DevicePolicyManager
...
private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)
DevicePolicyManager dpm;
...
private boolean isActiveAdmin() {
    return dpm.isAdminActive(deviceAdminSample);
}

नीतियां मैनेज करना

DevicePolicyManager, नीतियों को मैनेज करने वाली सार्वजनिक क्लास है एक डिवाइस पर लागू किया जाता है. DevicePolicyManager, एक या उससे ज़्यादा DeviceAdminReceiver इंस्टेंस के लिए नीतियां मैनेज करता है.

आपको DevicePolicyManager का हैंडल इस तरह मिलता है:

KotlinJava
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
DevicePolicyManager dpm =
    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

इस सेक्शन में, एडमिन से जुड़े टास्क करने के लिए DevicePolicyManager का इस्तेमाल करने का तरीका बताया गया है:

पासवर्ड के लिए नीतियां सेट करें

DevicePolicyManager में, डिवाइस के पासवर्ड की नीति को सेट करने और लागू करने के लिए एपीआई शामिल हैं. डिवाइस एडमिन एपीआई में, पासवर्ड सिर्फ़ इन पर लागू होता है: स्क्रीन लॉक. इस सेक्शन में, पासवर्ड से जुड़े सामान्य कामों के बारे में बताया गया है.

डिवाइस के लिए पासवर्ड सेट करना

यह कोड एक यूज़र इंटरफ़ेस दिखाता है, जिसमें उपयोगकर्ता को पासवर्ड सेट करने के लिए कहा जाता है:

KotlinJava
Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent ->
    startActivity(intent)
}
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
पासवर्ड की क्वालिटी सेट करना

पासवर्ड की क्वालिटी, इनमें से कोई एक DevicePolicyManager कॉन्स्टेंट हो सकती है:

PASSWORD_QUALITY_ALPHABETIC
उपयोगकर्ता को ऐसा पासवर्ड डालना होगा जिसमें कम से कम अक्षर (या अन्य सिंबल) हों.
PASSWORD_QUALITY_ALPHANUMERIC
उपयोगकर्ता को ऐसा पासवर्ड डालना होगा जिसमें कम से कम अंकों और अक्षरों (या अन्य सिंबल) के दोनों वर्ण शामिल हों.
PASSWORD_QUALITY_NUMERIC
उपयोगकर्ता को कम से कम अंकों वाला पासवर्ड डालना होगा.
PASSWORD_QUALITY_COMPLEX
उपयोगकर्ता ने ऐसा पासवर्ड डाला हो जिसमें कम से कम एक अक्षर, एक अंक, और एक खास सिंबल हो.
PASSWORD_QUALITY_SOMETHING
इस नीति के लिए किसी तरह का होना ज़रूरी है पासवर्ड की बात है, लेकिन इसकी परवाह नहीं करती.
PASSWORD_QUALITY_UNSPECIFIED
नीति में पासवर्ड के लिए कोई ज़रूरी शर्त नहीं है.

उदाहरण के लिए, पासवर्ड के लिए अक्षरों और अंकों का इस्तेमाल करने की ज़रूरत बताने वाली पासवर्ड नीति को सेट करने का तरीका यहां बताया गया है:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
पासवर्ड सामग्री की आवश्यकताएं सेट करें

Android 3.0 से, DevicePolicyManager क्लास में ऐसे तरीके शामिल हैं जिनकी मदद से पासवर्ड के कॉन्टेंट को बेहतर बनाया जा सकता है. इसके लिए उदाहरण के लिए, एक ऐसी नीति सेट की जा सकती है जिसमें यह बताया गया हो कि पासवर्ड में कम से कम कम से कम एक शब्द होना ज़रूरी है n अपरकेस अक्षर. पासवर्ड के कॉन्टेंट को बेहतर बनाने के तरीके यहां दिए गए हैं:

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

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwMinUppercase = 2
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwMinUppercase = 2;
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
पासवर्ड की कम से कम लंबाई सेट करें

आप यह निर्दिष्ट कर सकते हैं कि पासवर्ड कम से कम निर्दिष्ट न्यूनतम होना चाहिए लंबाई. उदाहरण के लिए:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwLength: Int = ...
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwLength;
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
पासवर्ड डालने की ज़्यादा से ज़्यादा कोशिशों की संख्या सेट करना

डिवाइस का डेटा मिटाने (यानी फ़ैक्ट्री सेटिंग पर रीसेट करने) से पहले, पासवर्ड डालने की ज़्यादा से ज़्यादा कोशिशों की संख्या सेट की जा सकती है. उदाहरण के लिए:

KotlinJava
val dPM:DevicePolicyManager
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val maxFailedPw: Int = ...
...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int maxFailedPw;
 ...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
पासवर्ड के खत्म होने की समयसीमा सेट करना

Android 3.0 से, पासवर्ड की समयसीमा खत्म होने का समय सेट करने के लिए, setPasswordExpirationTimeout() तरीका इस्तेमाल किया जा सकता है. इसे डिवाइस के एडमिन के पास पासवर्ड की समयसीमा खत्म होने का समय सेट करने के बाद, मिलीसेकंड में डेल्टा के तौर पर दिखाया जाता है. उदाहरण के लिए:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwExpiration: Long = ...
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
long pwExpiration;
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
इतिहास के आधार पर पासवर्ड पर पाबंदी लगाएं

Android 3.0 से, setPasswordHistoryLength() तरीका का इस्तेमाल करके, उपयोगकर्ताओं को पुराने पासवर्ड फिर से इस्तेमाल करने से रोका जा सकता है. यह तरीका length पैरामीटर लेता है. इससे पता चलता है कि कितने पुराने पासवर्ड सेव किए गए हैं. इस नीति के चालू होने पर, उपयोगकर्ता ऐसा नया पासवर्ड नहीं डाल सकते जो पिछले n पासवर्ड से मेल खाता हो. यह रोक लगाता है एक ही पासवर्ड का बार-बार इस्तेमाल करने से रोकना. आम तौर पर, इस नीति का इस्तेमाल के साथ setPasswordExpirationTimeout(), जो उपयोगकर्ता को एक तय समय के बाद अपने पासवर्ड अपडेट करने के लिए.

उदाहरण के लिए, यह स्निपेट उपयोगकर्ताओं को अपने पिछले पांच पासवर्ड का फिर से इस्तेमाल करने से रोकता है:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwHistoryLength = 5
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwHistoryLength = 5;
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);

डिवाइस लॉक सेट करें

आपके पास यह तय करने का विकल्प होता है कि उपयोगकर्ता ज़्यादा से ज़्यादा कितने समय तक कोई गतिविधि नहीं करेगा डिवाइस लॉक. उदाहरण के लिए:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val timeMs: Long = 1000L * timeout.text.toString().toLong()
...
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
long timeMs = 1000L*Long.parseLong(timeout.getText().toString());
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);

प्रोग्राम के ज़रिए भी डिवाइस को तुरंत लॉक करने के लिए कहा जा सकता है:

KotlinJava
private lateinit var dpm: DevicePolicyManager
dpm.lockNow()
DevicePolicyManager dpm;
dpm.lockNow();

डेटा वाइप करना

DevicePolicyManager तरीके का इस्तेमाल किया जा सकता है डिवाइस को फ़ैक्ट्री सेटिंग पर रीसेट करने के लिए wipeData(). यह सुविधा तब काम की होती है, जब डिवाइस खो जाता है या चोरी हो जाता है. डिवाइस को मिटाने का फ़ैसला, अक्सर कुछ शर्तों के पूरा होने पर लिया जाता है. उदाहरण के लिए, यह बताने के लिए setMaximumFailedPasswordsForWipe() कि डिवाइस को पासवर्ड डालने की असफल कोशिशों की संख्या के बाद वाइप कर दिया गया है.

डेटा को इस तरह मिटाया जा सकता है:

KotlinJava
private lateinit var dpm: DevicePolicyManager
dpm.wipeData(0)
DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() तरीका अतिरिक्त विकल्पों में से एक बिट मास्क पैरामीटर. फ़िलहाल, इसकी वैल्यू 0 होनी चाहिए.

कैमरा बंद करें

Android 4.0 से शुरू करके, कैमरे को बंद किया जा सकता है. ध्यान दें कि इसे हमेशा के लिए बंद करने की ज़रूरत नहीं है. कैमरे को कॉन्टेक्स्ट, समय वगैरह के आधार पर डाइनैमिक तौर पर चालू/बंद किया जा सकता है.

setCameraDisabled() तरीके का इस्तेमाल करके, यह कंट्रोल किया जा सकता है कि कैमरा बंद है या नहीं. उदाहरण के लिए, यह स्निपेट चेकबॉक्स की सेटिंग के आधार पर, कैमरे को चालू या बंद होने के लिए सेट करता है:

KotlinJava
private lateinit var disableCameraCheckbox: CheckBoxPreference
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)
private CheckBoxPreference disableCameraCheckbox;
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());

स्टोरेज को एन्क्रिप्ट (सुरक्षित) करना

Android 3.0 से, setStorageEncryption() के तरीके का इस्तेमाल करके, स्टोरेज के लिए तय किए गए इलाके को एन्क्रिप्ट करने की नीति सेट की जा सकती है. हालांकि, यह सुविधा सिर्फ़ उन डिवाइसों पर काम करती है जिनमें यह सुविधा उपलब्ध है.

उदाहरण के लिए:

KotlinJava
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setStorageEncryption(deviceAdminSample, true)
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setStorageEncryption(deviceAdminSample, true);

स्टोरेज एन्क्रिप्ट (सुरक्षित) करने की सुविधा चालू करने के उदाहरण देखने के लिए, Device Administration API सैंपल देखें.

अतिरिक्त कोड सैंपल

Android AppRestrictionEnforcer और DeviceOwner के सैंपल, इस पेज पर बताए गए एपीआई के इस्तेमाल के बारे में ज़्यादा जानकारी देते हैं.