Android 17 से, ऑडियो फ़्रेमवर्क, बैकग्राउंड में ऑडियो इंटरैक्शन पर पाबंदियां लगाता है. इनमें ऑडियो प्लेबैक, ऑडियो फ़ोकस के अनुरोध, और वॉल्यूम में बदलाव करने वाले एपीआई शामिल हैं. ऐसा इसलिए किया जाता है, ताकि यह पक्का किया जा सके कि ये बदलाव उपयोगकर्ता की अनुमति से ही शुरू किए जाएं.
Android 17 पर चलने वाले सभी ऐप्लिकेशन में, बैकग्राउंड में ऑडियो इंटरैक्शन की सुविधा के लिए, कोई गतिविधि दिखनी चाहिए. इसके अलावा, ऐप्लिकेशन को SHORT_SERVICE टाइप की फ़ोरग्राउंड सेवा के तौर पर नहीं चलना चाहिए. यह शर्त, इस बात पर भी लागू होती है कि ऐप्लिकेशन, एपीआई लेवल 37 को टारगेट करता है या नहीं.
अगर कोई ऐप्लिकेशन, Android 17 (एपीआई लेवल 37) को टारगेट करता है, तो उस पर एक और पाबंदी लागू होती है. अगर ऐप्लिकेशन बैकग्राउंड में चल रहा है, तो उसे ऐसी
फ़ोरग्राउंड सेवा के तौर पर चलना होगा जिसमें 'इस्तेमाल के समय अनुमति दें' (डब्ल्यूआईयू) की सुविधा हो. (किसी फ़ोरग्राउंड सेवा को डब्ल्यूआईयू की सुविधा तब मिलती है, जब वह उपयोगकर्ता की शुरू की गई किसी कार्रवाई के जवाब में शुरू की जाती है या जब ऐप्लिकेशन उपयोगकर्ता को दिख रहा होता है.) हालांकि, अगर ऐप्लिकेशन को अलार्म की अनुमति मिली है और वह
USAGE_ALARM एट्रिब्यूट वाले ऑडियो स्ट्रीम में बदलाव कर रहा है, तो डब्ल्यूआईयू की सुविधा की ज़रूरत नहीं होती.
अगर ऐप्लिकेशन, मान्य लाइफ़साइकल में न होने पर, ऑडियो एपीआई को कॉल करने की कोशिश करता है, तो ऑडियो प्लेबैक और वॉल्यूम में बदलाव करने वाले एपीआई, कोई अपवाद या गड़बड़ी का मैसेज दिखाए बिना चुपचाप काम करना बंद कर देते हैं. ऑडियो फ़ोकस एपीआई, AUDIOFOCUS_REQUEST_FAILED के नतीजे वाले कोड के साथ काम करना बंद कर देता है.
हम यह बदलाव क्यों कर रहे हैं
इन पाबंदियों को लागू करने का मकसद, बैकग्राउंड में ऑडियो से जुड़ी ऐसी गड़बड़ियों को कम करना है जो अनजाने में होती हैं. कुछ उदाहरण ये हैं:
- फ़ोरग्राउंड सेवा के बिना ऑडियो चलाने वाले ऐप्लिकेशन को फ़्रीज़ किया जा सकता है. जब ऐप्लिकेशन को अनफ़्रीज़ किया जाता है, तो वह अचानक ऑडियो प्लेबैक फिर से शुरू कर देता है. ऐसा कुछ घंटों बाद भी हो सकता है.
- फ़ोरग्राउंड सेवा के बिना ऑडियो चलाने वाले ऐप्लिकेशन पर, अलग-अलग तरह की पाबंदियां लगाई जाती हैं. इससे ऑडियो की परफ़ॉर्मेंस खराब हो जाती है.
- प्लेबैक, ऐप्लिकेशन की लाइफ़साइकल से अलग हो जाता है. इससे प्लेबैक सेशन या फ़ोकस इवेंट लीक हो सकते हैं. ऐसे में, उपयोगकर्ता के पास प्लेबैक रोकने का कोई तरीका नहीं होता.
हम डेवलपर से अपने ऐप्लिकेशन की जांच करने और ऑडियो के इस्तेमाल के ऐसे मामलों के बारे में सुझाव/राय देने का अनुरोध करते हैं जिन पर इस बदलाव का बुरा असर पड़ा है. कृपया इस Android 17 के साथ काम करने में होने वाली समस्या के ट्रैकर का इस्तेमाल करके किसी भी समस्या की शिकायत करें.
बैकग्राउंड में ऑडियो के इस्तेमाल के ऐसे मामलों की पहचान करना जिन पर असर पड़ा है
ऑडियो प्लेबैक के लागू होने की प्रोसेस की ऑडिट करें और पता लगाएं कि आपका ऐप्लिकेशन, कुछ खास स्थितियों में भी बैकग्राउंड में ऑडियो इंटरैक्शन की सुविधा उपलब्ध कराता है या नहीं.
अगर आपका ऐप्लिकेशन, उपयोगकर्ता को दिखने वाली किसी गतिविधि को दिखाते समय ही ऑडियो चलाता है या ऑडियो एपीआई का इस्तेमाल करता है, तो उस पर इन बदलावों का कोई असर नहीं पड़ेगा. इसमें, Picture in Picture (PiP) मोड का इस्तेमाल करना भी शामिल है.
अगर आपका ऐप्लिकेशन, स्क्रीन बंद होने पर या जब आपकी गतिविधि नहीं दिख रही हो तब भी ऑडियो प्लेबैक जारी रखता है, तो उसे बैकग्राउंड में ऑडियो की सुविधा उपलब्ध कराने वाला ऐप्लिकेशन माना जाएगा. आम तौर पर, ऐसा संगीत स्ट्रीमिंग या पॉडकास्ट वाले ऐप्लिकेशन में देखा जाता है. ऐसे में, आपके ऐप्लिकेशन को नई ज़रूरी शर्तों को पूरा करना होगा.
बैकग्राउंड में ऑडियो के ऐसे मामले जिन पर असर पड़ने की संभावना है
अगर आपका ऐप्लिकेशन, ऑडियो इंटरैक्शन को जारी रखने के मॉडल का पालन नहीं करता है, तो हो सकता है कि आपके ऐप्लिकेशन की सुविधा को चुपचाप बंद कर दिया जाए. ऑडियो इंटरैक्शन, तब शुरू होता है, जब आपका ऐप्लिकेशन खुला हो या उपयोगकर्ता के किसी साफ़ तौर पर दिए गए ट्रिगर के जवाब में शुरू हो.
उदाहरण के लिए, अगर आपका ऐप्लिकेशन BOOT_COMPLETE के जवाब में कोई फ़ोरग्राउंड सेवा शुरू करता है और ऑडियो के साथ इंटरैक्ट करने की कोशिश करता है, तो उसे बंद कर दिया जाएगा.
असर को कम करने के लिए, बैकग्राउंड में ऑडियो के इस्तेमाल के सबसे सही तरीके
बैकग्राउंड में ऑडियो प्लेबैक को मैनेज करने के लिए, media3 Jetpack लाइब्रेरी के
MediaSessionServiceकॉम्पोनेंट का इस्तेमाल करें.ऐसा करने पर, लाइब्रेरी, प्लेबैक लाइफ़साइकल को मैनेज करने में मदद करती है. इसलिए, आपके ऐप्लिकेशन पर बैकग्राउंड को सुरक्षित बनाने से कोई असर नहीं पड़ेगा.
अगर media3 लाइब्रेरी का इस्तेमाल नहीं किया जा रहा है, तो आपको
mediaPlaybackएफ़जीएस को मैन्युअल तरीके से शुरू करना होगा. अगर बैकग्राउंड में ऑडियो चल सकता है, तो ऐप्लिकेशन के फ़ोरग्राउंड में होने पर ही, फ़ोरग्राउंड सेवा शुरू करें.उदाहरण के लिए, अगर आपका ऐप्लिकेशन, वीडियो स्ट्रीमिंग वाला ऐप्लिकेशन है, जो आम तौर पर सिर्फ़ फ़ोरग्राउंड में चलता है. हालांकि, इसमें स्क्रीन बंद होने पर भी वीडियो चलाने की सुविधा है, तो उपयोगकर्ता के शुरू किए गए प्लेबैक ट्रिगर के होने पर, आपके ऐप्लिकेशन को फ़ोरग्राउंड सेवा शुरू करनी चाहिए.
ऐसा करने से, यह पक्का होता है कि फ़ोरग्राउंड सेवा, डब्ल्यूआईयू की सुविधा के साथ शुरू हो.
mediaPlaybackएफ़जीएस को, 10 मिनट से कम समय के लिए होने वाली अस्थायी गड़बड़ियों के दौरान चालू रखें.अगर आपके ऐप्लिकेशन में कोई अस्थायी गड़बड़ी होती है, जैसे कि नेटवर्क गतिविधि की वजह से बफ़रिंग में समस्या या
AUDIOFOCUS_LOSS_TRANSIENTजैसी अस्थायी रुकावट, तो प्लेबैक जारी रहना चाहिए. इसलिए, आपका एफ़जीएस चालू रहना चाहिए.प्लेबैक खत्म होने पर, फ़ोरग्राउंड सेवा को बंद कर दें. साथ ही, प्लेबैक सिर्फ़ तब फिर से शुरू करें, जब उपयोगकर्ता साफ़ तौर पर प्लेबैक फिर से शुरू करे.
अगर प्लेबैक खत्म करने का कोई स्थायी सिग्नल मिलता है (उदाहरण के लिए, कॉन्टेंट पूरा हो गया है और ऑटो-प्ले की सुविधा चालू नहीं है,
AUDIOFOCUS_LOSS, यूएमओ से पॉज़ इवेंट या मीडिया कुंजी इवेंट) या कोई ऐसी गड़बड़ी होती है जिसे ठीक नहीं किया जा सकता, तो आपके ऐप्लिकेशन को ऑडियो इंटरैक्शन बंद कर देना चाहिए. साथ ही, फ़ोरग्राउंड सेवा को बंद कर देना चाहिए और मीडिया सेशन खत्म कर देना चाहिए. ऐसा करने से, उपयोगकर्ता की "बैकग्राउंड में ऑडियो इंटरैक्शन खत्म करने" की ज़रूरत पूरी होती है. ऐसा करने के बाद, आपके ऐप्लिकेशन के पास बैकग्राउंड में ऑडियो इंटरैक्शन की सुविधा नहीं होती.इसके बाद, अगर उपयोगकर्ता साफ़ तौर पर प्लेबैक फिर से शुरू करता है, तो ऑडियो प्लेबैक शुरू करने का इंटेंट वापस आ जाना चाहिए. उदाहरण के लिए, आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) या यूनिवर्सल मीडिया ऑब्जेक्ट के प्ले बटन से. इससे, नया एफ़जीएस शुरू होता है.
adb shell कमांड की मदद से, ऑडियो प्लेबैक के व्यवहार की जांच करें.
बदलावों की जांच करना
Android 17 या उसके बाद के वर्शन (बीटा 3 से शुरू) पर चलने वाले ऐप्लिकेशन पर, अपने ऐप्लिकेशन की ज़रूरी शर्तों के मुताबिक होने की जांच की जा सकती है. इसके लिए, यह ADB कमांड चलाएं:
adb shell cmd audio set-enable-hardening <enable|disable|throw>
इस कमांड के ये विकल्प हैं:
enable: सभी ऐप्लिकेशन के लिए, ऑडियो को सुरक्षित बनाने से जुड़ी सभी पाबंदियां चालू करता है. डब्ल्यूआईयू फ़ोरग्राउंड सेवाओं की ज़रूरी शर्त, इस बात पर भी लागू होती है कि कोई ऐप्लिकेशन, Android 17 (एपीआई लेवल 37) को टारगेट करता है या नहीं. इसके अलावा, यह ज़रूरी शर्त तब भी लागू होती है, जब ऐप्लिकेशन, अलार्म स्ट्रीम में बदलाव कर रहा हो और उसके पास अलार्म की अनुमति हो.disable: ऑडियो को सुरक्षित बनाने से जुड़ी सभी पाबंदियां बंद करता है.throw: सभी ऐप्लिकेशन के लिए, ऑडियो को सुरक्षित बनाने से जुड़ी सभी पाबंदियां चालू करता है. यहenableकी तरह काम करता है. इसके अलावा, यह फ़्लैग, वॉल्यूम और फ़ोकस इंटरैक्शन के लिएIllegalStateExceptionको थ्रो करके, गड़बड़ियों की जानकारी देता है. ऑडियो प्लेबैक के लिए, राइट मेथड लगातार गड़बड़ी का कोड दिखाता है. साफ़ तौर पर राइट की सुविधा के बिना, प्लेबैक मोड के लिए ऐप्लिकेशन क्रैश हो जाता है.
यह पता लगाने के लिए कि ऑडियो को सुरक्षित बनाने से जुड़ी ज़रूरी शर्तों को लागू करने की वजह से, ऐप्लिकेशन में कोई गड़बड़ी हुई है या नहीं, adb dumpsys audio या logcat का इस्तेमाल करें. अगर ऐसा हुआ है, तो आपके पैकेज के नाम के साथ, AudioHardening से शुरू होने वाली एक एंट्री दिखेगी. अगर मैसेज में level: full शामिल है, तो आपका ऐप्लिकेशन, फ़ोरग्राउंड सेवा के तौर पर चल रहा है. हालांकि, इस सेवा के पास 'इस्तेमाल के समय अनुमति दें' की सुविधा नहीं है. अगर मैसेज में level: partial शामिल है, तो आपका ऐप्लिकेशन, फ़ोरग्राउंड सेवा के तौर पर नहीं चल रहा है.
डब्ल्यूआईयू की सुविधा वाले एफ़जीएस के बारे में जानकारी
आम तौर पर, फ़ोरग्राउंड सेवाओं (एफ़जीएस) को तब लॉन्च किया जाना चाहिए, जब कोई ऐप्लिकेशन फ़ोरग्राउंड में हो. ऐसा, उपयोगकर्ता की शुरू की गई कार्रवाइयों को जारी रखने के लिए किया जाता है. कुछ खास मामलों में, ऐप्लिकेशन को बैकग्राउंड में होने पर भी, फ़ोरग्राउंड सेवा लॉन्च करने की अनुमति होती है. हालांकि, इन फ़ोरग्राउंड सेवाओं को आम तौर पर, 'इस्तेमाल के समय अनुमति दें' (डब्ल्यूआईयू) की सुविधा नहीं मिलती.
डब्ल्यूआईयू, सुरक्षा के तौर पर काम करता है. यह बैकग्राउंड से शुरू होने वाले एफ़जीएस को, कुछ संवेदनशील कार्रवाइयां करने से रोकता है. ऐसा तब होता है, जब उपयोगकर्ता को ऐप्लिकेशन की गतिविधि के बारे में पता न हो. यह ऐप्लिकेशन को, जगह की जानकारी, कैमरा या माइक्रोफ़ोन जैसे संवेदनशील डेटा को ऐक्सेस करने से रोकता है. साथ ही, Android 17 से, यह उन ऑडियो एपीआई को भी ब्लॉक करता है जिनके लिए आम तौर पर, दिखने वाले यूज़र इंटरफ़ेस (यूआई) के कॉन्टेक्स्ट की ज़रूरत होती है.
यहां एक काम का रेफ़रंस दिया गया है:
- स्टैंडर्ड एफ़जीएस: जब ऐप्लिकेशन दिख रहा होता है या उसे बैकग्राउंड में गतिविधि लॉन्च करने की अनुमति मिली होती है, तब शुरू की गई सेवाओं को डब्ल्यूआईयू का ऐक्सेस मिलता है.
- बैकग्राउंड से शुरू होने वाला एफ़जीएस (बीएफ़एसएल): ज़्यादातर को डब्ल्यूआईयू का ऐक्सेस नहीं मिलता. डब्ल्यूआईयू का ऐक्सेस देने वाले मुख्य अपवाद, साफ़ तौर पर उपयोगकर्ता के इंटेंट से जुड़े इंटरैक्शन होते हैं. उदाहरण के लिए, सूचनाओं पर क्लिक, विजेट इंटरैक्शन या किसी बाहरी डिवाइस से मीडिया कुंजी इवेंट.
- सिस्टम से शुरू होने वाला एफ़जीएस: फ़ोरग्राउंड सेवाओं को डब्ल्यूआईयू का ऐक्सेस तब मिलता है, जब उन्हें सिस्टम-सर्वर डेलिगेशन (उदाहरण के लिए, Telecom Jetpack
लाइब्रेरी से) या सिस्टम बाइंडिंग से शुरू किया जाता है. सिस्टम बाइंडिंग, किसी खास फ़ंक्शन को पूरा करने के लिए, फ़ोरग्राउंड की बेहतर स्थिति को दिखाता है. जैसे,
VoiceInteractionServiceके लिए.
बैकग्राउंड से फ़ोरग्राउंड सेवा शुरू करने पर लगने वाली पाबंदियों के बारे में ज़्यादा पढ़ें .
ऑडियो एपीआई की पूरी सूची जिन पर असर पड़ा है
ऑडियो फ़ंक्शन |
नतीजा |
वे एपीआई जिन पर असर पड़ा है |
ऑडियो प्लेबैक |
प्लेबैक बंद हो जाता है कोई अपवाद नहीं, किसी भी एपीआई से गड़बड़ी का कोई मैसेज नहीं मिला |
(NDK) मीडिया3, Exoplayer, और Oboe जैसी क्लाइंट साइड की उन सभी मीडिया लाइब्रेरी पर भी असर पड़ सकता है जो प्लेबैक को मैनेज करती हैं. |
ऑडियो फ़ोकस का अनुरोध |
दूसरे ऐप्लिकेशन के ऑडियो प्लेबैक पर कोई असर नहीं पड़ता, फ़ोकस नहीं मिलता |
|
वॉल्यूम और रिंगर मोड के एपीआई |
रिंगर मोड या वॉल्यूम पर कोई असर नहीं पड़ता (मेथड कॉल को चुपचाप अनदेखा कर दिया जाता है) कोई अपवाद नहीं, किसी भी एपीआई से गड़बड़ी का कोई मैसेज नहीं मिला |
|