Android प्लैटफ़ॉर्म, डिवाइसों को ऑफ़िस प्रोफ़ाइलें (कभी-कभी इन्हें मैनेज की जा रही प्रोफ़ाइल भी कहा जाता है). वर्क प्रोफ़ाइल को कंट्रोल किया जाता है कोई आईटी एडमिन होता है और उसके लिए उपलब्ध फ़ंक्शन, उपयोगकर्ता की प्राइमरी प्रोफ़ाइल के काम करने के तरीके से मेल खाता है. इससे संगठनों को यह कंट्रोल करने में मदद मिलती है कि उपयोगकर्ता के डिवाइस पर कंपनी के खास ऐप्लिकेशन और डेटा चलने पर, साथ ही, उपयोगकर्ताओं को उनके निजी ऐप्लिकेशन और प्रोफ़ाइल का इस्तेमाल करने की अनुमति देंगे.
इस लेसन में आपको ऐप्लिकेशन में बदलाव करने का तरीका बताया गया है, ताकि वह काम करे और वर्क प्रोफ़ाइल वाले डिवाइस पर भरोसेमंद तरीके से काम कर सकते हैं. आपको कुछ करने की ज़रूरत नहीं है के अलावा, ऐप्लिकेशन डेवलप करने के सामान्य तरीक़ों के बारे में भी बताएँगे. हालांकि, इनमें से कुछ सबसे सही खास तौर पर, उन डिवाइसों पर काम करने के तरीके अहम हो जाते हैं जिन पर वर्क प्रोफ़ाइल बनाई जाती है. यह दस्तावेज़ उन समस्याओं को हाइलाइट करता है जिनके बारे में आपको जानकारी होनी चाहिए.
खास जानकारी
उपयोगकर्ता अक्सर अपने निजी डिवाइसों का इस्तेमाल, एंटरप्राइज़ सेटिंग के लिए करना चाहते हैं. यह स्थिति की वजह से संगठनों को किसी दुविधा का सामना करना पड़ सकता है. उपयोगकर्ता अपनी सुविधा का इस्तेमाल कर सकता है या नहीं संगठन को चिंता करनी होगी कि (जैसे, कर्मचारी) ईमेल और संपर्क) ऐसे डिवाइस पर मौजूद होते हैं जिसे संगठन कंट्रोल नहीं करता.
इस समस्या से निपटने के लिए, Android 5.0 (एपीआई लेवल 21) की मदद से संगठन वर्क प्रोफ़ाइल सेट अप की जा सकती हैं. अगर किसी डिवाइस की वर्क प्रोफ़ाइल है, तो सेटिंग, आईटी एडमिन के कंट्रोल में होती हैं. कॉन्टेंट बनाने आईटी एडमिन यह तय कर सकता है कि उस प्रोफ़ाइल के लिए कौनसे ऐप्लिकेशन को अनुमति दी जाए. साथ ही, कंट्रोल कर सकते हैं कि प्रोफ़ाइल में डिवाइस की कौनसी सुविधाएं उपलब्ध हों.
अगर किसी डिवाइस की वर्क प्रोफ़ाइल है, तो ऐप्लिकेशन पर असर पड़ सकता है डिवाइस पर चल रहा हो, भले ही ऐप्लिकेशन किसी भी प्रोफ़ाइल के अंतर्गत चल रहा हो:
- डिफ़ॉल्ट रूप से, ज़्यादातर इंटेंट एक प्रोफ़ाइल से दूसरी प्रोफ़ाइल पर नहीं जाते. अगर कोई प्रोफ़ाइल पर चलने वाला ऐप्लिकेशन किसी इंटेंट को सक्रिय करता है, इस पर इंटेंट के लिए कोई हैंडलर नहीं है उस प्रोफ़ाइल का उपयोग कर रहे हों और इस इंटेंट को किसी अन्य प्रोफ़ाइल प्रोफ़ाइल पर लगी पाबंदियों की वजह से, अनुरोध पूरा नहीं हो पाता है और ऐप्लिकेशन बंद हो सकता है अचानक.
- प्रोफ़ाइल का आईटी एडमिन, यह तय कर सकता है कि वर्क प्रोफ़ाइल. इस प्रतिबंध के कारण भी कोई हैंडलर नहीं रहेगा वर्क प्रोफ़ाइल पर कुछ सामान्य उद्देश्यों को पूरा करने के लिए.
- निजी और वर्क प्रोफ़ाइल में अलग-अलग स्टोरेज एरिया होता है, इसलिए एक प्रोफ़ाइल पर मान्य फ़ाइल यूआरआई दूसरी प्रोफ़ाइल पर मान्य नहीं है. कोई भी एक प्रोफ़ाइल पर ट्रिगर किया गया इंटेंट, दूसरी प्रोफ़ाइल पर हैंडल किया जा सकता है (प्रोफ़ाइल के आधार पर सेटिंग), इसलिए इंटेंट में फ़ाइल यूआरआई अटैच करना सुरक्षित नहीं है.
पूरे न हो पाने वाले इंटेंट रोकें
वर्क प्रोफ़ाइल वाले डिवाइस पर, इंटेंट के लिए पाबंदियां हैं एक प्रोफ़ाइल से दूसरी प्रोफ़ाइल पर जा सकते हैं. ज़्यादातर मामलों में, जब कोई इंटेंट सक्रिय होता है बंद है, तो इसे उसी प्रोफ़ाइल पर हैंडल किया जाता है जहां इसे ट्रिगर किया जाता है. अगर कोई हैंडलर न हो उस प्रोफ़ाइल पर इंटेंट के लिए, इंटेंट को हैंडल नहीं किया जाता है और ऐप्लिकेशन चलाने से वह अचानक बंद हो सकता है—भले ही, इंटेंट डालें.
प्रोफ़ाइल का एडमिन यह चुन सकता है कि इंटेंट को एक प्रोफ़ाइल से दूसरी प्रोफ़ाइल पर जाने की अनुमति है. आईटी एडमिन, इस फ़ैसले के बारे में, आपको अपनी ओर से पहले से यह जान लेना चाहिए कि किन मकसदों को सीमा पार करने की अनुमति है. कॉन्टेंट बनाने आईटी एडमिन इस नीति को सेट करता है और इसमें कभी भी बदलाव किया जा सकता है.
इससे पहले कि आपका ऐप्लिकेशन कोई गतिविधि शुरू करे, आपको यह पुष्टि करनी होगी कि
सही रिज़ॉल्यूशन. आपने लोगों तक पहुंचाया मुफ़्त में
यह पुष्टि कर सकते हैं कि Intent.resolveActivity()
पर कॉल करके समस्या का समाधान किया जा सकता है. अगर कोई
इंटेंट को हल करने का तरीका, यह तरीका रिटर्न करता है
null
. अगर यह तरीका शून्य के अलावा कोई वैल्यू नहीं दिखाता है, तो
मकसद का समाधान करते हैं और इस इंटेंट को बंद करना सुरक्षित है. इस मामले में,
इंटेंट के दूसरे विकल्प को भी हल किया जा सकता है
क्योंकि मौजूदा प्रोफ़ाइल पर एक हैंडलर है या इंटेंट
को दूसरी प्रोफ़ाइल पर हैंडलर पर जाने की अनुमति है. (इसके बारे में ज़्यादा जानकारी पाने के लिए
इंटेंट को हल करने के बारे में ज़्यादा जानने के लिए, सामान्य इंटेंट देखें.)
उदाहरण के लिए, अगर आपके ऐप्लिकेशन को टाइमर सेट करने की ज़रूरत है, तो उसे यह देखना होगा कि
ACTION_SET_TIMER
इंटेंट के लिए मान्य हैंडलर मौजूद है. अगर ऐप्लिकेशन ठीक नहीं हो पाता है
इंटेंट नहीं है, तो उस पर उचित कार्रवाई की जानी चाहिए (जैसे गड़बड़ी दिखाना)
मैसेज).
Kotlin
fun startTimer(message: String, seconds: Int) { // Build the "set timer" intent val timerIntent = Intent(AlarmClock.ACTION_SET_TIMER).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_LENGTH, seconds) putExtra(AlarmClock.EXTRA_SKIP_UI, true) } // Check if there's a handler for the intent if (timerIntent.resolveActivity(packageManager) == null) { // Can't resolve the intent! Fail this operation cleanly // (perhaps by showing an error message) } else { // Intent resolves, it's safe to fire it off startActivity(timerIntent) } }
Java
public void startTimer(String message, int seconds) { // Build the "set timer" intent Intent timerIntent = new Intent(AlarmClock.ACTION_SET_TIMER) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_LENGTH, seconds) .putExtra(AlarmClock.EXTRA_SKIP_UI, true); // Check if there's a handler for the intent if (timerIntent.resolveActivity(getPackageManager()) == null) { // Can't resolve the intent! Fail this operation cleanly // (perhaps by showing an error message) } else { // Intent resolves, it's safe to fire it off startActivity(timerIntent); } }
अलग-अलग प्रोफ़ाइल में फ़ाइलें शेयर करें
कभी-कभी किसी ऐप्लिकेशन को अन्य ऐप्लिकेशन को अपनी फ़ाइलों का ऐक्सेस देने की ज़रूरत होती है. उदाहरण के लिए, ऐसा हो सकता है कि कोई इमेज गैलरी ऐप्लिकेशन, इमेज के साथ अपनी इमेज शेयर करना चाहे एडिटर. आम तौर पर फ़ाइल शेयर करने के दो तरीके हैं: file यूआरआई या कॉन्टेंट यूआरआई.
फ़ाइल का यूआरआई, file:
प्रीफ़िक्स से शुरू होता है. इसके बाद,
डिवाइस के स्टोरेज में फ़ाइल का ऐब्सलूट पाथ. हालांकि, क्योंकि
वर्क प्रोफ़ाइल और निजी प्रोफ़ाइल, अलग-अलग स्टोरेज एरिया, फ़ाइल यूआरआई का इस्तेमाल करते हैं
जो एक प्रोफ़ाइल पर मान्य है, दूसरी प्रोफ़ाइल पर मान्य नहीं है. यह स्थिति
इसका मतलब है कि अगर
किसी इंटेंट में फ़ाइल यूआरआई अटैच करें और इंटेंट को दूसरी प्रोफ़ाइल पर हैंडल किया जाता है,
हैंडलर फ़ाइल ऐक्सेस नहीं कर पा रहा है.
इसके बजाय, आपको कॉन्टेंट यूआरआई के साथ फ़ाइलें शेयर करनी चाहिए. कॉन्टेंट यूआरआई
फ़ाइल को ज़्यादा सुरक्षित और शेयर किए जा सकने वाले तरीके से पहचान सकते हैं. कॉन्टेंट यूआरआई में यह शामिल है
फ़ाइल पाथ, लेकिन फ़ाइल उपलब्ध कराने वाली संस्था का नाम और आईडी नंबर भी
फ़ाइल की पहचान कर रहा है. किसी भी फ़ाइल के लिए Content ID जनरेट किया जा सकता है. इसके लिए,
FileProvider
. इसके बाद, उस कॉन्टेंट को शेयर किया जा सकता है
अन्य ऐप्लिकेशन के साथ आईडी (यहां तक कि अन्य प्रोफ़ाइल पर भी). पाने वाला इनका इस्तेमाल कर सकता है:
Content ID का इस्तेमाल करें.
उदाहरण के लिए, यहां बताया गया है कि आपको किसी खास फ़ाइल का कॉन्टेंट यूआरआई कैसे मिलेगा यूआरआई:
Kotlin
// Open File object from its file URI val fileToShare = File(fileUriToShare) val contentUriToShare: Uri = FileProvider.getUriForFile( context, "com.example.myapp.fileprovider", fileToShare )
Java
// Open File object from its file URI File fileToShare = new File(fileUriToShare); Uri contentUriToShare = FileProvider.getUriForFile(getContext(), "com.example.myapp.fileprovider", fileToShare);
getUriForFile()
तरीके को कॉल करने पर,
आपको फ़ाइल देने वाले का अधिकार शामिल करना होगा (इस उदाहरण में,
"com.example.myapp.fileprovider"
), जो इसमें बताया गया है
<provider>
ऐप्लिकेशन मेनिफ़ेस्ट के एलिमेंट में पूरी तरह से शामिल नहीं है.
सामग्री यूआरआई के साथ फ़ाइलों को शेयर करने के बारे में ज़्यादा जानकारी के लिए, देखें
शेयर करना
Files.
सूचनाएं सुनें
ऐप्लिकेशन आम तौर पर,
NotificationListenerService
सब-क्लास
सूचनाओं में होने वाले बदलावों के बारे में, सिस्टम से कॉलबैक पाएं. इस सुविधा वाले डिवाइस
वर्क प्रोफ़ाइल से NotificationListenerService
के काम करने के तरीके पर असर पड़ सकता है
को कैसे ट्रैक करें.
वर्क प्रोफ़ाइल में
किसी ऐप्लिकेशन से NotificationListenerService
का इस्तेमाल नहीं किया जा सकता
काम नहीं करता है. जब आपका ऐप्लिकेशन किसी वर्क प्रोफ़ाइल में चल रहा होता है, तो
सिस्टम आपके ऐप्लिकेशन के NotificationListenerService
को अनदेखा कर देता है. हालांकि,
निजी प्रोफ़ाइल में चलने वाले ऐप्लिकेशन, सूचनाएँ सुन सकते हैं.
निजी प्रोफ़ाइल में
जब आपका ऐप्लिकेशन निजी प्रोफ़ाइल में चलता है, तो हो सकता है कि आपको सूचनाएं न मिलें
वर्क प्रोफ़ाइल में चल रहे ऐप्लिकेशन के लिए. डिफ़ॉल्ट रूप से, सभी निजी प्रोफ़ाइल ऐप्लिकेशन
कॉलबैक मिल सकते हैं, लेकिन आईटी एडमिन एक या इससे ज़्यादा निजी प्रोफ़ाइल को अनुमति वाली सूची में जोड़ सकता है
ऐसे ऐप्लिकेशन जिनके लिए वे सूचनाओं में होने वाले बदलावों को सुनने की अनुमति देते हैं. इसके बाद, सिस्टम ब्लॉक कर देता है
ऐसे ऐप्लिकेशन जो अनुमति वाली सूची में शामिल नहीं हैं. Android 8.0 (एपीआई लेवल 26) या इसके बाद के वर्शन में, डिवाइस से जुड़ी नीति
वर्क प्रोफ़ाइल को मैनेज करने वाला कंट्रोलर (डीपीसी) आपके ऐप्लिकेशन को सुनने से रोक सकता है
DevicePolicyManager
का इस्तेमाल करके वर्क प्रोफ़ाइल की सूचनाओं को
तरीका
setPermittedCrossProfileNotificationListeners()
.
निजी प्रोफ़ाइल में पोस्ट की गई सूचनाओं के लिए, आपके ऐप्लिकेशन को अब भी कॉलबैक मिलते हैं
प्रोफ़ाइल.
यह जांचना कि आपका ऐप्लिकेशन, वर्क प्रोफ़ाइलों के साथ काम करता है या नहीं
आपको वर्क-प्रोफ़ाइल एनवायरमेंट में अपने ऐप्लिकेशन की जांच करनी चाहिए, ताकि उन समस्याओं को पकड़ें जिनकी वजह से आपका ऐप्लिकेशन ऐसे डिवाइस पर फ़ेल हो सकता है जिसमें वर्क प्रोफ़ाइल. खास तौर पर, वर्क-प्रोफ़ाइल डिवाइस पर जांच करना अच्छा है यह सुनिश्चित करने का एक तरीका है कि आपका ऐप्लिकेशन इंटेंट को सही तरीके से हैंडल करता है: ऐसे इंटेंट को सक्रिय नहीं करना जो को हैंडल नहीं किया जा सकता, ऐसे यूआरआई को अटैच नहीं किया जाता जो क्रॉस-प्रोफ़ाइल काम नहीं करते हैं, और इसलिए चालू करें.
हमने एक सैंपल ऐप्लिकेशन, TestDPC उपलब्ध कराया है, इसका इस्तेमाल करके, ऐसे Android डिवाइस पर वर्क प्रोफ़ाइल सेट अप की जा सकती है जो Android 5.0 (एपीआई लेवल 21) और इसके बाद के वर्शन. यह ऐप्लिकेशन, इसे आज़माने का आसान तरीका है आपका ऐप्लिकेशन वर्क-प्रोफ़ाइल वाले एनवायरमेंट में हो. आप इन कामों के लिए भी इस ऐप्लिकेशन का इस्तेमाल कर सकते हैं वर्क प्रोफ़ाइल को इस तरह से कॉन्फ़िगर करें:
- तय करें कि मैनेज किए जा रहे ऐप्लिकेशन पर कौनसे डिफ़ॉल्ट ऐप्लिकेशन उपलब्ध हैं प्रोफ़ाइल
- कॉन्फ़िगर करें कि किन इंटेंट को एक प्रोफ़ाइल से अन्य
अगर आपने यूएसबी केबल के ज़रिए, किसी ऐसे डिवाइस पर मैन्युअल तरीके से कोई ऐप्लिकेशन इंस्टॉल किया है जिसमें वर्क प्रोफ़ाइल, ऐप्लिकेशन को निजी और वर्क प्रोफ़ाइल, दोनों पर इंस्टॉल किया गया है प्रोफ़ाइल. ऐप्लिकेशन इंस्टॉल करने के बाद, आप ये शर्तें पूरी होती हैं:
- अगर किसी इंटेंट को आम तौर पर किसी डिफ़ॉल्ट ऐप्लिकेशन से हैंडल किया जाता है (उदाहरण के लिए, कैमरा ऐप्लिकेशन) से जुड़ा कोई विकल्प चुनें, तो वर्क प्रोफ़ाइल पर उस डिफ़ॉल्ट ऐप्लिकेशन को बंद करके देखें और यह पुष्टि करें कि ऐप्लिकेशन इसे सही तरीके से मैनेज करता है.
- अगर कोई ऐसा इंटेंट ट्रिगर किया जाता है जो यह उम्मीद करता है कि उसे किसी अन्य ऐप्लिकेशन से हैंडल किया जाएगा, तो
उस इंटेंट की अनुमति को एक प्रोफ़ाइल से
कोई दूसरा. पुष्टि करें कि ऐप्लिकेशन दोनों ही स्थितियों में सही तरीके से काम करता हो. अगर
इंटेंट को एक प्रोफ़ाइल से दूसरी प्रोफ़ाइल पर जाने की अनुमति नहीं है. ऐप्लिकेशन के काम करने के तरीके की पुष्टि करें
जब ऐप्लिकेशन की प्रोफ़ाइल पर सही हैंडलर मौजूद हो और जब मौजूद न हो.
उदाहरण के लिए, अगर आपका ऐप्लिकेशन किसी मैप से जुड़े इंटेंट को ट्रिगर करता है, तो इनमें से हर एक चीज़ आज़माएं
स्थितियां:
- डिवाइस से मैप इंटेंट को एक प्रोफ़ाइल से दूसरी प्रोफ़ाइल पर क्रॉस किया जा सकता है और दूसरी प्रोफ़ाइल पर सही हैंडलर मौजूद है (जिस प्रोफ़ाइल में ऐप्लिकेशन काम नहीं करता पर चल रहा है)
- इस डिवाइस में मैप इंटेंट को प्रोफ़ाइलों के बीच आने-जाने की अनुमति नहीं है, लेकिन ऐप्लिकेशन की प्रोफ़ाइल पर सही हैंडलर है
- यह डिवाइस मैप इंटेंट को प्रोफ़ाइलों के बीच आने-जाने की अनुमति नहीं देता है डिवाइस की प्रोफ़ाइल पर मैप इंटेंट के लिए सही हैंडलर नहीं है
- किसी इंटेंट में कॉन्टेंट अटैच करने पर, पुष्टि करें कि इंटेंट सही तरीके से काम कर रहा हो दोनों, जब उसे ऐप्लिकेशन की प्रोफ़ाइल पर हैंडल किया जाता है और जब यह प्रोफ़ाइल.
वर्क प्रोफ़ाइल पर टेस्ट करें: सलाह और सुझाव
यहां कुछ ऐसी तरकीबें दी गई हैं जो आपको वर्क-प्रोफ़ाइल डिवाइस है.
- जैसा कि बताया गया है, जब वर्क-प्रोफ़ाइल डिवाइस पर किसी ऐप्लिकेशन को साइड-लोड किया जाता है, तो दोनों प्रोफ़ाइल पर इंस्टॉल किया जाएगा. अगर आप चाहें, तो ऐप्लिकेशन को एक प्रोफ़ाइल से मिटाया जा सकता है और बाकी बातचीत पर छोड़ दें.
- Android डीबग ब्रिज (adb) शेल में मौजूद ज़्यादातर गतिविधि मैनेजर के निर्देश
--user
फ़्लैग का इस्तेमाल किया जा सकता है. इससे, यह तय किया जा सकता है कि किस उपयोगकर्ता को चलाया जाए जैसे. किसी उपयोगकर्ता की जानकारी देकर, यह चुना जा सकता है कि उसे मैनेज नहीं किए जा रहे मुख्य उपयोगकर्ता के तौर पर चलाना है या नहीं या वर्क प्रोफ़ाइल. ज़्यादा जानकारी के लिए, ADB देखें शेल वाले निर्देश. - किसी डिवाइस पर सक्रिय उपयोगकर्ता खोजने के लिए, adb पैकेज मैनेजर के
list users
निर्देश. आउटपुट स्ट्रिंग में पहली संख्या यूज़र आईडी, जिसका इस्तेमाल--user
फ़्लैग के साथ किया जा सकता है. ज़्यादा के लिए ADB शेल निर्देश.
उदाहरण के लिए, किसी डिवाइस पर उपयोगकर्ताओं को ढूंढने के लिए, आपको यह निर्देश चलाना होगा:
$ adb shell pm list users UserInfo{0:Drew:13} running UserInfo{10:Work profile:30} running
इस मामले में, प्राइमरी यूज़र ("Drew") का यूज़र आईडी 0 है और वर्क प्रोफ़ाइल में उपयोगकर्ता आईडी 10 है. वर्क प्रोफ़ाइल में किसी ऐप्लिकेशन को चलाने के लिए, इस तरह के निर्देश का इस्तेमाल करेगा:
$ adb shell am start --user 10 \ -n "com.example.myapp/com.example.myapp.testactivity" \ -a android.intent.action.MAIN -c android.intent.category.LAUNCHER