2012-08-18 20 views
5

Ich habe eine AudioTrack Streaming über Kopfhörer. Ich muss ein SoundPool nur an eingebaute Lautsprecher senden, ohne die AudioTrack Wiedergabe über die Kopfhörer zu unterbrechen. Irgendwelche Gangster?Wiedergabe von Ton über Lautsprecher während der Wiedergabe von Musik über Kopfhörer

+0

so der SoundPool ist getrennt von der AudioTrack richtig? – Soham

+0

AudioManager mAudioMgr = (AudioManager) getSystemService (Kontext.AUDIO_SERVICE); mAudioMgr.setSpeakerphoneOn (true); mAudioMgr.setMode (AudioManager.MODE_IN_COMMUNICATION); –

Antwort

11

Viele Android-Geräte verwenden einen einzigen Ausgabe-Thread in der AudioFlinger/Audio-HAL für alle lokalen Wiedergabe (Kopfhörer, Lautsprecher, kabelgebundenes Headset/Kopfhörer), so dass verschiedene Routing von zwei Tracks gleichzeitig unmöglich (weshalb auf vielen Geräten die Medien Streams werden zwangsweise stummgeschaltet, wenn eine Benachrichtigung abgespielt wird und Sie ein verkabeltes Headset angeschlossen haben, da Sie sonst die Musik im Lautsprecher hören würden, während die Benachrichtigung abgespielt wird.

Auf einigen Geräten könnte es möglich sein, zu tun, was Sie suchen, wenn Sie verwalten ein setForceUse(FOR_MEDIA, FORCE_SPEAKER) zu tun und benutzen Sie den MUSIC Stream-Typ für das Material, das Sie in den Lautsprecher wiedergegeben werden soll, und der VOICE_CALL Stream-Typ für die Dinge, die Sie im kabelgebundenen Headset spielen möchten.
Ich bin mir nicht sicher, ob es eine Möglichkeit für eine Anwendung gibt, diesen Aufruf durchzuführen. Vielleicht können Sie an der handleMessage Methode der AudioService Klasse durch Reflexion und senden Sie ihm eine MSG_SET_FORCE_USE Nachricht .. Ich habe es nie selbst versucht, so dass es kläglich scheitern könnte.

EDIT: Ich habe getestet nun den setForceUse Weg MEDIA Ströme an die Lautsprecher zu zwingen, während ein Kabel-Headset auf einem Gerät angebracht ist, und es funktioniert (obwohl ich nicht garantieren kann, dass es über arbeiten alle Geräte). Die Implementierung unterscheidet sich geringfügig von dem, was ich oben beschrieben habe. Siehe meine Antwort auf how to turn speaker on/off programatically in android 4.0 für den Code, den ich verwendet habe.

+0

Mit STREAM_RING wird der Sound zum Lautsprecher umgeleitet, auch wenn die Kopfhörer angeschlossen sind. Der Sound, der über Kopfhörer (AudioTrack) wiedergegeben wird, wird jedoch angehalten, bis dieser STREAM_RING-Vorgang abgeschlossen ist, und wird dann fortgesetzt. Meine Priorität ist das Abspielen des Kopfhörer-Streams ohne Unterbrechung. –

+0

Ja, STREAM_RING folgt der SONIFICATION-Routing-Strategie, die das Verhalten auslösen würde, das ich im ersten Abschnitt meiner Antwort beschrieben habe. Ich habe überprüft, dass ein MUSIC-Stream, der zu Lautsprecher + VOICE_CALL-Stream in verkabelten Headsets gezwungen wird, ordnungsgemäß auf einem XPeria P funktioniert, aber ich habe es nicht auf anderen Geräten getestet. – Michael

+0

Mike, es tut mir leid, dass ich dich zu hart pushen muss, aber ich habe es auf S2 und HTC One X getestet. Beide pausieren den Ton über Kopfhörer. Meins ist ein Signal, das bei fortschreitender Unterbrechung den Arbeitsprozess des Systems durchbrechen wird. –

Verwandte Themen