व्यवहार में बदलाव: Android 13 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन

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

काम करने के तरीके में हुए उन बदलावों की सूची भी देखना न भूलें जिनका असर Android 13 पर चल रहे सभी ऐप्लिकेशन पर पड़ता है.

निजता

सूचना की अनुमति से, फ़ोरग्राउंड सेवा के दिखने पर असर पड़ता है

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

आस-पास मौजूद वाई-फ़ाई डिवाइसों के लिए, रनटाइम की नई अनुमति

Android के पिछले वर्शन पर, वाई-फ़ाई के सामान्य इस्तेमाल के कई उदाहरणों को पूरा करने के लिए, उपयोगकर्ता को आपके ऐप्लिकेशन को ACCESS_FINE_LOCATION की अनुमति देनी होगी.

उपयोगकर्ताओं के लिए, जगह की जानकारी की अनुमतियों को वाई-फ़ाई की सुविधा से जोड़ना मुश्किल होता है. इसलिए, Android 13 (एपीआई लेवल 33) में, NEARBY_DEVICES अनुमति ग्रुप में रनटाइम की अनुमति जोड़ी गई है. यह अनुमति, उन ऐप्लिकेशन के लिए है जो वाई-फ़ाई की मदद से, आस-पास मौजूद ऐक्सेस पॉइंट से डिवाइस के कनेक्शन को मैनेज करते हैं. NEARBY_WIFI_DEVICES अनुमति, वाई-फ़ाई के इस्तेमाल के उदाहरणों को पूरा करती है. जैसे:

  • आस-पास मौजूद डिवाइसों को ढूंढना या उनसे कनेक्ट करना. जैसे, प्रिंटर या मीडिया कास्ट करने वाले डिवाइस. इस वर्कफ़्लो की मदद से, आपके ऐप्लिकेशन को ये काम करने की अनुमति मिलती है:
    • बीएलई के ज़रिए, एपी की जानकारी को बैंड के बाहर पाना.
    • वाई-फ़ाई अवेयर की मदद से डिवाइसों को ढूंढें और उनसे कनेक्ट करें. साथ ही, सिर्फ़ सीमित दायरे में इस्तेमाल होने वाले हॉटस्पॉट का इस्तेमाल करके कनेक्ट करें.
    • Wi-Fi Direct की मदद से, डिवाइसों को ढूंढें और उनसे कनेक्ट करें.
  • किसी जाने-पहचाने SSID से कनेक्ट करें. जैसे, कार या स्मार्ट होम डिवाइस.
  • सिर्फ़ सीमित दायरे में इस्तेमाल होने वाला हॉटस्पॉट चालू करें.
  • आस-पास मौजूद Wi-Fi Aware डिवाइसों की रेंज.

जब तक आपका ऐप्लिकेशन वाई-फ़ाई एपीआई से जगह की जानकारी नहीं पाता, तब तक Android 13 या उसके बाद के वर्शन को टारगेट करने और वाई-फ़ाई एपीआई का इस्तेमाल करने पर, ACCESS_FINE_LOCATION के बजाय NEARBY_WIFI_DEVICES का अनुरोध करें. NEARBY_WIFI_DEVICES अनुमति का एलान करते समय, साफ़ तौर पर बताएं कि आपका ऐप्लिकेशन, वाई-फ़ाई एपीआई से कभी भी जगह की जानकारी नहीं लेता. ऐसा करने के लिए, android:usesPermissionFlags एट्रिब्यूट को neverForLocation पर सेट करें. यह प्रोसेस, Android 12 (एपीआई लेवल 31) और उसके बाद के वर्शन में, यह एलान करने के लिए की जाने वाली प्रोसेस से मिलती-जुलती है कि ब्लूटूथ डिवाइस की जानकारी का इस्तेमाल, जगह की जानकारी के लिए कभी नहीं किया जाता.

आस-पास मौजूद वाई-फ़ाई डिवाइसों को ऐक्सेस करने की अनुमति का अनुरोध करने के तरीके के बारे में ज़्यादा जानें.

मीडिया के लिए अलग-अलग अनुमतियां

