Alternative für veraltetes AudioManger.setStreamMute?

9

AudioManger.setStreamMute ist jetzt mit API 23 veraltet und es wird bevorzugt, AudioManager.adjustStreamVolume mit AudioManager.ADJUST_MUTE.

zu verwenden

Mein Problem ist, dass diese Art von Flag nur mit API 23 unterstützt wird, während meine App mindestens API 16 ist.

Gibt es eine andere Möglichkeit, das ganze System zu stummschalten?

Wenn nicht, warum sollte Google diese Methode ablehnen?

    
dor00012 10.10.2015, 18:19
quelle

2 Antworten

15

Wie ich es tun würde, würde ich einen if / else-Block verwenden, um die richtigen Aufrufe zu verwenden, abhängig von der Android-Version, unter der die App gerade läuft.

%Vor%     
phxhawke 10.10.2015, 19:42
quelle
7

Die angenommene Antwort funktioniert gut, wenn Sie das System stummschalten. Wenn Sie jedoch den Status wiederherstellen müssen (z. B. wenn Benutzer Ihre App anhalten / beenden), beachten Sie bitte, dass die Semantik der Methoden adjustStreamVolume und setStreamMute unterschiedlich ist:

Für setStreamMute , aus der Dokumentation:

  

Die Mute-Anfragen für einen bestimmten Stream sind   kumulativ: Der AudioManager kann mehrere Mute-Anfragen von empfangen   ein oder mehrere Clients und der Stream wird nur dann stumm geschaltet, wenn das gleiche ist   Anzahl der Stummschaltanforderungen wird empfangen.

Dies scheint für adjustStreamVolume mit AudioManager.ADJUST_MUTE nicht der Fall zu sein. Mit anderen Worten, wenn der Status des Streams bereits stummgeschaltet ist, bevor Sie ihn mit setStreamMute (stream, true) stummschalten, wird ein unmittelbarer setStreamMute (stream, false) ihn im stummen Zustand belassen, während adjustStreamVolume mit AudioManager.ADJUST_UNMUTE den Stream stummschalten kann.

Je nach dem Anwendungsfall, um die alte Semantik zu emulieren, besteht eine Möglichkeit darin, den Muting-Zustand vor dem Muting zu prüfen, etwa wie folgt -

Zum Stummschalten:

%Vor%

Um die Stummschaltung aufzuheben:

%Vor%

Dies geht davon aus, dass Nutzer wahrscheinlich keine andere App aufrufen, um den Stream dazwischen zu stummschalten und erwarten, dass der Stream nach dem Stummschalten der App stumm bleibt (es scheint jedoch keine Möglichkeit zu bestehen, dies zu überprüfen).

Übrigens war die isStreamMute -Methode zuvor verborgen und wurde nur in API 23 eingeblendet, damit sie für diesen Zweck verwendet werden kann.

    
headuck 27.03.2016 08:11
quelle