2013-11-22 8 views
7

erteilt hat, verwende ich diesen Code Benachrichtigungs-Listener-Einstellungen zu öffnen:Überprüfen Sie, ob Benutzer NotificationListener Zugriff auf meine App

startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS")); 

Ich würde zustellen, ob ein Benutzer die Berechtigung meiner App erteilt hat. Ich habe bereits versucht, zu überprüfen, ob mein NotificationListenerService ausgeführt wird, aber anscheinend wird er vom System angehalten und neu gestartet (auch wenn ich START_STICKY zurückgebe).

+0

Ich habe diese Lösung verwendet und es funktioniert gut: http://StackOverflow.com/a/33871952/5053585 – Hazlo8

Antwort

8

ich falsch war, zu überprüfen, ob Dienst ausgeführt Werke:

private boolean isNLServiceRunning() { 
     ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 

     for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (NLService.class.getName().equals(service.service.getClassName())) { 
        return true; 
      } 
     } 

     return false; 
    } 
+3

Wenn Sie die Option deaktivieren die Erlaubnis, der Prozess läuft weiter. Das ist also nicht kugelsicher, aber ich habe keinen anderen Weg gefunden. – black

+1

Wenn ich die Berechtigung deaktiviere, wird mein Dienst zerstört. Also die obige Antwort funktioniert perfekt für mich. – MrMaffen

17

Der einzig richtige Weg, es zu tun ist, um die Sicherheitseinstellungen zu überprüfen:

ComponentName cn = new ComponentName(context, YourNotificationListenerService.class); 
String flat = Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners"); 
final boolean enabled = flat != null && flat.contains(cn.flattenToString()); 
+2

Ich möchte dir wirklich einen Keks geben! Gracias. – Olayinka

+1

Das funktioniert. Sie können Ihren AccessibilityService auch auf diese Weise überprüfen, indem Sie 'enable_accessibility_services' an' Settings.Secure.getString() 'übergeben. Beide Zeichenfolgen werden in Settings.Secure als Konstanten festgelegt, aber die für Benachrichtigungen ist aus irgendeinem Grund ausgeblendet. –

-1

Verwenden Unterstützung lib:

NotificationManagerCompat.from(context).areNotificationsEnabled() 
+0

Das ist falsch. Es wird zurückgegeben, wenn Benachrichtigungen von dieser App aktiviert oder blockiert sind, nichts mit dem Hörer zu tun hat. –

Verwandte Themen