8

AudioManger.setStreamMute अब एपीआई 23 के साथ हटा दिया गया है और इसके साथ AudioManager.adjustStreamVolume उपयोग करने के लिए पसंद किया जाता है AudioManager.ADJUST_MUTE.बहिष्कृत AudioManger.setStreamMute के लिए वैकल्पिक?

मेरे समस्या यह है कि इस तरह का झंडा केवल API 23 के साथ समर्थित है, जबकि मेरे ऐप न्यूनतम API है 16.

क्या पूरे सिस्टम को म्यूट करने का कोई और तरीका है?

यदि नहीं, तो Google इस विधि को क्यों मिटा देगा?

उत्तर

14

जिस तरह से मैं यह करूँगा, एंड्रॉइड के संस्करण के आधार पर उचित कॉल का उपयोग करने के लिए एक if/else ब्लॉक का उपयोग करना होगा, जिसमें ऐप वर्तमान में चल रहा है।

// Change the stream to your stream of choice. 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
    am.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0); 
} else { 
    am.setStreamMute(AudioManager.STREAM_MUSIC, true); 
} 
+0

लेकिन 23 से कम एपीआई के लिए भी बेहतर समाधान नहीं होना चाहिए? – dor00012

+0

यह समाधान है। यदि एपीआई 23 से कम है तो अन्य निष्पादित होगा। एकमात्र तरीके से मैं इसे किसी भी तरीके से लपेटना बेहतर कर सकता हूं। – phxhawke

+0

23 से कम एपीआई के लिए बेहतर समाधान कहकर मेरा मतलब है कि एक विधि जिसे बहिष्कृत नहीं किया गया है - 'setStreamMute' के लिए एक विकल्प। मैं समझता हूं कि शायद नहीं, धन्यवाद। – dor00012

7

स्वीकार किए जाते हैं जवाब प्रणाली म्यूट करने में ठीक काम करता है, लेकिन अगर आप राज्य को बहाल करने की जरूरत है (उदाहरण के लिए, जब उपयोगकर्ता को थामने/अपने अनुप्रयोग से बाहर निकलें) कृपया ध्यान दें कि adjustStreamVolume और setStreamMute तरीकों के शब्दों अलग हैं:

setStreamMute लिए

, प्रलेखन से:

एक दिया स्ट्रीम के लिए मूक अनुरोध संचयी होते हैं: AudioManager से कई मूक अनुरोध प्राप्त कर सकते हैं ओ एन या अधिक क्लाइंट और स्ट्रीम केवल तभी अनम्यूट की जाएगी जब उसी अनम्यूट अनुरोधों की संख्या प्राप्त की जाएगी।

यह AudioManager.ADJUST_MUTE साथ adjustStreamVolume के लिए मामला है प्रतीत नहीं होता। दूसरे शब्दों में, यदि setStreamMute (stream, true) के साथ इसे म्यूट करने से पहले स्ट्रीम की स्थिति पहले ही म्यूट हो चुकी है, तो तत्काल setStreamMute (stream, false) इसे म्यूट स्टेटस में छोड़ देगा, जबकि adjustStreamVolumeAudioManager.ADJUST_UNMUTE स्ट्रीम को अनम्यूट कर सकता है।

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    if (!audioManager.isStreamMute(stream)) { 
     savedStreamMuted = true; 
     audioManager.adjustStreamVolume(stream, AudioManager.ADJUST_MUTE, 0); 
    } 
} else { 
    audioManager.setStreamMute(stream, true); 
} 

अनम्यूट करने के लिए:

म्यूट करने के लिए - उपयोग के मामले पर

निर्भर करता है, पुराने अर्थ विज्ञान का अनुकरण करने, एक ही रास्ता है, म्यूट से पहले म्यूट स्थिति की जाँच करने के तरह निम्नलिखित कुछ है

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    if (savedStreamMuted) { 
     audioManager.adjustStreamVolume(stream, AudioManager.ADJUST_UNMUTE, 0); 
     savedStreamMuted = false; 
    } 
} else { 
    // Note that this must be the same instance of audioManager that mutes 
    // http://stackoverflow.com/questions/7908962/setstreammute-never-unmutes?rq=1 
    audioManager.setStreamMute(stream, false); 
} 

इसका मतलब यह है वैसे भी वहाँ कोई रास्ता नहीं लगता है के बीच और धारा अपने अनुप्रयोग अनम्यूट्स (के बाद मौन रहने की उम्मीद उन धारा म्यूट करने के लिए एक और ऐप्लिकेशन का इस्तेमाल करने की संभावना नहीं है इसे देखो)।

संयोग से, isStreamMute विधि पहले छिपी हुई थी, और केवल इस उद्देश्य के लिए इसका उपयोग सक्षम करने के लिए एपीआई 23 में अप्रशिक्षित थी।

संबंधित मुद्दे