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

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

Android में, Android डिवाइस Administration API की मदद से एंटरप्राइज़ ऐप्लिकेशन इस्तेमाल किए जा सकते हैं. Device Administration API, सिस्टम लेवल पर डिवाइस एडमिनिस्ट्रेशन की सुविधाएं देता है. इन एपीआई की मदद से, सुरक्षा को ध्यान में रखकर ऐप्लिकेशन बनाए जा सकते हैं. ये ऐप्लिकेशन, एंटरप्राइज़ सेटिंग में काम आते हैं. इनमें आईटी प्रोफ़ेशनल को कर्मचारियों के डिवाइसों पर ज़्यादा कंट्रोल की ज़रूरत होती है. उदाहरण के लिए, 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 पर पब्लिश किए गए दिशा-निर्देश देख सकती हैं.

डिवाइस एडमिनिस्ट्रेशन एपीआई के बारे में खास जानकारी

यहां उन ऐप्लिकेशन के उदाहरण दिए गए हैं जो Device Administration API का इस्तेमाल कर सकते हैं:

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

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

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

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

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

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

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

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

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

नीतियां

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

टेबल 1. Device Administration API के साथ काम करने वाली नीतियां.

नीति ब्यौरा
पासवर्ड की सुविधा चालू है डिवाइसों के लिए पिन या पासवर्ड ज़रूरी है.
पासवर्ड की कम से कम लंबाई पासवर्ड के लिए ज़रूरी वर्णों की संख्या सेट करें. उदाहरण के लिए, पिन या पासवर्ड में कम से कम छह वर्ण होने चाहिए.
पासवर्ड में अक्षर और अंक, दोनों होने चाहिए पासवर्ड में अक्षरों और संख्याओं का कॉम्बिनेशन होना ज़रूरी है. इनमें सिंबल वाले वर्ण शामिल हो सकते हैं.
पासवर्ड मुश्किल होना चाहिए पासवर्ड में कम से कम एक अक्षर, एक अंक, और एक खास सिंबल होना चाहिए. इसे 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 में लॉन्च किया गया था.

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

ऊपर दी गई टेबल में बताई गई नीतियों के साथ-साथ, Device Administration API की मदद से ये काम भी किए जा सकते हैं:

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

सैंपल के तौर पर मिला ऐप्लिकेशन

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

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

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

पहली इमेज. सैंपल के तौर पर मिले ऐप्लिकेशन का स्क्रीनशॉट

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

सिस्टम एडमिन, Device Administration API का इस्तेमाल करके ऐसा ऐप्लिकेशन बना सकते हैं जो डिवाइस की सुरक्षा से जुड़ी नीति को रिमोट तौर पर या स्थानीय तौर पर लागू करता हो. इस सेक्शन में, डिवाइस एडमिन ऐप्लिकेशन बनाने के चरणों के बारे में बताया गया है.

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

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

  • 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 Developers गाइड देखें.

कोड लागू करना

Device Administration API में ये क्लास शामिल हैं:

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

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

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

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

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

Kotlin

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))
...
}

Java

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 इंटेंट ट्रिगर होता है. सैंपल के तौर पर मिले ऐप्लिकेशन में, ऐसा तब होता है, जब उपयोगकर्ता Enable Admin चेकबॉक्स पर क्लिक करता है.

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

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

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

Kotlin

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
}

Java

@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 कॉम्पोनेंट है) टारगेट नीति है. यह लाइन, इमेज 2 में दिखाए गए यूज़र इंटरफ़ेस को शुरू करती है. इससे उपयोगकर्ताओं को सिस्टम में डिवाइस एडमिन को जोड़ने का तरीका पता चलता है. इसके अलावा, उन्हें इसे अस्वीकार करने की अनुमति भी मिलती है.

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

Kotlin

private lateinit var dpm: DevicePolicyManager
...
private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)

Java

DevicePolicyManager dpm;
...
private boolean isActiveAdmin() {
    return dpm.isAdminActive(deviceAdminSample);
}

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

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

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

Kotlin

dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

Java

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

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

पासवर्ड से जुड़ी नीतियां सेट करना

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

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

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

Kotlin

Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent ->
    startActivity(intent)
}

Java

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
इस नीति के तहत, पासवर्ड के लिए कोई शर्त नहीं है.

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

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
पासवर्ड से जुड़ी ज़रूरी शर्तें सेट करना

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

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

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwMinUppercase = 2
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)

Java

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

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

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwLength: Int = ...
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwLength;
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
गलत पासवर्ड डालने की ज़्यादा से ज़्यादा संख्या सेट करना

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

Kotlin

val dPM:DevicePolicyManager
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val maxFailedPw: Int = ...
...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int maxFailedPw;
 ...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
पासवर्ड की समयसीमा खत्म होने का टाइम आउट सेट करना

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

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwExpiration: Long = ...
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
long pwExpiration;
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
पुराने पासवर्ड इस्तेमाल करने पर पाबंदी लगाना

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

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

Kotlin

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

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwHistoryLength = 5;
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);

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

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

Kotlin

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

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
long timeMs = 1000L*Long.parseLong(timeout.getText().toString());
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);

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

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.lockNow()

Java

DevicePolicyManager dpm;
dpm.lockNow();

डेटा मिटाना

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

डेटा मिटाने के लिए, यह तरीका अपनाएं:

Kotlin

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

Java

DevicePolicyManager dpm;
dpm.wipeData(0);

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

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

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

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

Kotlin

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

Java

private CheckBoxPreference disableCameraCheckbox;
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());

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

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

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

Kotlin

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

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setStorageEncryption(deviceAdminSample, true);

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

कुछ और कोड सैंपल

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