स्वीकार किए जाते हैं जवाब प्रणाली म्यूट करने में ठीक काम करता है, लेकिन अगर आप राज्य को बहाल करने की जरूरत है (उदाहरण के लिए, जब उपयोगकर्ता को थामने/अपने अनुप्रयोग से बाहर निकलें) कृपया ध्यान दें कि adjustStreamVolume
और setStreamMute
तरीकों के शब्दों अलग हैं:
setStreamMute
लिए
, प्रलेखन से:
एक दिया स्ट्रीम के लिए मूक अनुरोध संचयी होते हैं: AudioManager से कई मूक अनुरोध प्राप्त कर सकते हैं ओ एन या अधिक क्लाइंट और स्ट्रीम केवल तभी अनम्यूट की जाएगी जब उसी अनम्यूट अनुरोधों की संख्या प्राप्त की जाएगी।
यह AudioManager.ADJUST_MUTE
साथ adjustStreamVolume
के लिए मामला है प्रतीत नहीं होता। दूसरे शब्दों में, यदि setStreamMute (stream, true)
के साथ इसे म्यूट करने से पहले स्ट्रीम की स्थिति पहले ही म्यूट हो चुकी है, तो तत्काल setStreamMute (stream, false)
इसे म्यूट स्टेटस में छोड़ देगा, जबकि adjustStreamVolume
AudioManager.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 में अप्रशिक्षित थी।
लेकिन 23 से कम एपीआई के लिए भी बेहतर समाधान नहीं होना चाहिए? – dor00012
यह समाधान है। यदि एपीआई 23 से कम है तो अन्य निष्पादित होगा। एकमात्र तरीके से मैं इसे किसी भी तरीके से लपेटना बेहतर कर सकता हूं। – phxhawke
23 से कम एपीआई के लिए बेहतर समाधान कहकर मेरा मतलब है कि एक विधि जिसे बहिष्कृत नहीं किया गया है - 'setStreamMute' के लिए एक विकल्प। मैं समझता हूं कि शायद नहीं, धन्यवाद। – dor00012