डायलॉग बॉक्स के दो बटन, ऊपर से नीचे की ओर, अनुमति दें और अनुमति न दें
पहला डायग्राम. सिस्टम की अनुमतियों का डायलॉग, जो उपयोगकर्ता को तब दिखता है, जब आप READ_MEDIA_AUDIO अनुमति
का अनुरोध करते हैं.

अगर आपका ऐप्लिकेशन Android 13 या उसके बाद के वर्शन को टारगेट करता है और उसे दूसरे ऐप्लिकेशन की बनाई गई मीडिया फ़ाइलों को ऐक्सेस करना है, तो आपको READ_EXTERNAL_STORAGE अनुमति के बजाय, मीडिया से जुड़ी इनमें से एक या उससे ज़्यादा अनुमतियों का अनुरोध करना होगा:

मीडिया का टाइप अनुमति का अनुरोध
इमेज और फ़ोटो READ_MEDIA_IMAGES
वीडियो READ_MEDIA_VIDEO
ऑडियो फ़ाइलें READ_MEDIA_AUDIO

किसी दूसरे ऐप्लिकेशन की मीडिया फ़ाइलों को ऐक्सेस करने से पहले, पुष्टि करें कि उपयोगकर्ता ने आपके ऐप्लिकेशन को मीडिया से जुड़ी ज़रूरी अनुमतियां दी हैं.

पहली इमेज में, READ_MEDIA_AUDIO अनुमति का अनुरोध करने वाला ऐप्लिकेशन दिखाया गया है.

अगर एक ही समय पर READ_MEDIA_IMAGES और READ_MEDIA_VIDEO, दोनों अनुमतियों का अनुरोध किया जाता है, तो सिस्टम की अनुमति वाला सिर्फ़ एक डायलॉग दिखता है.

अगर आपके ऐप्लिकेशन को पहले READ_EXTERNAL_STORAGE अनुमति दी गई थी, तो ऐप्लिकेशन को अपग्रेड करने पर, अनुरोध की गई READ_MEDIA_* अनुमतियां अपने-आप मिल जाती हैं. अपग्रेड की गई अनुमतियों की समीक्षा करने के लिए, ADB के इस निर्देश का इस्तेमाल किया जा सकता है:

adb shell cmd appops get --uid PACKAGE_NAME

बैकग्राउंड में बॉडी सेंसर का इस्तेमाल करने के लिए, नई अनुमति की ज़रूरत है

Android 13 में, बॉडी सेंसर के डेटा को "इस्तेमाल के दौरान" ऐक्सेस करने का कॉन्सेप्ट जोड़ा गया है. इन सेंसर से मिली जानकारी में, धड़कन की दर, शरीर का तापमान, और खून में ऑक्सीजन का प्रतिशत शामिल होता है. ऐक्सेस करने का यह मॉडल, Android 10 (एपीआई लेवल 29) में जगह की जानकारी के लिए सिस्टम में जोड़े गए मॉडल से काफ़ी मिलता-जुलता है.

अगर आपका ऐप्लिकेशन Android 13 को टारगेट करता है और उसे बैकग्राउंड में चलने के दौरान, बॉडी सेंसर की जानकारी ऐक्सेस करने की ज़रूरत है, तो आपको मौजूदा BODY_SENSORS अनुमति के अलावा, नई BODY_SENSORS_BACKGROUND अनुमति का एलान करना होगा.

परफ़ॉर्मेंस और बैटरी

बैटरी संसाधन का इस्तेमाल

अगर उपयोगकर्ता आपके ऐप्लिकेशन को Android 13 को टारगेट करते समय, बैटरी के बैकग्राउंड में इस्तेमाल के लिए "पाबंदी वाली" स्थिति में डालता है, तो सिस्टम तब तक BOOT_COMPLETED ब्रॉडकास्ट या LOCKED_BOOT_COMPLETED ब्रॉडकास्ट डिलीवर नहीं करता, जब तक कि ऐप्लिकेशन को किसी दूसरी वजह से शुरू नहीं किया जाता.

उपयोगकर्ता अनुभव

