sirve servicios que puedo programacion problemas para los descargar desactivar desactivan activar accesibilidad android notifications accessibility android-a11y

servicios - Servicio de accesibilidad de Android



problemas de accesibilidad android (3)

Intento escribir un servicio de accesibilidad para Android muy básico que muestra un mensaje y vibra cuando se produce alguna notificación. Intenté probarlo enviando un correo electrónico a mi teléfono (me imaginé que mostraría alguna notificación). Pero no he visto ninguna notificación.

Mi código de servicio parece

public class NotifierService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent evt) { Toast.makeText(this, "Got event from " + evt.getPackageName(), Toast.LENGTH_SHORT) .show(); Vibrator v = (Vibrator) getSystemService(VIBRATOR_SERVICE); v.vibrate(new long[] { 0, 250, 250, 250, 250, 250, 250, 250, 250 }, -1); } @Override public void onInterrupt() { } }

He verificado que el servicio se está ejecutando y lo he habilitado en el menú de accesibilidad del teléfono. Y el manifiesto se ve así (se eliminan algunas partes que no son relevantes):

<uses-permission android:name="android.permission.VIBRATE" /> <application> <activity android:name=".MyActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".NotifierService" android:enabled="true" > <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> </service> </application>

MyActivity es solo una actividad con un botón para iniciar / detener el servicio.


Agregué un elemento de metadatos dentro de la etiqueta de servicio

<meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" />

Y en el archivo de recursos xml tengo

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeNotificationStateChanged" android:accessibilityFeedbackType="feedbackAllMask" android:notificationTimeout="100" />


El servicio de accesibilidad es excesivo para sus propósitos, debe usar NotificationListenerService . El NotificationListenerService es mucho más fácil de implementar y más seguro para los usuarios (motivos de privacidad).


Otra forma de configurar el servicio de accesibilidad es Anular el método OnServiceConnected() de su AccessibilityService desde el código de Java.

@Override protected void onServiceConnected() { AccessibilityServiceInfo info = getServiceInfo(); info.packageNames = new String[] { "com.packagename1","com.packagename2" }; info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; this.setServiceInfo(info); }

Referencia