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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

नीतियां

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ध्यान दें कि:

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

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

मेनिफ़ेस्ट फ़ाइल के बारे में ज़्यादा जानने के लिए, Android Developers Guide देखें.

कोड लागू करना

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

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

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

DeviceAdminReceiver की सबक्लास बनाना

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

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

Kotlin

class DeviceAdminSample : DeviceAdminReceiver() {

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

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

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

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

    override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) =
            showToast(context, context.getString(R.string.admin_receiver_status_pw_changed))
...
}

Java

public class DeviceAdminSample extends DeviceAdminReceiver {

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

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

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

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

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

ऐप्लिकेशन चालू करना

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

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

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

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

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

Kotlin

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

Java

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

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

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

Kotlin

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

Java

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

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

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

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

Kotlin

dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

Java

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

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

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

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

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

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

Kotlin

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

Java

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

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

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

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

Kotlin

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

Java

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

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

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

Kotlin

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

Java

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

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

Kotlin

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

Java

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

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

Kotlin

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

Java

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

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

Kotlin

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

Java

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

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

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

Kotlin

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

Java

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

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

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

Kotlin

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

Java

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

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

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.lockNow()

Java

DevicePolicyManager dpm;
dpm.lockNow();

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

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

डेटा को इस तरह वाइप करें:

Kotlin

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

Java

DevicePolicyManager dpm;
dpm.wipeData(0);

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

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

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

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

Kotlin

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

Java

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

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

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

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

Kotlin

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

Java

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

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

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

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