Vérifier si l'utilisateur a accordé l'accès à NotificationListener à mon application

J'utilise ce code pour ouvrir les paramètres de l'écouteur de notification:

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

Je voudrais vérifier si l'utilisateur a accordé l'autorisation à mon application. J'ai déjà essayé de vérifier si mon NotificationListenerService est en cours d'exécution, mais il semble qu'il soit arrêté et redémarré par le système (même si je retourne START_STICKY).

8
ajouté édité
Vues: 1
J'ai utilisé cette solution et ça marche très bien: stackoverflow.com/a/33871952/5053585
ajouté l'auteur Hazlo8, source

2 Réponses

La seule façon correcte de le faire est de vérifier les paramètres sécurisés:

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());
18
ajouté
Je veux vraiment te donner un cookie! Gracias.
ajouté l'auteur Olayinka, source
Cela marche. Vous pouvez aussi vérifier votre AccessibilityService, mais en passant "enabled_accessibility_services" à Settings.Secure.getString() . Les deux chaînes sont définies comme des constantes dans Settings.Secure, mais celle des notifications est masquée pour une raison quelconque.
ajouté l'auteur Steve Blackwell, source

Je me suis trompé, en vérifiant si le service fonctionne:

    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;
    }
8
ajouté
Si vous décochez la case, le processus continue à s'exécuter. Donc, ce n'est pas à l'épreuve des balles, mais je n'ai pas trouvé un autre moyen.
ajouté l'auteur black, source
Si je décoche la permission, mon service est détruit. Donc, la réponse ci-dessus fonctionne parfaitement pour moi.
ajouté l'auteur MrMaffen, source