2012-12-09 20 views
6

Używam androida AudioManagera do wyciszania i odmrażania strumieni takich jak STREAM_SYSTEM i STREAM_NOTIFICATION, wyciszanie to proste wywoływanie setStreamMute, ale nie mogę znaleźć metody isStreamMuted.Dlaczego narzędzie AudioManager.isStreamMuted jest niedostępne?

Przeglądając kod źródłowy, widzę it exists, więc pytanie brzmi "jak sprawdzić, czy strumień jest wyciszony?

pracuję na Androidzie 4.0.4

+0

Ładne pytanie. szukam tego samego. znalazłeś odpowiedź? –

+1

Pechowy brak rozwiązania – dafi

Odpowiedz

7

Nieprzyjemny odpowiedź jest taka, że ​​strumień wyciszanie działa na zasadzie dla każdego procesu. Możesz więc bezpiecznie zapisać stan wyciszenia w zmiennej statycznej gdzieś, odpowiednio opakować i samodzielnie śledzić stan wyciszenia. Mówiąc z gorzkiego doświadczenia. Czasami robisz to, co musisz. Dlaczego to zrobili? To jest trudniejsze pytanie ....

1

Rozebrali metodę z android.jar za pomocą hide:

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

Odbicia są twoim przyjacielem. To działało dla mnie.

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); 
} 

Aktualizacja: Metoda public boolean isStreamMute (int streamType) jest teraz dostępna w interfejsie API 23 bez użycia odbicia.

+1

dzięki bardzo gęsta i bardzo bardzo mała korekta isMute = (Boolean) m.invoke (am, AudioManager.STREAM_MUSIC); –

+1

Naprawiono w odpowiedzi. Dzięki! –

Powiązane problemy