我正在开发一个使用可访问性服务的Android应用程序,当用户打开特定的应用程序(如钢琴、游戏等)时,我希望禁用按触探索。
我看了setTouchExplorationPassthroughRegion()的API文档
public void setTouchExplorationPassthroughRegion (int displayId,
Region region)启用AccessibilityServiceInfo#FLAG_REQUEST_TOUCH_EXPLORATION_MODE时,此函数请求从屏幕的指定区域开始触摸交互,绕过触摸资源管理器,直接进入视图层次结构。每台显示器只能有一次触摸探索通过区域.请求一个新的触摸探索通过区域清除现有的一个。若要禁用此传递并返回到原始行为,请传入一个空区域。当AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE被禁用时,此函数没有任何效果。
所以我在Android-11中尝试了上面的功能,但是按触摸探索并不会被禁用。在某些应用程序中,我能做些什么来禁用按触探索。
注意:用户可能正在运行他自己的可访问性服务,比如TalkBack屏幕阅读器,它也使用按触摸探索特性。
发布于 2022-08-29 08:06:40
此功能适用于Android 11及以上,并具有适当的上下文和区域。
//Disabling explore by touch
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
setTouchExplorationPassthroughRegion(
Display.DEFAULT_DISPLAY, getRegionOfFullScreen(name_of_the_view.getContext()));
}
private Region getRegionOfFullScreen(Context context) {
final DisplayMetrics metrics = new DisplayMetrics();
final Display display;
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
display = dm.getDisplay(Display.DEFAULT_DISPLAY);
if (display == null) {
return new Region();
} else {
display.getRealMetrics(metrics);
return new Region(0, 0, metrics.widthPixels, metrics.heightPixels);
}
}如果您的视图未激活或未使用以下代码删除,请不要忘记启用逐点浏览功能
//Enabling explore by touch
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
setTouchExplorationPassthroughRegion(Display.DEFAULT_DISPLAY, new Region());
}https://stackoverflow.com/questions/68632056
复制相似问题