2012-12-09 29 views
6

Sto usando Android AudioManager per silenziare e riattivare flussi come STREAM_SYSTEM e STREAM_NOTIFICATION, l'esclusione è la chiamata diretta setStreamMute ma non riesco a trovare un metodo isStreamMuted.Perché AudioManager.isStreamMuted non è disponibile?

Guardando all'interno del codice sorgente posso vedere it exists quindi la domanda è 'come posso controllare se un flusso è disattivato?

sto lavorando su Android 4.0.4

+0

Bella domanda. cercando lo stesso. hai trovato la risposta? –

+1

Sfortunata nessuna soluzione – dafi

risposta

7

La risposta sgradevole è che flusso muto opera su una base per-processo. Quindi puoi tranquillamente memorizzare lo stato di muto in una variabile statica da qualche parte, avvolto in modo appropriato e tracciare lo stato di muto da solo. Parlando dall'esperienza amara. A volte fai ciò che devi fare. Perché l'hanno fatto? Questa è una domanda più difficile ....

1

Hanno spogliato il metodo di android.jar utilizzando nascondere:

/** 
* get stream mute state. 
* 
* @hide 
*/ 
public boolean isStreamMute(int streamType) { 
8

riflessioni sono tuo amico. Questo ha funzionato per me.

try { 
    Method m = AudioManager.class.getMethod("isStreamMute", int.class); 
    isMuted = (Boolean) m.invoke(am, AudioManager.STREAM_MUSIC); 
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { 
    System.out.println(e); 
} 

Aggiornamento: Il metodo public boolean isStreamMute (int streamType) è ora accessibile in API 23 senza l'utilizzo di riflessione.

+1

grazie molto poltiglia e molto molto molto piccola correzione isMuted = (Boolean) m.invoke (am, AudioManager.STREAM_MUSIC); –

+1

Risolto nella risposta. Grazie! –

Problemi correlati