2015-07-13 30 views
15

Mi stavo chiedendo se c'è un modo per verificare se un dispositivo Android (21+) è in modalità Non disturbare? So che c'è lo AudioManager.RINGER_MODE_SILENT, ma mi chiedevo se questo riguardava questa situazione, o se c'è un modo migliore per controllare?Android: rileva lo stato di Non disturbare?

risposta

6

Sto portando il necro con questo post, ma stavo solo cercando una soluzione allo stesso problema e ho passato questo post come ho fatto, quindi sto lasciando una soluzione per il futuro ref.

Non sono riuscito a trovare un modo "ufficiale" per farlo, ma ho trovato un valore che può restituire lo stato DnD come numero intero. La funzione è chiamata "zen_mode" internamente, in modo da poter controllare il valore corrente con il seguente codice:

Global.getInt(getContentResolver(), "zen_mode") 

Che sarà di ritorno:

  • - Se DnD è off.
  • - Se DnD è su - Priorità Solo
  • - Se DnD è su - Totale silenzio
  • - Se DnD è su - Allarmi Solo

Quando l'impostazione è solo la priorità, non restituisce nulla, ma è possibile calcolare quello stato assumendo non ci sono notizie = modalità Messaggi prioritari. Questo deve essere stato un bug, dato che ora è un anno in su, questo ora restituisce un valore proprio come gli altri stati. Non ho idea di quando è stato corretto, ma ora funziona come ti aspetteresti.

Ho provato anche con un osservatore delle impostazioni, che funziona ma solo per determinate transizioni di stato, quindi ritengo che il polling periodicamente sia la migliore, finché non diventa disponibile un modo "ufficiale" di ascoltare questo cambiamento di stato.

Ho incluso sia l'osservatore che i metodi di polling per ottenere il valore in this Gist. Spero che possa aiutare/salvare qualcun altro un po 'di tempo.

Aggiornamento 15 marzo, 2017: Grazie a David Riha per il commento. È stato aggiunto lo stato 1 - Priority Only allo stato di risposta, revised the Gist per riconoscere tale stato e per generare valori sconosciuti per accedere nel caso in cui altri dispositivi o aggiornamenti futuri decidano di restituire un valore diverso.

+1

Sul mio dispositivo, 1 viene restituito quando l'impostazione è solo prioritaria. –

+0

@DavidRiha Grazie per avermelo fatto notare! Non ci ho provato da più di un anno e ora posso confermare che restituisce 1 sui miei dispositivi. Ho aggiornato la mia risposta e Gist. – MattMatt

8

con puntatori da Android how to turn on do not disturb (dnd) programmatically:

In SDK 23, android.app.NotificationManager fornisce l'interfaccia è necessario, vale a dire NotificationManager.getCurrentInterruptionFilter().

Si sould restituire uno dei:

  • INTERRUPTION_FILTER_PRIORITY
  • INTERRUPTION_FILTER_ALARMS
  • INTERRUPTION_FILTER_NONE
  • INTERRUPTION_FILTER_ALL
  • INTERRUPTION_FILTER_UNKNOWN

Secondo Google Help on Nexus DevicesNon disturbare è una funzionalità di Android> = 6.0, quindi l'SDK 23 dovrebbe essere ragionevole da chiedere. Se non lo è, penso che sarebbe ragionevole chiedersi perché, per essere in grado di fornire una soluzione alternativa.