Servicio de accesibilidad de Android detecta notificación

Estoy intentando que mi aplicación detecte cada vez que se muestre una notificación. Lo he habilitado en la aplicación de configuración y onServiceConnected se llama, sin embargo, cuando crea una notificación o recibo un correo electrónico a través de la aplicación de Gmail, no pasa nada, onAccessibilityEvent no se llama.

Manifiesto de Android:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.slide" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.GET_TASKS"/> <application android:label="Slide" android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme"> <activity android:name=".Settings" android:label="Slide"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".Tools" android:label="Slide" android:theme="@android:style/Theme.Translucent.NoTitleBar"> </activity> <service android:name=".LocalService"/> <service android:name=".NotificationService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" android:label="Slide" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService"/> </intent-filter> </service> </application> 

NotificationService.java

 package com.test.slide; import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityServiceInfo; import android.view.accessibility.AccessibilityEvent; public class NotificationService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent event) { System.out.println("onAccessibilityEvent"); if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { System.out.println("notification: " + event.getText()); } } @Override protected void onServiceConnected() { System.out.println("onServiceConnected"); AccessibilityServiceInfo info = new AccessibilityServiceInfo(); info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; info.notificationTimeout = 100; info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK; setServiceInfo(info); } @Override public void onInterrupt() { System.out.println("onInterrupt"); } } 

Gracias por cualquier ayuda.

Los servicios de accesibilidad en Android 4.0 y superiores pueden comportarse de manera extraña si no hay ninguna etiqueta de meta-datos de accesibilidad definida en el manifiesto. Trate de definir los metadatos como en los ejemplos siguientes. Debe seguir utilizando setServiceInfo () para mantener la compatibilidad con dispositivos anteriores a 4.0.

Además, recomendaría especificar un tipo de retroalimentación que sea específico para su servicio, en lugar de usar "todos".

AndroidManifest.xml

  <service . . . android:name=".NotificationService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" > <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" /> </service> 

Res / xml / accessibilityservice.xml

 <?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeNotificationStateChanged" android:accessibilityFeedbackType="feedbackAllMask" android:notificationTimeout="100" /> 

Se ha producido un error en tu tipo de retroalimentación. Corregido a continuación. Sin embargo, considere el uso de un tipo de retroalimentación más específico.

NotificationService.java

 @Override protected void onServiceConnected() { AccessibilityServiceInfo info = new AccessibilityServiceInfo(); info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK; info.notificationTimeout = 100; setServiceInfo(info); } 

La aplicación que utiliza AccessibilityService necesita tener un permiso de configuración> Accesibilidad para acceder a los eventos del sistema. Permitir permiso de configuración. Esto puede funcionar

Revise este enlace

El servicio de accesibilidad no se ha iniciado

  • Pérdida de memoria android en el servicio de notificación
  • El ID de registro de la aplicación no se genera en GCM Android
  • Android: obtener un identificador único de notificación
  • Notificación de color de texto en Galaxy S 2.3.3
  • Lo que está mal con mi código - Notificación - no hay sonido no vibrar
  • ¿Es posible agregar a los oyentes onclick a las vistas remotas en android
  • Error de token no registrado después de enviar una notificación
  • ¿Dónde se muestran las notificaciones en Chrome en Android?
  • ¿Cómo comprobar si los usuarios de cuenta de google se ha añadido en el dispositivo antes de iniciar el procedimiento de GCM?
  • ¿Cómo eliminar una notificación push de Android desde el centro de notificaciones cuando la aplicación se inicia con su icono de lanzador?
  • ¿Cómo enviar parámetros desde un clic de notificación a una actividad?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.