首页 > 解决方案 > 如何仅从我的应用程序获取辅助功能服务手势

问题描述

当用户在我的应用程序中时,我想听可访问性手势。这意味着当我的应用程序在前台时应该调用 onGusture,但无论我的应用程序是否在前台,onGesture 总是会调用。我尝试在 Java 和 XML 中设置包名称,但它不起作用。请看看这个告诉我我做错了什么

MyAccessibilityService.java

public class MyAccessibilityService extends AccessibilityService {
private String TAG="MyAccessibilityServiceTAG";


    @Override
    protected boolean onGesture(int gestured) {//This method always called, I want this method only called when my App in foreground  
        Log.d(TAG,"onGesture:"+gestureId);
        Toast.makeText(getApplicationContext(),"Gesture: "+gestureId,Toast.LENGTH_SHORT).show();
        return super.onGesture(gestureId);

    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

        System.out.println("Event Occurred");
        Log.d(TAG, "onAccessibilityEvent: event=" + event);
        AccessibilityNodeInfo nodeInfo = event.getSource();
        if (null == nodeInfo) return;


    }

    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
                AccessibilityServiceInfo info = getServiceInfo();
        // your other assignments
        info.packageNames = new String[]{"com.vorail.ttsdemo"};
        setServiceInfo(info);
    }

    @Override
    public void onInterrupt() {
        Log.d(TAG,"Accessibility Interrupted" );

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG,"Service Destroyed");
    }
}

无障碍服务配置.xml

 <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
                           android:description="@string/app_name"
                           android:accessibilityEventTypes="typeTouchExplorationGestureStart"
                           android:canRequestFilterKeyEvents="false"

                           android:accessibilityFeedbackType="feedbackSpoken"
                           android:packageNames="com.vorail.ttsdemo"
                           android:notificationTimeout="100"
                           android:settingsActivity="com.vorail.ttsdemo.MainActivity"
                           android:accessibilityFlags="flagDefault|flagRequestTouchExplorationMode"
                           android:canRequestTouchExplorationMode="true"
    />

标签: javaandroidaccessibilityservice

解决方案


通过设置android:packageNames特定于您的应用程序的内容,您将过滤传入事件:

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeViewClicked|typeViewFocused|typeTouchInteractionStart|typeTouchInteractionEnd|typeTouchExplorationGestureStart|typeTouchExplorationGestureEnd"
    android:packageNames="com.app.yourapplication"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canPerformGestures="true"
    android:canRetrieveWindowContent="true" />

推荐阅读