2010-01-03 11 views
10

Ciao, sono nuovo di questo. Il mio progetto di autoapprendimento è una piccola applicazione che riproduce un flusso di notizie audio. Per essere efficace, l'applicazione ha davvero bisogno di interrompere qualsiasi lettore multimediale attualmente in riproduzione (ad esempio: Last FM, Imeem, lettore musicale, Spotify, ecc.).Android: è possibile disattivare l'audio durante la riproduzione di applicazioni audio?

Non so cosa suonerà o quale applicazione lo suonerà, ma voglio chiedere a tutti di fermarsi fino a quando non l'ho fatto. Sembra piuttosto audace, lo so, ma deve essere possibile, perché quando c'è una chiamata in arrivo, questo è fondamentalmente ciò che accade.

Posso inviare un messaggio a tutti i lettori audio chiedendo loro di fermarsi un attimo? Posso spoofare una chiamata in arrivo, solo per il tempo necessario?

Grazie.

risposta

18

sezioni Audio su Android sta per essere abbastanza orribile per un po '. Le API sono piuttosto strane, scarsamente documentate e continuano a cambiare/deprecare/rompere tra le versioni. Anche il codice AudioManager contiene FIXMEs.

In ogni caso, ci sono diversi tipi di streaming in Android (musica, notifiche, telefonate, ecc.) E le applicazioni hanno lo scopo di scegliere quello appropriato per la riproduzione. Immagino che la maggior parte delle app Android debbano utilizzare il tipo di musica/media (STREAM_TYPE_MUSIC). Si imposta su MediaPlayer utilizzando il metodo setAudioStreamType.

L'SDK non consente di impostare un unico flusso tipo come solista — causando tutti gli altri corsi d'acqua per essere disattivato — ma io non credo che si possa identificare l'audio viene riprodotto da applicazioni particolari e in qualche modo mettere in pausa/Riattiva esso. Applicazioni musicali in generale, utilizzeranno il PhoneStateListener per mettere in pausa se stessi quando arriva una chiamata.

Quindi nel tuo caso, si potrebbe "prendere in prestito" il flusso di chiamata per il vostro MediaPlayer e utilizzare il metodo di chiamata AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true) quando la riproduzione inizia, quindi un -solo il flusso con false quando la riproduzione o il tuo Activity è fatto.

posso dirvi che questo funziona, ma non riesco a ricordare due piedi se è necessario impostare anche la modalità audio -MODE_IN_CALL quando si utilizza il flusso di chiamata vocale (come questo: AudioManager.setMode(AudioManager.MODE_IN_CALL)). Se ritieni che sia necessario, assicurati di restituire la modalità a MODE_NORMAL al termine della riproduzione, altrimenti ogni volta che premi i tasti del volume, verrà indicato "Volume di chiamata"! Tuttavia, se e quando si desidera tornare a MODE_NORMAL, è necessario verificare che non sia in corso una vera telefonata in quel momento ...

Forse potresti usare un altro tipo di flusso piuttosto che una chiamata vocale, ma sto solo parlando dall'esperienza di lavoro su un'app che potrebbe utilizzare sia il vivavoce che l'auricolare per la riproduzione audio, che richiede l'uso del flusso di chiamate vocali.

Come ho detto, la manipolazione audio non è particolarmente divertente ...;)

+0

Grazie Christopher, il vostro consiglio era perfetto. Ho effettivamente dirottato, lo STREAM_ALARM, che si adatta al mio scopo, l'ho impostato su solo e questo ha l'effetto desiderato. Grazie ancora. –

+0

Whoops, non è una buona idea, almeno non con le cuffie. Torna a VOICE_CALL. Non sembra aver bisogno di MODE_IN_CALL, almeno non così lontano. –

0

Si può provare AudioManager.adjustVolume metodo:

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

E 'stato 2 anni.Ma spero che questo potrebbe aiutare qualcuno:

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

Nota: se si chiama setStreamMute(int, boolean) per disattivare il flusso n volte, è necessario chiamare lo n volte di nuovo per attivare l'audio (utilizzare false).

+0

funziona bene grazie u :) – Ramz

2
+0

L'unico problema è se altre app non rispettano la richiesta di audio focus. – StackOverflowed

+1

true, anche se si usano i flag TRANSIENT, la maggior parte lo farà. Dovremmo tutti sforzarci di essere dei buoni cittadini dell'audio focus! – yano

Problemi correlati