2012-02-16 10 views
13

Estoy tratando de iniciar mi aplicación de AccessibilityService utilizando¿Cómo iniciar AccessibilityService?

Intent mailAccessabilityIntent = new Intent(this, EmailAccessabilityService.class); 
startService(mailAccessabilityIntent); 

mi problema es onServiceConnected() nunca se ha llamado. ¿Cómo comienzo este servicio correctamente?

Respuesta

1

Acabo de hacer esto hoy. Una vez que se crea el servicio y se enumera correctamente en el archivo de manifiesto con el filtro de intención de accesibilidad. Entonces, su servicio aparecerá en servicios de accesibilidad de configuración. Usted lo comienza haciendo clic en él y luego alternándolo. Todavía no sé cómo iniciarlo a través de intentos si es posible. Creo que su GPS Lee solo puede navegar por los usuarios para iniciar el botón.

24

Dado que los servicios de accesibilidad pueden explorar e interactuar con el contenido de la pantalla, un usuario tiene que habilitar explícitamente los servicios en Configuración> Accesibilidad. Una vez que se habilita un servicio, el sistema lo iniciará automáticamente y lo vinculará a las API de accesibilidad.

Asegúrese de que usted declara su servicio en su manifiesto de aplicación:

<service android:name=".MyAccessibilityService" 
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> 
    <intent-filter> 
     <action android:name="android.accessibilityservice.AccessibilityService" /> 
    </intent-filter> 
    . . . 
</service> 

También tendrá que proporcionar la configuración de su servicio, ya sea por razones imperiosas setServiceInfo (AccessibilityServiceInfo) o añadiendo un atributo de meta-datos y XML archivo de configuración.

El atributo de metadatos va en su declaración <servicio> > después de la etiqueta <-filtro de intención y se ve así:

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

La configuración XML que se está haciendo referencia (en este caso, accessibilityservice .xml) se parece a esto:

<accessibility-service 
    android:accessibilityEventTypes="typeViewClicked|typeViewFocused" 
    android:packageNames="foo.bar, foo.baz" 
    android:accessibilityFeedbackType="feedbackSpoken" 
    android:notificationTimeout="100" 
    android:accessibilityFlags="flagDefault" 
    android:settingsActivity="foo.bar.TestBackActivity" 
    android:canRetrieveWindowContent="true" 
    . . . 
/> 

Hay más información sobre qué etiquetas se puede utilizar en http://developer.android.com/reference/android/R.styleable.html#AccessibilityService

+1

realmente te mereces muchos votos favorables. Porque incluso la documentación es incorrecta en http://developer.android.com/guide/topics/ui/accessibility/services.html. Ha mostrado la forma correcta de realizar un servicio de accesibilidad – gaurav414u

+1

@alanv "Una vez que se habilita un servicio, el sistema lo iniciará automáticamente y lo vinculará a las API de accesibilidad". Tengo una pregunta, mi servicio de accesibilidad una vez habilitado el trabajo. Bit cuando falla, los resultados se activan en la configuración de tue pero no da como resultado el servicio de ejecución. ¿Por qué System no reinicia mi servicio después de un bloqueo, pero aún así el resultado está habilitado? – Hoper

+2

@ v1sc3rr4k Una vez que un servicio vinculado al sistema (como el Servicio de accesibilidad) falla, el sistema no lo reinicia hasta que se restablece el permiso o se reinicia el sistema operativo. Intenta revocar el permiso y habilitarlo de nuevo, el servicio comenzará de nuevo. Espero eso ayude. – abhinav