2010-01-03 17 views
10

हाय मैं इस पर नया हूं। मेरा आत्म-शिक्षण परियोजना एक छोटा सा एप्लीकेशन है जो एक ऑडियो न्यूज़ स्ट्रीम चलाता है। प्रभावी होने के लिए, एप्लिकेशन को वास्तव में किसी भी वर्तमान में चल रहे मीडिया प्लेयर (उदाहरण: अंतिम एफएम, इमिम, म्यूजिक प्लेयर, स्पॉटिफा इत्यादि) को बाधित करने की आवश्यकता है।एंड्रॉइड - क्या मैं वर्तमान में ऑडियो एप्लिकेशन चला रहा हूं?

मुझे नहीं पता कि क्या खेलेंगे या यह कौन सा एप्लिकेशन खेलेंगे, लेकिन मैं उन सभी को तब तक पूछना चाहता हूं जब तक मैंने नहीं किया। बल्कि बोल्ड लगता है, मुझे पता है, लेकिन यह संभव होना चाहिए, क्योंकि जब कोई इनकमिंग कॉल होता है, तो मूल रूप से यह होता है।

क्या मैं उन सभी ऑडियो खिलाड़ियों को एक संदेश भेज सकता हूं जो उन्हें एक पल के लिए रुकने के लिए कह रहे हैं? क्या मैं आने वाली कॉल को खराब कर सकता हूं, बस उस समय के लिए?

धन्यवाद।

उत्तर

18

ऑडियो Android पर हैंडलिंग थोड़ी देर के लिए बहुत भयानक होने जा रहा है। एपीआई बहुत अजीब, खराब दस्तावेज हैं, और संस्करणों के बीच बदलना/हटाना/टूटना जारी रखें। यहां तक ​​कि AudioManager कोड में FIXMEs भी हैं।

वैसे भी, एंड्रॉइड (संगीत, सूचनाएं, फोन कॉल इत्यादि) में कई स्ट्रीम प्रकार हैं और एप्लिकेशन प्लेबैक के लिए उचित विकल्प चुनने के लिए हैं। मुझे लगता है कि अधिकांश एंड्रॉइड ऐप्स को संगीत/मीडिया प्रकार (STREAM_TYPE_MUSIC) का उपयोग करना चाहिए। आप इसे पर setAudioStreamType विधि का उपयोग करके सेट करते हैं।

एसडीके आप के कारण अन्य सभी धाराओं — को म्यूट कर दिया है, लेकिन मैं नहीं मानता कि आप ऑडियो की पहचान विशेष अनुप्रयोगों के द्वारा वापस खेला जा रहा है और किसी भी तरह रोक सकते हैं एकल — रूप प्रकार एक एकल स्ट्रीम निर्धारित करने की अनुमति देता है/फिर से चलाने यह। सामान्य रूप में संगीत अनुप्रयोगों PhoneStateListener का उपयोग खुद को रोकने के लिए जब एक कॉल में आता होगा।

अपने मामले में

तो, आप "उधार" हो सकता है आपके MediaPlayer के लिए फोन कॉल स्ट्रीम और जब प्लेबैक, शुरू होता है तो संयुक्त राष्ट्र विधि कॉल AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true) का उपयोग false के साथ स्ट्रीम करें जब प्लेबैक या आपका Activity किया जाता है।

मैं आपको बता सकता है कि इस काम करता है, लेकिन मैं बेतकल्लुफ़ आप जब आवाज फोन धारा (इस तरह: AudioManager.setMode(AudioManager.MODE_IN_CALL)) का उपयोग भी MODE_IN_CALL करने के लिए ऑडियो मोड निर्धारित करने की आवश्यकता है कि क्या याद नहीं कर सकते। यदि आपको लगता है कि यह आवश्यक है, तो आपको यह सुनिश्चित करने की आवश्यकता है कि प्लेबैक पूर्ण हो जाने पर आप मोड को MODE_NORMAL पर वापस कर दें, अन्यथा जब भी आप वॉल्यूम हार्ड कुंजी दबाते हैं, तो यह "इन-कॉल वॉल्यूम" कहेंगे! हालांकि, अगर आप MODE_NORMAL पर वापस बदलना चाहते हैं, तो आपको यह जांचना होगा कि उस समय एक वास्तविक फोन कॉल नहीं हो रहा है ...

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

जैसा कि मैंने कहा, ऑडियो हैंडलिंग विशेष रूप से मज़ा नहीं है ...;)

+0

धन्यवाद क्रिस्टोफर देखें है, आपकी सलाह की मौके पर ही किया गया था। मैंने वास्तव में अपहरण कर लिया है, STREAM_ALARM, जो मेरे उद्देश्य के अनुरूप है, इसे एकल पर सेट करें और इसका वांछित प्रभाव है। एक बार फिर धन्यवाद। –

+0

हूप्स, कम से कम हेडफ़ोन के साथ ऐसा अच्छा विचार नहीं है। VOICE_CALL पर वापस जाएं। कम से कम अब तक MODE_IN_CALL की आवश्यकता नहीं लगती है। –

0

आप AudioManager.adjustVolume विधि का प्रयास कर सकते हैं:

AudioManager audioMan = 
    (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
audioMan.adjustVolume(AudioManager.ADJUST_LOWER, 
    AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
6

यह 2 साल कर दिया गया है।लेकिन मुझे आशा है कि यह किसी की मदद कर सकते हैं:

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
am.setStreamMute(AudioManager.STREAM_MUSIC, true); 

नोट: अगर आप setStreamMute(int, boolean) फोन धारा n बार म्यूट करने के लिए, आप इसे n बार फिर अनम्यूट करने के लिए कॉल करना होगा (false उपयोग करें)।

+0

यह ठीक काम करता है धन्यवाद :) – Ramz

2

उपयुक्त तरीका AudioManager.requestAudioFocus(...) विधि

उपयोग करने के लिए http://developer.android.com/reference/android/media/AudioManager.html#requestAudioFocus%28android.media.AudioManager.OnAudioFocusChangeListener,%20int,%20int%29

+0

इसके साथ एकमात्र समस्या यह है कि यदि अन्य ऐप्स ऑडियो फोकस अनुरोध का सम्मान नहीं करते हैं। – StackOverflowed

+1

सच है, यद्यपि यदि आप ट्रांजिएंट झंडे का उपयोग करते हैं, तो अधिकांश होगा। हमें सभी को अच्छे ऑडियो फोकस नागरिक होने का प्रयास करना चाहिए! – yano

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

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