AccessibilityService已启动,但未在JellyBean上接收AccessibilityEvents

时间:2012-08-18 15:35:40

标签: android android-4.2-jelly-bean accessibilityservice

我有一个AccessibilityService,它会读出任何传入的通知。它适用于ICS及以下版本,但已停止使用JB。

以下是清单和代码:

<service
        android:name=".Services.InstantMessengerJb"
        android:enabled="@bool/is_post_jb"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
        tools:ignore="ExportedService" >
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibility_service_config" />

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

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    SettingsClass.logMe(tag, "New event!");
    new AccessibilityProcessing(this, event);
}

@Override
protected void onServiceConnected() {
    if (isInit) {
        return;
    }
    SettingsClass.logMe(tag, "We are connected!");
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
    setServiceInfo(info);
    isInit = true;
}

如前所述,它确实适用于所有preJB设备,如魅力,但在JB上服务启动(我得到“我们已连接”),但没有一个事件被触发。

代码有什么问题吗?

2 个答案:

答案 0 :(得分:17)

这是我开始工作的方式:

  1. 对服务类进行子类化,因此有2个版本。

  2. 在res / values目录中有一个bools.xml文件,在res / values-v16目录中有一个

  3. 在v16中将is_jelly_bean布尔值设置为true,在res / values目录版本中将is_not_jelly_bean设置为

  4. 在清单中有这样的东西

    <service android:name=".service.MainRunningService" android:enabled="@bool/is_jelly_bean"
        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>
    
    <service android:name=".service.MainRunningServicePreJellyBean" 
        android:enabled="@bool/is_not_jelly_bean">
        <intent-filter >
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibilityservice" />
    </service>
    
  5. 在res / xml目录中调用accessibilityservice.xml

    中的辅助服务xml文件

    它有这样的东西:

    <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeNotificationStateChanged"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:notificationTimeout="100"
    android:description="@string/description_that_shows_on_the_accessibility_page" />
    

答案 1 :(得分:2)

我在Android 4.1.1中遇到过这个问题。在我禁用并重新启用辅助功能服务之前,辅助功能服务不会接收事件。

要解决此问题,我在 accessibilityservice.xml$(document).ready(function(){ $('.btn').on('click',function(e){ e.preventDefault(); var inpx= $('.inBox').val(); $('#mainbox').append(inpx); }); }); 中定义了辅助功能服务参数。

就我而言,没有必要定义两种不同的Android版本依赖性辅助功能。