2013-11-22 10 views
7

sto usando questo codice per aprire le Impostazioni di notifica Listener:Verificare se l'utente ha concesso l'accesso NotificationListener alla mia app

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

Vorrei verificare se l'utente ha concesso l'autorizzazione per la mia app. Ho già provato a verificare se il mio NotificationListenerService è in esecuzione, ma sembra che venga arrestato e riavviato dal sistema (anche se torno START_STICKY).

+0

Ho usato questa soluzione e funziona perfettamente: http://stackoverflow.com/a/33871952/5053585 – Hazlo8

risposta

8

Ho sbagliato, controllando opere se il servizio è in esecuzione:

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

Se deselezionate il permesso, il processo continua a funzionare. Quindi questo non è a prova di proiettile, ma non ho trovato un altro modo. – black

+1

Se deseleziono l'autorizzazione, il mio servizio viene distrutto. Quindi la risposta sopra funziona perfettamente per me. – MrMaffen

17

L'unico modo corretto per farlo è quello di controllare le impostazioni di sicurezza:

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

Voglio davvero darti un biscotto! Gracias. – Olayinka

+1

Questo funziona. Puoi controllare il tuo AccessibilityService anche in questo modo, passando '" enabled_accessibility_services "' a 'Settings.Secure.getString()'. Entrambe le stringhe sono impostate come costanti in Settings.Secure, ma quella per le notifiche è nascosta per qualche motivo. –

-1

Usa supporto lib:

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

Questo è sbagliato. Restituirà tutte le notifiche da questa app abilitate o bloccate, nulla a che fare con l'ascoltatore. –

Problemi correlati