[英]android accessibility service accessibility button not working
我正在尝试创建一个 android 辅助功能服务,该服务使用屏幕辅助功能按钮 function,如此处所述https://developer.android.com/guide/topics/ui/accessibility/service#button当本文中的代码在我的上运行时测试设备 (moto z4) 运行 android 10. function accessibilityButtonController.isAccessibilityButtonAvailable();
返回假。 尽管根据上面提供的链接,这个 function 应该返回 false 的唯一原因是在我的测试设备没有软件渲染导航的设备上。 这是我正在使用的示例:
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() {
}
}
您是否定义了标志 FLAG_REQUEST_ACCESSIBILITY_BUTTON?
根据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.