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

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

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

यह दस्तावेज़ उन डेवलपर के लिए है जो Android पर चलने वाले डिवाइसों के लिए एंटरप्राइज़ समाधान डेवलप करना चाहते हैं. इस वीडियो में, डिवाइस एडमिन एपीआई की दी गई कई सुविधाओं के बारे में बताया गया है. इससे Android पर काम करने वाले कर्मचारियों के डिवाइसों को ज़्यादा सुरक्षित बनाया जा सकता है.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

नीतियां

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

टेबल 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 में लॉन्च किया गया था.

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

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

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

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

इस पेज पर दिए गए उदाहरण, डिवाइस एडमिनिस्ट्रेशन एपीआई के सैंपल पर आधारित हैं. यह 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 डेवलपर गाइड देखें.

कोड लागू करना

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

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

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

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

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

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

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

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);

स्टोरेज एन्क्रिप्शन की सुविधा चालू करने का पूरा उदाहरण देखने के लिए, डिवाइस एडमिनिस्ट्रेशन एपीआई का सैंपल देखें.

अन्य कोड सैंपल

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