2015-08-06 12 views

risposta

23

ho trovato questa soluzione:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE); 

Si richiede:

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" /> 

che, per quanto posso dire non fa apparire una finestra di dialogo di richiesta quando si fa requestPermissions(). Deve essere concesso tramite il menu Impostazioni Impostazioni -> Suono & Notifcation -> Accesso Non Disturbo.

Questo è su SDK 23 Marshmallow.

+4

'setInterruptionFilter' è per Lollipop filtro priorità notifica. Usa invece 'setNotificationPolicy'. –

+0

Nasconde anche le notifiche heads-up? O solo il suono e le vibrazioni? Come li blocchi su Lollipop e sotto? –

+0

@JasonHu entrambi i metodi richiedono Android API 23 e versioni successive, che è Android M. –

15

Solo migliorando la risposta di Jordan Parsons. Per impostare la priorità è necessario un permesso che può essere ottenuto solo chiedendo all'utente l'apertura di un'attività. Viene richiesta un'attività chiedendo se si desidera abilitare l'autorizzazione per Non disturbare all'applicazione.

questa attività può essere aperto in questo modo:

NotificationManager mNotificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE); 

// Check if the notification policy access has been granted for the app. 
if (!mNotificationManager.isNotificationPolicyAccessGranted()) { 
    Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS); 
    startActivity(intent); 
} 

Dopo aver concesso questa autorizzazione, questa impostazione può essere modificata.

+1

Questo sembra causare l'arresto anomalo dei telefoni LG (in corso com.android.settings). Qualcuno ha qualche idea su come risolvere il problema? –

+0

Ho un LG Nexus 5x con Android 7.1.1 e funziona. Grazie! –

+0

LG Nexus 5x è LG solo per hardware. Ha puro Android, quindi funziona. Il problema è su LG G4 e su LG Flex 2 con Android 6.0.1 (almeno, non possiedo nessuno dei due telefoni). –

2

Per coloro che hanno problemi con LG G4, c'è una soluzione alternativa.

LG non ha l'opzione di configurazione delle impostazioni di concedere

permission.ACCESS_NOTIFICATION_POLICY 

Pertanto si blocca quando riceve

ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS 

Tuttavia, LG ha fatto impostare l'opzione di concedere

permission.BIND_NOTIFICATION_LISTENER_SERVICE 

E una volta concesso questo permesso, lo è anche

permission.ACCESS_NOTIFICATION_POLICY 

(almeno su LG G4). Questa opzione è in Impostazioni-> Generale-> Sicurezza-> Accesso di notifica. Affinché l'utente possa concedere questa autorizzazione, l'app deve richiederla. Questo viene fatto dichiarando il vostro servizio, a patto di avere una per la vostra applicazione, come segue nel manifesto:

<service android:name="myService" 
     android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
    <intent-filter> 
     <action android:name="android.service.notification.NotificationListenerService" /> 
    </intent-filter> 
</service> 
+0

Ciao, ho bisogno di richiedere questa autorizzazione da un'attività. Come lo posso fare? –

+0

Quindi dovremmo avviare l'attività con intento ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS da myService? Puoi spiegare per favore un po 'di più. – mifthi

Problemi correlati