2013-07-25 23 views
9

Android ha un nuovo servizio di notifica ascoltatore di 4.3: http://developer.android.com/about/versions/jelly-bean.html http://developer.android.com/reference/android/service/notification/NotificationListenerService.htmlaccedere alle impostazioni NotificationListenerService Android

Dalla documentazione:

accesso notifiche è disabilitato di default - le applicazioni possono utilizzare una nuova intenti per portare l'utente direttamente nelle Impostazioni per abilitare il servizio listener dopo l'installazione.

Non vedo l'intento di far fuoco documentato ovunque. Sfogliando il doc Impostazioni non sembra utile: http://developer.android.com/reference/android/provider/Settings.html

Guardando la classe Impostazioni direttamente: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/provider/Settings.java

vedo ACTION_NOTIFICATION_LISTENER_SETTINGS definiti, ma quando si utilizza Android Studio e che punta a 4.3 ACTION_NOTIFICATION_LISTENER_SETTINGS non può essere risolto:

Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS); 

Cercando più manualmente non sembra funzionare:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.setClassName("com.android.settings", "android.settings.NOTIFICATION_LISTENER_SETTINGS"); 

edit: farlo nel modo corretto come CommonsWare sottolineato di seguito:

Intent intent=new Intent("android.settings.NOTIFICATION_LISTENER_SETTINGS"); 

porta ad un incidente:

(android.content.ActivityNotFoundException: trovate attività di maniglia Intent {atto = android.settings.NOTIFICATION_LISTENER_SETTINGS})

Mi manca qualcosa? Non sono sicuro di come inviare l'utente alla schermata delle impostazioni appropriate per abilitare questo servizio nella mia app.

+0

domanda interessante che il permesso. È possibile con la nuova API ottenere il testo della notifica e la descrizione e così via? – Cilenco

+0

Sì, una volta che il servizio è configurato puoi prendere direttamente le notifiche (http://developer.android.com/reference/android/app/Notification.html) – powerj1984

+0

Ok, bene! Ma non ci sono mathods per ottenere il testo notifica o discription da un 'StatusBarNotification' – Cilenco

risposta

14

Mi manca qualcosa?

Bene, nel tuo ultimo, stai creando una stringa di azioni con un nome di classe. L'approccio "manuale" sarebbe:

Intent intent=new Intent("android.settings.NOTIFICATION_LISTENER_SETTINGS"); 

In termini di perché Android Studio non è trovare Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS, che non posso dire.


UPDATE

Sulla base della discussione nei commenti, Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS non è nel SDK di Android attualmente (contrassegnati con @hide).Inoltre, il manifesto per l'applicazione Impostazioni ha una versione leggermente diversa della stringa di azione:

Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); 
+0

Si scopre che ACTION_NOTIFICATION_LISTENER_SETTINGS ha @hide nella sua documentazione, che Suppongo che non dovrebbe esserci, anche se pensavo che avrebbe solo nascosto la documentazione, non rendendo impossibile risolvere w in Android Studio. Purtroppo cercando nel modo indicato nella sua risposta finisce con uno schianto: causato da: android.content.ActivityNotFoundException: trovate attività per gestire Intent {act = android.settings.NOTIFICATION_LISTENER_SETTINGS – powerj1984

+1

@ powerj1984: "Si scopre che ha ACTION_NOTIFICATION_LISTENER_SETTINGS @hide nella sua documentazione "- Non lo vedo nella fonte a cui sei collegato. "sebbene pensassi che avrebbe solo nascosto la documentazione" - no, '@ hide' rimuove completamente l'elemento dall'SDK. Per quanto riguarda 'ActivityNotFoundException', su cosa stai provando? – CommonsWare

+0

Il numero di linea 667 nella sorgente collegata non ha @hide? Strano, lo fa dalla mia parte. Test su un Nexus 4 con 4.3 – powerj1984

5

addizionale CommonsWare risposta qui è come controllare se si dispone

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { 
    boolean weHaveNotificationListenerPermission = false; 
    for (String service : NotificationManagerCompat.getEnabledListenerPackages(this)) { 
     if (service.equals(getPackageName())) 
      weHaveNotificationListenerPermission = true; 
    } 
    if (!weHaveNotificationListenerPermission) {  //ask for permission 
     Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); 
     startActivity(intent); 
    } 
} 
Problemi correlati