2015-08-06 7 views

Antwort

23

ich diese Lösung gefunden:

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

Es erfordert:

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

Welche soweit ich sagen kann, Öffnet ein Anforderungsdialogfeld nicht, wenn requestPermissions() ausgeführt wird. Dies muss über das Einstellungsmenü Einstellungen -> Ton & Benachrichtigung -> Bitte nicht stören Zugang gewährt werden.

Dies ist auf SDK 23 Marshmallow.

+4

'setInterruptionFilter' für Lollipop Anmeldung Priorität Filter ist. Verwenden Sie stattdessen "setNotificationPolicy". –

+0

Wird es auch Heads-up-Benachrichtigungen ausblenden? Oder nur der Sound & Vibration? Wie würdest du sie auf Lollipop und darunter blockieren? –

+0

@JasonHu beide Methoden erfordern Android API 23 und höher, das ist Android M. –

15

Nur die Antwort von Jordan Parsons zu verbessern. Um die Priorität festzulegen, benötigen Sie eine Berechtigung, die nur erhalten werden kann, indem der Benutzer aufgefordert wird, eine Aktivität zu öffnen. Eine Aktivität wird gefragt, ob Sie die Berechtigung für die Funktion "Bitte nicht stören" für Ihre Anwendung aktivieren möchten.

kann diese Aktivität auf diese Weise geöffnet werden:

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); 
} 

Nach Erteilung dieser Genehmigung kann diese Einstellung geändert werden.

+1

Dies scheint LG-Handys zum Absturz zu bringen (in Prozess com.android.settings). Hat jemand eine Idee, wie man umgehen kann? –

+0

Ich habe ein LG Nexus 5x Android 7.1.1 und das funktioniert. Vielen Dank! –

+0

LG Nexus 5x ist LG nur von Hardware. Es hat reines Android, also funktioniert es. Problem ist bei LG G4 und bei LG Flex 2 mit Android 6.0.1 (zumindest besitze ich keines dieser Telefone). –

2

Für diejenigen, die mit LG G4 kämpfen, gibt es einen Workaround.

LG die Einstellungen Option nicht eingerichtet haben

permission.ACCESS_NOTIFICATION_POLICY 

Daher zu gewähren es stürzt ab, wenn es erhält

ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS 

jedoch LG hat Setup die Option

permission.BIND_NOTIFICATION_LISTENER_SERVICE 

zu gewähren Und sobald diese Erlaubnis gewährt wird, ist auch

permission.ACCESS_NOTIFICATION_POLICY 

(zumindest auf LG G4). Diese Option befindet sich unter Einstellungen-> Allgemein-> Sicherheit-> Benachrichtigungszugriff. Damit der Nutzer diese Berechtigung erteilen kann, muss Ihre App danach verlangen. Dies wird durch die Erklärung Ihrer Dienst getan, können Sie eine davon aus haben für Ihre Anwendung, wie im Manifest folgt:

<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

Hallo, ich muss diese Erlaubnis von einer Aktivität anfordern. Wie kann ich das machen? –

+0

Dann sollten wir die Aktivität mit der Absicht ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS von myService starten? Kannst du bitte etwas mehr erklären. – mifthi

Verwandte Themen