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

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

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

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

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

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

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

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

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

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