के माध्यम से संगीत बजाने के दौरान स्पीकर पर ध्वनि बजाना मेरे पास AudioTrack
हेडफ़ोन के माध्यम से स्ट्रीमिंग है। मुझे हेडफ़ोन पर AudioTrack
पर बाधा डाले बिना, केवल अंतर्निहित स्पीकर में SoundPool
भेजना होगा। कोई हैक गैंगस्टर?हेडफ़ोन
हेडफ़ोन
उत्तर
कई एंड्रॉइड डिवाइस सभी स्थानीय प्लेबैक (इयरपीस, स्पीकर, वायर्ड हेडसेट/हेडफ़ोन) के लिए ऑडियोफ्लिंगर/ऑडियो एचएएल में एक आउटपुट थ्रेड का उपयोग करते हैं, जिससे दो पटरियों के अलग-अलग रूटिंग एक साथ असंभव होते हैं (यही कारण है कि मीडिया के कई उपकरणों पर अधिसूचनाओं को जबरन म्यूट कर दिया जाता है यदि कोई अधिसूचना खेला जाता है और आपके पास वायर्ड हेडसेट संलग्न होता है, क्योंकि अन्यथा आप ध्वनि के दौरान लाउडस्पीकर में संगीत सुनेंगे)।
कुछ उपकरणों पर यह तुम्हारे लिए क्या देख रहे हैं करने के लिए संभव हो सकता है अगर आप एक setForceUse(FOR_MEDIA, FORCE_SPEAKER)
करते हैं और सामान आप लाउडस्पीकर में खेलना चाहते हैं के लिए MUSIC
धारा प्रकार का उपयोग करने का प्रबंधन, और के लिए VOICE_CALL
प्रकार की स्ट्रीम सामान जो आप वायर्ड हेडसेट में खेलना चाहते हैं।
मुझे यकीन नहीं है कि एप्लिकेशन के लिए setForceUse
कॉल करने के लिए कोई तरीका है या नहीं। शायद आप handleMessage
पर AudioService
कक्षा के प्रतिबिंब के माध्यम से प्राप्त कर सकते हैं और इसे MSG_SET_FORCE_USE
संदेश भेज सकते हैं .. मैंने कभी इसे स्वयं नहीं किया है, इसलिए यह दुर्भाग्य से विफल हो सकता है।
संपादित करें: मैं अब लाउडस्पीकर जबकि वायर वाले हेडसेट के एक वास्तविक डिवाइस पर जुड़ा हुआ है मीडिया धाराओं के लिए मजबूर की setForceUse तरह से परीक्षण किया है, और यह काम (हालांकि मैं गारंटी नहीं दे सकते हैं कि यह भर में काम करेंगे करता है सभि यन्त्र)। कार्यान्वयन ऊपर वर्णित से थोड़ा अलग था। मेरे द्वारा उपयोग किए गए कोड के लिए how to turn speaker on/off programatically in android 4.0 पर मेरा उत्तर देखें।
हेडफ़ोन कनेक्ट होने पर भी ध्वनि को स्पीकर पर रीडायरेक्ट करने में मदद करता है। हालांकि, हेडफ़ोन (ऑडियोट्रैक) पर चलने वाली ध्वनि तब तक रुक जाती है जब तक कि यह STREAM_RING पूरा नहीं हो जाता है और फिर फिर से शुरू होता है। मेरी प्राथमिकता बिना रुकावट के हेडफ़ोन स्ट्रीम खेल रही है। –
हां, STREAM_RING SONIFICATION रूटिंग रणनीति का पालन करता है, जो मेरे उत्तर के पहले पैराग्राफ में वर्णित व्यवहार को ट्रिगर करेगा। मैंने सत्यापित किया है कि एक संगीत धारा स्पीकर + वायर्ड हेडसेट में एक VOICE_CALL स्ट्रीम के लिए मजबूर होना एक एक्सपीरिया पी पर ठीक से काम करता है, लेकिन मैंने इसे किसी अन्य डिवाइस पर परीक्षण नहीं किया है। – Michael
माइक, मुझे आपको बहुत कठिन बनाने के लिए खेद है, लेकिन मैं इसे एस 2 और एचटीसी वन एक्स पर परीक्षण कर रहा हूं। वे दोनों हेडफोन पर ऑडियो रोक रहे हैं। मेरा एक संकेत है जो निरंतरता को तोड़ने पर सिस्टम की कार्यप्रणाली का उल्लंघन करेगा। –
तो ध्वनिपूल ऑडियोट्रैक से अलग है? – Soham
AudioManager mAudioMgr = (AudioManager) सिस्टम सिस्टम सेवा (Context.AUDIO_SERVICE) प्राप्त करें; mAudioMgr.setSpeakerphoneOn (सत्य); mAudioMgr.setMode (AudioManager.MODE_IN_COMMUNICATION); STREAM_RING का उपयोग कर –