Domanda

Sto cercando di avviare il mio servizio di accessibilità su Android 4.0.4 ma non sono in grado di iniziare. Funziona bene su 2.3.3. Ma nessuna fortuna per la versione aggiornata. Ho provato questo suggerimento.AccessibilityService viene avviato ma non riceve accessibilità su JellybeanEcco il mio codice.

Le notifiche della classe pubblica estende l'accessibilitàService {

static final String TAG = "NotificationService";


private String getEventType(AccessibilityEvent event) {
    switch (event.getEventType()) {
        case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
            return "TYPE_NOTIFICATION_STATE_CHANGED";
        case AccessibilityEvent.TYPE_VIEW_CLICKED:
            return "TYPE_VIEW_CLICKED";
        case AccessibilityEvent.TYPE_VIEW_FOCUSED:
            return "TYPE_VIEW_FOCUSED";
        case AccessibilityEvent.TYPE_VIEW_LONG_CLICKED:
            return "TYPE_VIEW_LONG_CLICKED";
        case AccessibilityEvent.TYPE_VIEW_SELECTED:
            return "TYPE_VIEW_SELECTED";
        case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
            return "TYPE_WINDOW_STATE_CHANGED";
        case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
            return "TYPE_VIEW_TEXT_CHANGED";
    }
    return "default";
}

private String getEventText(AccessibilityEvent event) {
    StringBuilder sb = new StringBuilder();
    for (CharSequence s : event.getText()) {
        sb.append(s);
    }
    return sb.toString();
}




  @Override
  public void onAccessibilityEvent(AccessibilityEvent event) {
    Toast.makeText(this, "Got event from " + event.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);

    Log.v(TAG, String.format(
            " onAccessibilityEvent: [type] %s [class] %s [package] %s [time] %s [text] %s",
            getEventType(event), event.getClassName(), event.getPackageName(),
            event.getEventTime(), getEventText(event)));

  }

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

  @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        Log.v(TAG, "onServiceConnected");
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.flags = AccessibilityServiceInfo.DEFAULT;
        info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
        setServiceInfo(info);
    }

}

E manifest è:

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <uses-permission android:name="android.permission.VIBRATE" />


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.watchservice.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".NotificationService" android:enabled="true" 
            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>
    </application>

</manifest>

Suggermi, dove sto sbagliando?

È stato utile?

Soluzione

Ho aggiunto un meta tag in manifest per errore, che è fondamentalmente per una versione più alta, quindi dopo aver rimosso il meta tag dall'applicazione Android 4.0.4, funziona.

Se ho questo tag nel file manifest, non funziona, come suggerito era per la versione più recente di Android.

<meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top