2012-06-18 11 views
11

Quiero registrar todos los eventos de brindis en Android ics (4.0.3), pero no pude registrar ningún evento del sistema. ¡El servicio simplemente no comenzó!no se inició el servicio de accesibilidad

De acuerdo con esta pregunta: onAccessibilityEvent(AccessibilityEvent event) not intercepting notification

MyAccessibilityService.java

package com.test.toasts2; 

import android.accessibilityservice.AccessibilityService; 
import android.accessibilityservice.AccessibilityServiceInfo; 
import android.app.Notification; 
import android.os.Parcelable; 
import android.util.Log; 
import android.view.accessibility.AccessibilityEvent; 
import android.widget.Toast; 

public class MyAccessibilityService extends AccessibilityService { 


    public static final String TAG = "volumeMaster"; 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) 
    { 
     Log.v(TAG, "***** onAccessibilityEvent"); 
     Toast.makeText(getApplicationContext(), "Got event from: " + event.getPackageName(), Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onInterrupt() 
    { 
     Log.v(TAG, "***** onInterrupt"); 
    } 

    @Override 
    public void onServiceConnected() 
    { 
     Log.v(TAG, "***** onServiceConnected");  


     AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
     info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
     info.notificationTimeout = 100; 
     info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK; 
     setServiceInfo(info); 

    } 
} 

Toast2Activity.java

package com.test.toasts2; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Toast; 

public class Toast2Activity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent i = new Intent(this, MyAccessibilityService.class); 
     startService(i); 
    } 
} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test.toasts2" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="15" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
<service android:name=".MyAccessibilityService" android:label="@string/app_name" android:enabled="true" android:exported="false"> 
     <intent-filter> 
      <action android:name="android.accessibilityservice.AccessibilityService" /> 
     </intent-filter> 

</service> 

     <activity 
      android:name=".Toast2Activity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

que incluyen la etiqueta de actividad en el manifiesto (servicio para iniciar el arranque de aplicaciones), y también trataron de quitar. Nada ha cambiado. El servicio simplemente no se inició. No recibo notificación en log cat (Log.v in on ServiceConected).

Estoy compilando esto como una aplicación normal (no aplicación de sistema), Android 4.0.3. ¿Estoy haciendo algo mal?

proyecto adjunto (puede ser error está en otro lugar, o tal vez estoy recopilando mal): https://dl.dropbox.com/u/1928109/toast2.zip

Respuesta

32

necesita habilitar el servicio de accesibilidad desde el menú de configuración del sistema:

  • Instalar su aplicación en el dispositivo de prueba.

  • Con la aplicación instalada en el dispositivo, cambie la configuración siguiente en el dispositivo: Pantalla

    Inicio> Configuración del sistema> Accesibilidad> Servicios de Accesibilidad> Toast2> Cambio de Off a On,

    donde Toast2 es el nombre de su aplicación.

  • Luego, ejecute su aplicación.

AFAIK no hay ningún método para establecer la accesibilidad programáticamente al modo Encendido desde su aplicación. Como solución, puede pedir al usuario que cambie el ajuste y si están de acuerdo, haga clic en un botón, el lanzamiento de la configuración del sistema de accesibilidad de este modo:

Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); 
startActivityForResult(intent, 0); 
+6

Parece que no puedo encontrar Servicios de accesibilidad en Android 4.2.1 – Klaasvaak

+0

Tu código es realmente útil. Gracias por eso. ¿Hay alguna forma de activar el servicio de accesibilidad a través del código? – Kameswari

+0

@Kameswari No hay manera de hacer eso, hasta donde yo sé. –

Cuestiones relacionadas