PlaybackState से मिले मीडिया कंट्रोल

Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, सिस्टम PlaybackState ऐक्शन से मीडिया कंट्रोल पाता है. इससे, सिस्टम को कंट्रोल का बेहतर सेट दिखाने में मदद मिलती है. यह कंट्रोल, फ़ोन और टैबलेट डिवाइसों के बीच तकनीकी तौर पर एक जैसा होता है. साथ ही, यह Android Auto और Android TV जैसे अन्य Android प्लैटफ़ॉर्म पर मीडिया कंट्रोल के रेंडर होने के तरीके के हिसाब से भी होता है.

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

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

Android 13 से पहले, सिस्टम MediaStyle सूचना में मौजूद पांच कार्रवाइयों को उसी क्रम में दिखाता था जिस क्रम में उन्हें जोड़ा गया था. कॉम्पैक्ट मोड में, setShowActionsInCompactView() के साथ बताई गई तीन कार्रवाइयां दिखाई गईं. उदाहरण के लिए, छोटी हो गई क्विक सेटिंग में.

Android 13 से, सिस्टम PlaybackState के आधार पर ज़्यादा से ज़्यादा पांच ऐक्शन बटन दिखाता है. इस बारे में नीचे दी गई टेबल में बताया गया है. कॉम्पैक्ट मोड में, सिर्फ़ पहले तीन ऐक्शन स्लॉट दिखेंगे. Android 13 को टारगेट नहीं करने वाले ऐप्लिकेशन या उन ऐप्लिकेशन के लिए जिनमें PlaybackState शामिल नहीं है, सिस्टम MediaStyle सूचना में जोड़ी गई Action सूची के आधार पर कंट्रोल दिखाएगा. इस बारे में पिछले पैराग्राफ़ में बताया गया है.

स्लॉट कार्रवाई शर्तें
1 चलाएं PlaybackState की मौजूदा स्थिति इनमें से कोई एक है:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
लोडिंग स्पिनर PlaybackState की मौजूदा स्थिति इनमें से कोई एक है:
  • STATE_CONNECTING
  • STATE_BUFFERING
रोकें PlaybackState की मौजूदा स्थिति, इनमें से कोई नहीं है.
2 पीछे जाएं PlaybackState कार्रवाइयों में ACTION_SKIP_TO_PREVIOUS शामिल है.
पसंद के मुताबिक़ PlaybackState कार्रवाइयों में ACTION_SKIP_TO_PREVIOUS शामिल नहीं है और PlaybackState कस्टम ऐक्शन में ऐसा कस्टम ऐक्शन शामिल है जिसे अब तक नहीं डाला गया है.
कोई भी तार नहीं लगा है PlaybackState extras में, बटन SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV के लिए true बूलियन वैल्यू शामिल होती है.
3 अगला PlaybackState कार्रवाइयों में ACTION_SKIP_TO_NEXT शामिल है.
पसंद के मुताबिक़ PlaybackState कार्रवाइयों में ACTION_SKIP_TO_NEXT शामिल नहीं है और PlaybackState कस्टम ऐक्शन में ऐसा कस्टम ऐक्शन शामिल है जिसे अब तक नहीं डाला गया है.
कोई भी तार नहीं लगा है PlaybackState extras में, बटन SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT के लिए true बूलियन वैल्यू शामिल होती है.
4 पसंद के मुताबिक़ PlaybackState कस्टम ऐक्शन में एक कस्टम ऐक्शन शामिल होता है जिसे अब तक नहीं डाला गया है.
5 पसंद के मुताबिक़ PlaybackState कस्टम ऐक्शन में एक कस्टम ऐक्शन शामिल होता है जिसे अब तक नहीं डाला गया है.

कस्टम कार्रवाइयां उसी क्रम में दिखती हैं जिस क्रम में उन्हें PlaybackState में जोड़ा गया था.

वेबव्यू कॉन्टेंट पर, ऐप्लिकेशन की कलर थीम अपने-आप लागू होना

Android 13 (एपीआई लेवल 33) या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, setForceDark() तरीका काम नहीं करता. इसलिए, इस तरीके को इस्तेमाल करने पर कोई कार्रवाई नहीं की जाएगी.

