# AI-ScreenReader **Repository Path**: dowler168/ai-screen-reader ## Basic Information - **Project Name**: AI-ScreenReader - **Description**: AI手机屏幕阅读 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-10 - **Last Updated**: 2026-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 手机屏幕阅读器 这个仓库包含一个原生 Android 屏幕阅读器实现,以及一个 iOS 伴随 App。 ## 平台能力边界 - Android:使用 `AccessibilityService` 实现。用户授权后,可以读取当前窗口可访问性树里的文字,用 Android TextToSpeech 朗读,显示无障碍悬浮控制条,并对可滚动内容执行向下翻页。 - iOS:实现为 App 内 SwiftUI 阅读器。iOS 不允许第三方 App 读取或控制其他 App 的屏幕内容。需要跨 App 朗读时,应使用 iOS 系统自带的 VoiceOver 或“朗读屏幕”。 ## Android 项目路径:`android/app` 核心文件: - `android/app/src/main/java/com/screenreader/app/ScreenReaderAccessibilityService.java` - `android/app/src/main/java/com/screenreader/app/MainActivity.java` - `android/app/src/main/res/xml/accessibility_service_config.xml` 构建方式: - 推荐:用 Android Studio 打开仓库根目录,等待 Gradle 同步后运行 `android:app`。 - 如果本机安装了 Gradle,可在仓库根目录运行: ```bash gradle :android:app:assembleDebug ``` 当前仓库没有提交 Gradle wrapper;本机可临时使用已有的 Gradle 7.4.2 缓存: ```powershell & "$env:USERPROFILE\.gradle\wrapper\dists\gradle-7.4.2-bin\48ivgl02cpt2ed3fh9dbalvx8\gradle-7.4.2\bin\gradle.bat" :android:app:assembleDebug ``` Android 配置为 `minSdk 26`、`compileSdk 33`,当前机器已有 `C:\Program Files (x86)\Android\android-sdk`。 ### 真机联调 前置条件: - Android Studio 或 Android SDK 已安装。当前机器已发现 Android SDK:`C:\Program Files (x86)\Android\android-sdk`。 - 手机开启“开发者选项”和“USB 调试”。 - 电脑能运行 `adb devices` 并看到手机处于 `device` 状态。 命令行安装和日志: ```bash gradle :android:app:assembleDebug adb install -r android/app/build/outputs/apk/debug/app-debug.apk adb logcat | grep screenreader ``` Windows PowerShell 可用: ```powershell gradle :android:app:assembleDebug adb install -r android\app\build\outputs\apk\debug\app-debug.apk adb logcat | Select-String screenreader ``` 也可以直接用 Android Studio 点击 Run 安装到手机。 本仓库还提供了 PowerShell 脚本,会自动接入当前机器已有的 Android SDK: ```powershell .\scripts\adb-devices.ps1 .\scripts\android-build.ps1 .\scripts\android-install.ps1 .\scripts\adb-logcat.ps1 ``` 当前环境说明: - `adb` 已可用,路径为 `C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe`。 - 本机已有 Gradle 7.4.2 缓存,构建脚本会使用它。 - Android Gradle Plugin 还需要从 Google/Maven 仓库下载;如果网络不可达,构建会停在插件解析阶段。 - Android Studio 未在常见目录中检测到。可用管理员终端运行 `choco install androidstudio -y`,或用官方安装器安装。 运行步骤: 1. 安装并打开 App。 2. 在 Android 无障碍设置中开启“屏幕阅读器服务”。 3. 打开任意有可访问文字的页面。 4. 使用悬浮控制条: - `朗读`:朗读当前屏幕。 - `停止`:停止朗读。 - `下一页`:向下翻页一次并继续朗读。 - `自动`:持续朗读并翻页,直到没有更多可滚动内容。 注意: - Android 只能读取暴露到无障碍树里的内容。没有标签的图片、受保护画面、DRM 内容、密码字段,以及故意隐藏无障碍文字的 App,可能无法朗读。 - 自动翻页使用 `AccessibilityNodeInfo.ACTION_SCROLL_FORWARD`,作用于当前窗口中找到的第一个可滚动节点。 - 如果无障碍树文字过少,App 会临时隐藏悬浮条、截取屏幕并使用 ML Kit 中文 OCR 识别文字,再进入同一套朗读队列。这个能力需要 Android 11 及以上,并要求重新开启一次无障碍服务以授予截图能力。 ## 浏览器联调 项目提供了一个无需构建的浏览器联调页: - `web-debug/index.html` 直接用 Chrome、Edge 或 Safari 打开该文件,即可测试: - 朗读 - 停止 - 下一页 - 自动滚动并连续朗读 这个页面使用浏览器 Web Speech API,只用于验证控制流程和交互状态;它不能读取 Android 或 iOS 上其他 App 的真实屏幕内容。 ## iOS 项目路径:`ios/ScreenReader/ScreenReader.xcodeproj` 在 macOS 上用 Xcode 打开: ```bash open ios/ScreenReader/ScreenReader.xcodeproj ``` iOS App 提供: - 粘贴或输入文字的阅读区。 - 基于 `AVSpeechSynthesizer` 的语音朗读。 - App 内停止和自动滚动控制。 - 打开设置的入口,以及系统级朗读功能提示。 iOS 跨 App 朗读: 1. 打开“设置”。 2. 进入“辅助功能”。 3. 使用“朗读内容 > 朗读屏幕”,或启用 VoiceOver。 ## 实现边界 Android 版本可以实现你要的系统级行为,因为 Android 通过用户授权的无障碍服务开放了这类能力。iOS 版本不能在第三方 App 中实现同样的跨 App 屏幕读取和控制,因为受 Apple 沙盒和辅助功能模型限制;因此 iOS App 只做 App 内朗读,并引导用户使用系统自带功能完成跨 App 朗读。