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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

नीतियां

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

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

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

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

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

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

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

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

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

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

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

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

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