java - 如何仅从我的应用程序获取辅助功能服务手势

标签 java android accessibilityservice

我想在用户进入我的应用程序时收听辅助功能手势。这意味着 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");
    }
}

accessibility_service_config.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"
    />

最佳答案

通过将 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" />

关于java - 如何仅从我的应用程序获取辅助功能服务手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56358702/

相关文章:

java - 在 Java 中,将所有接口(interface)提取到一个单独的项目中的技术动机是什么?

java - Android 应用程序中出现此错误的原因是什么 - channel 已不可恢复地损坏并将被处置

java - 从 Activity 中访问应用程序广播接收器?

android - 使用 AccessibilityService 在屏幕上执行滑动

java - 返回具有特定属性 JDOM 的元素

java - 尝试解决 SSLHandshakeException 时获取 SocketTimeoutException

java - 如何在 Android 中转到下一个 Activity

java - 遍历AccessibilityNodeInfo时Android辅助功能服务中的无限递归

android - 以编程方式单击通知操作按钮

java - 在 Android < 2.0 上更新联系信息