gpt4 book ai didi

android - 获取android屏幕的文字内容

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

有什么办法可以获取到android手机屏幕上显示的文字内容。它可以通过任何 Android 应用程序。

enter image description here

例如在上面链接的图像中,我希望获取图像中的所有文本(从“Larry Page”开始到“Fred Smith”结束以及屏幕上所有单词的位置)及其在屏幕上的相应位置。

最佳答案

这可以使用 Android 的辅助功能来实现(就像通用复制应用程序所做的那样)。

您需要做的是实现一个名为 AccessabilityService 的类它可以通过监听器访问所有屏幕 UI。

为此,您需要在 list 中声明它:

 <service android:name=".MyAccessibilityService">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" />

@xml/accessibilityservice 文件是你配置服务的地方,比如要监听哪个包或你想获得什么样的事件:

<accessibility-service
android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
android:packageNames="com.example.android.myFirstApp, com.example.android.mySecondApp"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:settingsActivity="com.example.android.apis.accessibility.TestBackActivity"
android:canRetrieveWindowContent="true"/>

在类中覆盖方法:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.v(TAG, String.format(
"onAccessibilityEvent: type = [ %s ], class = [ %s ], package = [ %s ], time = [ %s ], text = [ %s ]",
getEventType(event), event.getClassName(), event.getPackageName(),
event.getEventTime(), getEventText(event)));
}

在该方法中,您应该在 UI 中找到所需的文本/TextView/EditText 并从中提取所需的文本。

注意:这种方式需要 Accessibility 权限,只有用户可以给你,它不能在运行时完成。

您可以在 Android 文档中阅读有关 how to implement an AccessabilityService 的更多信息

编辑:在评论中的问题之后,我添加了代码以从屏幕中的所有文本组件中读取:

    private void printAllViews(AccessibilityNodeInfo mNodeInfo) {
if (mNodeInfo == null) return;
String log ="";
for (int i = 0; i < mDebugDepth; i++) {
log += ".";
}
log+="("+mNodeInfo.getText() +" <-- "+
mNodeInfo.getViewIdResourceName()+")";
Log.d(TAG, log);
if (mNodeInfo.getChildCount() < 1) return;
mDebugDepth++;

for (int i = 0; i < mNodeInfo.getChildCount(); i++) {
printAllViews(mNodeInfo.getChild(i));
}
mDebugDepth--;
}

只是不要忘记像这样初始化 AccessibilityNodeInfo 和深度计数器:

public void onAccessibilityEvent(AccessibilityEvent event) {
mDebugDepth = 0;
mNodeInfo = event.getSource();
printAllViews(mNodeInfo);
...
}

关于android - 获取android屏幕的文字内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909926/

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