AudioManger.setStreamMute ist jetzt mit API 23 veraltet und es wird bevorzugt, AudioManager.adjustStreamVolume
mit AudioManager.ADJUST_MUTE.
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?
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.
Tags und Links android android-6.0-marshmallow android-audiomanager