# AIAssistantForElderly **Repository Path**: gnitimg/aafe ## Basic Information - **Project Name**: AIAssistantForElderly - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-23 - **Last Updated**: 2026-02-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI 辅助中老年人操作 Android 应用 基于 Android 无障碍服务的离线 AI 辅助操作系统,帮助中老年人更便捷地使用手机应用。 ## 📋 项目概述 本项目实现了以下核心功能: 1. **智能点击**:通过文本识别自动点击屏幕按钮 2. **任务分发**:解析 JSON 格式的任务列表并依次执行 3. **邮件报告**:将操作结果通过邮件发送给指定接收者 ## 🎯 核心功能 ### 1. MyAccessibilityService.kt - 无障碍服务 #### `clickOnText(text: String): Boolean` 遍历屏幕查找包含指定文字的按钮并点击。 **特性:** - 递归遍历节点树 - 支持 `text` 和 `contentDescription` 匹配 - 三种点击方式:直接点击、父节点点击、手势模拟 - 不区分大小写 **示例:** ```kotlin val success = myAccessibilityService.clickOnText("去哪儿") if (success) { Log.d("TAG", "成功点击按钮") } ``` #### `inputText(text: String): Boolean` 在当前聚焦的输入框中输入文本。 **示例:** ```kotlin myAccessibilityService.inputText("上海") ``` #### `executeTaskList(tasksJson: String): OperationReport` 执行 JSON 格式的任务列表。 **支持的操作:** - `click`: 点击包含指定文本的按钮 - `input`: 输入文本到聚焦的输入框 **示例:** ```kotlin val tasksJson = """ [ {"action": "click", "target": "去哪儿"}, {"action": "input", "target": "上海"}, {"action": "click", "target": "搜索"} ] """ CoroutineScope(Dispatchers.Main).launch { val report = myAccessibilityService.executeTaskList(tasksJson) Log.d("TAG", "成功: ${report.successCount}/${report.totalTasks}") } ``` ### 2. TaskModels.kt - 数据模型 #### AITask ```kotlin data class AITask( val action: String, // "click" 或 "input" val target: String // 目标文本或输入内容 ) ``` #### TaskResult ```kotlin data class TaskResult( val task: AITask, val success: Boolean, val message: String, val timestamp: Long ) ``` #### OperationReport 包含完整的操作报告,可转换为邮件正文。 ### 3. EmailSender.kt - 邮件发送 #### 配置邮箱 ```kotlin // Gmail 配置 val emailConfig = EmailConfig( smtpHost = "smtp.gmail.com", smtpPort = "587", senderEmail = "your-email@gmail.com", senderPassword = "your-app-password", // 应用专用密码 recipientEmail = "recipient@example.com", useTLS = true ) // QQ 邮箱配置 val qqConfig = EmailConfig( smtpHost = "smtp.qq.com", smtpPort = "465", senderEmail = "your-qq@qq.com", senderPassword = "authorization-code", // 授权码 recipientEmail = "recipient@example.com", useTLS = false ) ``` #### 发送报告 ```kotlin // 方式 1: 自动发送 myAccessibilityService.executeTasksWithEmailReport(tasksJson, emailConfig) { report -> Log.d("TAG", "完成: ${report.successCount}/${report.totalTasks}") } // 方式 2: 手动发送 CoroutineScope(Dispatchers.IO).launch { val report = withContext(Dispatchers.Main) { myAccessibilityService.executeTaskList(tasksJson) } EmailSender.sendReport(emailConfig, report) } ``` ## 🛠️ 技术栈 - **语言**: Kotlin - **最低 SDK**: Android 9.0 (API 28) - **依赖库**: - Gson (JSON 解析) - JavaMail (邮件发送) - Kotlin Coroutines (异步处理) ## 📦 依赖配置 已在 `build.gradle.kts` 中添加: ```kotlin dependencies { // JSON 处理 implementation("com.google.code.gson:gson:2.10.1") // 邮件发送 implementation("com.sun.mail:android-mail:1.6.7") implementation("com.sun.mail:android-activation:1.6.7") // 协程 implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") } ``` ## 🚀 使用步骤 ### 1. 配置邮箱 #### Gmail 1. 启用两步验证:Google 账户 -> 安全性 -> 两步验证 2. 生成应用专用密码:Google 账户 -> 安全性 -> 应用密码 3. 使用生成的 16 位密码作为 `senderPassword` #### QQ 邮箱 1. 登录 QQ 邮箱网页版 2. 设置 -> 账户 -> POP3/IMAP/SMTP 服务 3. 开启 SMTP 服务,获取授权码 4. 使用授权码作为 `senderPassword` ### 2. 启用无障碍服务 1. 打开设置 -> 无障碍 2. 找到"已下载的应用" -> "AI Assistant For Elderly" 3. 打开服务开关 4. 授予必要权限 ### 3. 执行任务 参考 `UsageExampleActivity.kt` 中的示例代码。 ## 📧 邮件报告示例 ``` === AI 辅助操作报告 === 开始时间: 2026-01-18 14:30:15 结束时间: 2026-01-18 14:30:23 总任务数: 4 成功: 3 失败: 1 === 详细结果 === 任务 1: click - 去哪儿 状态: ✓ 成功 信息: 成功点击 '去哪儿' 时间: 14:30:16 任务 2: input - 上海 状态: ✓ 成功 信息: 成功输入文本 时间: 14:30:18 任务 3: click - 搜索 状态: ✓ 成功 信息: 成功点击 '搜索' 时间: 14:30:20 任务 4: click - 不存在的按钮 状态: ✗ 失败 信息: 未找到 '不存在的按钮' 时间: 14:30:22 ``` ## 🔮 MediaPipe LLM 集成建议 ### 推荐集成方式 1. **语音转任务** ``` 用户语音:"帮我订一张去上海的火车票" ↓ MediaPipe LLM 处理 ↓ JSON 任务列表: [ {"action": "click", "target": "12306"}, {"action": "click", "target": "车票预订"}, {"action": "input", "target": "上海"}, ... ] ``` 2. **屏幕内容分析** ``` 屏幕截图 + OCR ↓ MediaPipe LLM 分析 ↓ 可点击元素列表 + 智能推荐 ``` 3. **错误恢复** ``` 任务失败 ↓ LLM 分析失败原因 ↓ 生成替代方案 ``` ### 实现架构 ``` 用户指令 (语音/文本) ↓ MediaPipe LLM (离线推理) ↓ TaskParser.parseTaskList(json) ↓ MyAccessibilityService.executeTaskList() ↓ EmailSender.sendReport() ↓ 用户收到邮件报告 ``` ## ⚠️ 注意事项 ### 权限 - 无障碍服务权限(必须) - 网络权限(发送邮件) - 存储权限(可选,用于日志) ### 线程安全 - 无障碍操作必须在主线程执行 - 网络操作必须在后台线程执行 - 已使用 Kotlin Coroutines 处理 ### 性能优化 - 任务间有 500-800ms 延迟 - 避免频繁调用 - 节点使用后及时 `recycle()` ### 错误处理 - 节点未找到:返回 `false`,记录到报告 - 网络异常:邮件发送失败不影响任务执行 - 服务中断:停止当前任务执行 ## 📝 开发建议 1. **测试环境**:先在测试应用上验证功能 2. **日志记录**:保留详细的操作日志 3. **容错机制**:为关键操作添加重试逻辑 4. **用户反馈**:通过 Toast 或通知及时反馈 5. **隐私保护**:邮箱密码等敏感信息加密存储 ## 📄 文件说明 - `MyAccessibilityService.kt`: 核心无障碍服务 - `TaskModels.kt`: 任务数据模型 - `EmailSender.kt`: 邮件发送工具 - `UsageExampleActivity.kt`: 使用示例 - `AndroidManifest.xml`: 权限和服务声明 - `accessibility_config.xml`: 无障碍服务配置 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📜 许可证 MIT License