Frage

Hallo, ich bin neu in diesem. Mein Selbstlernprojekt ist eine kleine Anwendung, die einen Audio-Nachrichtenstrom spielt. Um wirksam zu sein, muss die Anwendung wirklich alle derzeit Media-Player spielen zu unterbrechen (zB: Last FM, Imeem, Musik-Player, Spotify, etc.).

Ich weiß nicht, was spielen wird oder welche Anwendung wird es spielen, aber ich will sie alle bitten, zu pausieren, bis ich getan habe. Sounds eher fett, ich weiß, aber es muss möglich sein, denn wenn ist ein Anruf eingeht, das ist im Grunde, was passiert.

Kann ich eine Nachricht an alle Audio-Player senden sie für einen Moment innehalten zu fragen? Könnte ich einen eingehenden Anruf vortäuschen, nur für die Zeit es braucht?

Danke.

War es hilfreich?

Lösung

Audio Handling auf Android wird eine Zeit lang ziemlich schrecklich sein. Die APIs sind ziemlich komisch, schlecht dokumentiert, und ändern sich ständig / deprecating / Bruch zwischen den Versionen. Auch der AudioManager Code hat FIXMEs drin.

Wie auch immer, es gibt mehr Stream-Typen in Android (Musik, Mitteilungen, Telefonanrufe, etc.) und Anwendungen sollen die passenden für die Wiedergabe wählen. Ich stelle mir die Mehrheit der Android-Anwendungen sollten die Musik / Medientyp (STREAM_TYPE_MUSIC) verwenden. Sie setzen diese auf Ihrem MediaPlayer die setAudioStreamType Methode.

Das SDK erlaubt es Ihnen einen einzelnen Stream auf type als Solo - was alle anderen Ströme stumm geschaltet werden - aber ich glaube nicht, dass Sie das Audio Wesen wieder durch bestimmte Anwendungen gespielt identifizieren können und irgendwie Pause / unpause es. Musik-Anwendungen im Allgemeinen nutzen die PhoneStateListener selbst zu unterbrechen, wenn ein Anruf eingeht.

Also in Ihrem Fall, Sie könnten „borrow“ der Anruf Strom für Ihre MediaPlayer und den Methodenaufruf AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true) verwenden, wenn die Wiedergabe beginnt, dann un-Solo der Strom mit false, wenn die Wiedergabe oder Ihre Activity durchgeführt wird.

Ich kann Ihnen sagen, dass dies funktioniert, aber ich kann mich nicht erinnern, freihändig, ob Sie auch das Audio festlegen müssen Modus zu MODE_IN_CALL wenn der Sprachanruf Strom mit (wie dieser: AudioManager.setMode(AudioManager.MODE_IN_CALL)). Wenn Sie feststellen, dass erforderlich ist, dann müssen Sie stellen Sie sicher, um den Modus zu MODE_NORMAL einmal die Wiedergabe abgeschlossen ist zurückzukehren, andernfalls, wenn Sie die Lautstärke harten Tasten drücken, wird es sagen, „In-Call-Volumen“! Wenn jedoch und wenn Sie MODE_NORMAL zu ändern zurück wollen, müssen Sie prüfen, ob ein echter Anruf zu dieser Zeit nicht geschieht ...

Vielleicht könnten Sie einen anderen Stream-Typ verwenden, anstatt die Sprachanruf, aber ich bin nur aus Erfahrung sprechen auf einer App arbeiten, die entweder mit dem Lautsprecher oder den Hörer für die Audiowiedergabe verwenden könnte, die erfordert die Verwendung des Sprachanruf Stream.

Wie ich schon sagte, Audio-Behandlung ist nicht besonders Spaß ...;)

Andere Tipps

Es verfügt über 2 Jahre. Aber ich hoffe, dass dies jemand helfen könnte:

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

Hinweis: , wenn Sie setStreamMute (int, boolean) den Strom stumm zu schalten n Zeiten, müssen Sie es nennen n mal wieder unmute (Verwendung false).

Sie können versuchen, AudioManager.adjustVolume Methode:

AudioManager audioMan = 
    (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioMan.adjustVolume(AudioManager.ADJUST_LOWER,
    AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top