gpt4 book ai didi

android - AccessibilityService 不返回 View ID

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:48 27 4
gpt4 key购买 nike

我正在 Android 中编写辅助功能服务,它依赖于获取当前所选 View 的 View ID,但是在某些设备(Nexus 6P 6.0.1、Samsung Galaxy S6 edge+ 5 + 6.0.1)上我看不到任何 View id 通过和其他人 (HTC One M8 5.0.1) 它通过良好。因为它在某些设备上运行良好,所以我确信我的代码没有问题,但是我在下面发布了一个最小的测试用例。

谁能帮我在所有设备上获取我的服务报告 ID?

A11y 服务

public class ViewIdLoggingAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo source = event.getSource();
if (source == null) {
Log.d("onAccessibilityEvent", "source was null for: " + event);
} else {
String viewIdResourceName = source.getViewIdResourceName();
Log.d("onAccessibilityEvent", "viewid: " + viewIdResourceName);
}
}

@Override
public void onInterrupt() {
Log.d("!# onInterrupt", "called");
}
}

AndroidManifest.xml

<manifest package="com.example.a11yservice"
xmlns:android="http://schemas.android.com/apk/res/android"
>

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>

<service
android:name=".ViewIdLoggingAccessibilityService"
android:label="@string/view_id_logging_service_label"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
>
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/serviceconfig"
/>
</service>

</application>

</manifest>

服务配置文件

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:notificationTimeout="100" />

最佳答案

这是一个已知问题,不久前已发布到 AOSP 问题跟踪器。您可以在此处查看问题状态:“Accessibility Issue: flagReportViewIds has no effect on real devices in Android M ”。

不幸的是,即使在最新的 Android 7.0 上也存在问题,但我找到了简单的解决方法。您可以在 AccessibilityNodeInfo 对象上调用 refresh() 方法来刷新它并收集所有丢失的数据,包括 id。

类似的东西:

public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo ani = event.getSource();
if (ani != null) {
ani.refresh(); // to fix issue with viewIdResName = null on Android 6+
}
}

关于android - AccessibilityService 不返回 View ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36793154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com