इसके बजाय, वेबव्यू अब हमेशा ऐप्लिकेशन के थीम ऐट्रिब्यूट, isLightTheme के हिसाब से मीडिया क्वेरी prefers-color-scheme सेट करता है. दूसरे शब्दों में, अगर isLightTheme true है या इसकी वैल्यू नहीं दी गई है, तो prefers-color-scheme की वैल्यू light होगी. अगर isLightTheme की वैल्यू true नहीं है, तो prefers-color-scheme की वैल्यू dark होगी. इसका मतलब है कि अगर वेब कॉन्टेंट में लाइट या डार्क स्टाइल की सुविधा काम करती है, तो ऐप्लिकेशन की थीम से मैच करने के लिए, वेब कॉन्टेंट का लाइट या डार्क स्टाइल अपने-आप लागू हो जाता है.

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

अगर आपको अब भी अपने ऐप्लिकेशन की कलर थीम के व्यवहार को पसंद के मुताबिक बनाना है, तो इसके बजाय setAlgorithmicDarkeningAllowed() का इस्तेमाल करें. Android के पुराने वर्शन के साथ काम करने की सुविधा के लिए, हमारा सुझाव है कि आप AndroidX में, इसी तरह के setAlgorithmicDarkeningAllowed() तरीके का इस्तेमाल करें.

इस तरीके के दस्तावेज़ देखें और जानें कि आपके ऐप्लिकेशन के targetSdkVersion और थीम सेटिंग के आधार पर, आपके ऐप्लिकेशन में किस तरह का व्यवहार दिख सकता है.

कनेक्टिविटी

BluetoothAdapter#enable() और BluetoothAdapter#disable() अब काम नहीं करते

Android 13 (एपीआई लेवल 33) या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, BluetoothAdapter#enable() और BluetoothAdapter#disable() तरीके का इस्तेमाल नहीं किया जा सकता. ये हमेशा false दिखाते हैं.

इन बदलावों से ये ऐप्लिकेशन छूटे हुए हैं:

  • डिवाइस के मालिक के ऐप्लिकेशन
  • प्रोफ़ाइल के मालिक के ऐप्लिकेशन
  • सिस्टम ऐप्लिकेशन

Google Play सेवाएं

विज्ञापन आईडी के लिए अनुमति ज़रूरी है

Google Play services के विज्ञापन आईडी का इस्तेमाल करने वाले और Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन को, अपनी ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल में AD_ID सामान्य अनुमति का एलान करना होगा. इसके लिए, यह तरीका अपनाएं:

<manifest ...>
    <!-- Required only if your app targets Android 13 or higher. -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application ...>
        ...
    </application>
</manifest>

अगर आपका ऐप्लिकेशन Android 13 या उससे बाद के वर्शन को टारगेट करते समय, इस अनुमति का एलान नहीं करता है, तो विज्ञापन आईडी अपने-आप हट जाएगा और उसकी जगह पर कई ज़ीरो दिखेंगे.

अगर आपका ऐप्लिकेशन ऐसे SDK टूल का इस्तेमाल करता है जिनके लिए लाइब्रेरी मेनिफ़ेस्ट में AD_ID अनुमति की जानकारी दी जाती है, तो यह अनुमति डिफ़ॉल्ट रूप से आपके ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में मर्ज हो जाती है. इस मामले में, आपको अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में अनुमति का एलान करने की ज़रूरत नहीं है.

ज़्यादा जानने के लिए, Play Console के सहायता केंद्र में विज्ञापन आईडी देखें.

SDK टूल के अलावा अन्य चीज़ों पर लगी पाबंदियां अपडेट की गईं

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

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

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

Android के इस रिलीज़ में हुए बदलावों के बारे में ज़्यादा जानने के लिए, Android 13 में, एसडीके इंटरफ़ेस से जुड़ी पाबंदियों में हुए अपडेट देखें. आम तौर पर, SDK टूल के बाहर के इंटरफ़ेस के बारे में ज़्यादा जानने के लिए, SDK टूल के बाहर के इंटरफ़ेस पर पाबंदियां देखें.