简体   繁体   English

android 无障碍服务无障碍按钮不工作

[英]android accessibility service accessibility button not working

I am attempting create an android accessibility service that uses the on screen accessibility button function as described here https://developer.android.com/guide/topics/ui/accessibility/service#button when the code from this article is ran on my test device (moto z4) running android 10. The function accessibilityButtonController.isAccessibilityButtonAvailable();我正在尝试创建一个 android 辅助功能服务,该服务使用屏幕辅助功能按钮 function,如此处所述https://developer.android.com/guide/topics/ui/accessibility/service#button当本文中的代码在我的上运行时测试设备 (moto z4) 运行 android 10. function accessibilityButtonController.isAccessibilityButtonAvailable(); returns false.返回假。 although according to the link provided above the only reason that this function should return false is on a device without software rendered navigation which my test device has.尽管根据上面提供的链接,这个 function 应该返回 false 的唯一原因是在我的测试设备没有软件渲染导航的设备上。 This is the sample I am using:这是我正在使用的示例:


import android.accessibilityservice.AccessibilityButtonController;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;

public class MyAccessibilityService extends AccessibilityService {
    private AccessibilityButtonController accessibilityButtonController;
    private AccessibilityButtonController
            .AccessibilityButtonCallback accessibilityButtonCallback;
    private boolean mIsAccessibilityButtonAvailable;

    @Override
    protected void onServiceConnected() {
        Log.d("info", "connect");
        accessibilityButtonController = getAccessibilityButtonController();
        mIsAccessibilityButtonAvailable =
                accessibilityButtonController.isAccessibilityButtonAvailable();

        if (!mIsAccessibilityButtonAvailable) {
            Log.d("info", "not supported");
            return;
        }

        AccessibilityServiceInfo serviceInfo = getServiceInfo();
        serviceInfo.flags
                |= AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON;
        setServiceInfo(serviceInfo);

        accessibilityButtonCallback =
                new AccessibilityButtonController.AccessibilityButtonCallback() {
                    @Override
                    public void onClicked(AccessibilityButtonController controller) {
                        Log.d("MY_APP_TAG", "Accessibility button pressed!");

                        // Add custom logic for a service to react to the
                        // accessibility button being pressed.
                    }

                    @Override
                    public void onAvailabilityChanged(
                            AccessibilityButtonController controller, boolean available) {
                        if (controller.equals(accessibilityButtonController)) {
                            mIsAccessibilityButtonAvailable = available;
                        }
                    }
                };

        if (accessibilityButtonCallback != null) {
            accessibilityButtonController.registerAccessibilityButtonCallback(
                    accessibilityButtonCallback, null);
        }
    }
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
    }

    @Override
    public void onInterrupt() {
    }


}

Did you define the flag FLAG_REQUEST_ACCESSIBILITY_BUTTON?您是否定义了标志 FLAG_REQUEST_ACCESSIBILITY_BUTTON?

According to the AccessibilityServiceInfo documentation , the flag FLAG_REQUEST_ACCESSIBILITY_BUTTON must be defined in accessibilityFlags of the metadata of the service if targeting APIs greater than API 29根据AccessibilityServiceInfo 文档,如果目标 API 大于 API 29,则必须在服务元数据的 accessibilityFlags 中定义标志 FLAG_REQUEST_ACCESSIBILITY_BUTTON 29

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault|flagReportViewIds|flagRetrieveInteractiveWindows|flagRequestAccessibilityButton"
android:accessibilityFeedbackType="feedbackVisual"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"/>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM