2014-11-10 16 views
6

Android 5.0 zawiera nowy sposób kontrolowania, które aplikacje mogą hałasować w urządzeniu: po naciśnięciu przycisku regulacji głośności wyskakujące okienko umożliwia teraz wybór: Brak (całkowicie cichy), Priorytet (tylko priorytetowe powiadomienia zrobić dźwięk) lub Wszystko (wszystko wolno hałasować.)Jak uzyskać dostęp do dźwięku "Tryb priorytetu" na urządzeniu z systemem Android 5.0?

New 'priority mode' controls in Android 5.0

Chciałbym moje app, aby móc kwerendy urządzenie, aby dowiedzieć się, które z tych trzech trybów jest aktualnie aktywny, a także chciałbym móc zmienić te tryby (bez konieczności korzenia urządzenia) ed). Czy ktoś wie, jak to zrobić?

tej pory wszystko, co mogę znaleźć to krótkie odniesienie on this changelog:

Ustawienie w urządzeniu RINGER_MODE_SILENT powoduje, że urządzenie, aby wprowadzić nowy tryb priorytetu. Urządzenie pozostawia tryb priorytetu, jeśli ustawiono go na RINGER_MODE_NORMAL lub RINGER_MODE_VIBRATE.

Działa to tak, jak opisano, co pozwala mi bardzo ograniczoną możliwość zmiany "trybu priorytetu" poprzez modyfikację ringer mode in AudioManager. To jednak nie wystarczy, ponieważ muszę dokładnie wiedzieć, które z trzech ustawień trybu priorytetu jest aktualnie aktywne, a także byłoby miło, gdybym mógł je zmienić dokładniej niż pozwala na to AudioManager.

Odpowiedz

8

Znalazłem rozwiązanie, ale wymaga to zmiany root, ponieważ to ustawienie znajduje się w Settings.Global.

Nazwa ustawienia to "zen_mode".

Wartości są:

ZENMODE_ALL = 0; 
ZENMODE_PRIORITY = 1; 
ZENMODE_NONE = 2; 

EDIT: Znalazłem inne rozwiązanie. Sprawdź NotificationListenerService.requestInterruptionFilter (int interruptionFilter). https://developer.android.com/reference/android/service/notification/NotificationListenerService.html Przykład wdrożenia: https://github.com/kpbird/NotificationListenerService-Example

+0

To rozwiązuje większość mojego problemu, wystarczy użyć ContentObserver, aby obejrzeć Settings.Global dla zmian. Przynajmniej teraz mogę powiedzieć, kiedy użytkownik zmieni te ustawienia. Dzięki! – Xanatos

+0

Dość ukryj ... Działaj zgodnie z oczekiwaniami. Wielkie dzięki! Aby tylko zwrócić uwagę na jedną rzecz, 'requestInterruptionFilter' jest tą, która zmienia tryb, aby zapytać tylko o bieżący tryb, można użyć getCurrentInterruptionFilter: https://developer.android.com/reference/android/service/notification/NotificationListenerService.html #getCurrentInterruptionFilter(). Niestety, wszystko to wymaga od użytkownika udzielenia specjalnych uprawnień do aplikacji. –

+1

Użyłem sprawdzania ustawień globalnych w moich aplikacjach, ale jest problem z OnePlus 2 (Oxygen ROM), który używa innych wartości. Konkretnie używa 3 dla ZENMODE_ALL, 1 dla ZENMODE_NONE i 2 dla ZENMODE_PRIORITY. Czy można sprawdzić, jakiego ROMu używa urządzenie, aby zobaczyć wartości lub inne? –

Powiązane problemy