拍摄照片问题排查指南 ===================================== 问题现象: - 相机启动后,拍照完成但无法返回 ImageGridActivity - onActivityResult 没有被调用 - 页面一直显示"正在保存照片..." 排查步骤: ===================================== 1. 检查日志输出 - 过滤标签:rjb_ImageGridActivity 和 rjb_Utils - 关键日志点: * takePhoto() 被调用 * 相机Activity已启动 * onPause / onStop(相机启动后应该会调用) * onRestart / onResume(相机返回后应该会调用) * onActivityResult(如果被调用,说明相机正确返回) 2. 检查 Activity 生命周期 - 相机启动后,ImageGridActivity 应该进入 onPause/onStop - 相机返回后,应该进入 onRestart/onResume - 如果 onResume 被调用但 onActivityResult 没有,说明相机没有正确返回结果 3. 检查文件是否被创建 - 在 onResume 中会检查拍照文件是否存在 - 如果文件存在但 onActivityResult 没被调用,可能是相机没有正确返回 - 文件路径:/data/user/0/com.xunpaisoft.social/cache/img/IMG_*.jpg 4. 检查权限 - 确保相机权限已授予 - 检查日志中的权限相关输出 5. 检查 FileProvider 配置 - 确保 provider_paths.xml 与 demo 项目一致 - 确保 AndroidManifest.xml 中的 FileProvider 配置正确 - authority 应该是:${applicationId}.provider 6. 华为相机特殊问题 - 某些华为相机可能对 cache 目录有特殊限制 - 如果问题持续,可能需要使用外部存储目录 7. 使用 adb 命令检查 - 检查文件是否被创建: adb shell ls -la /data/user/0/com.xunpaisoft.social/cache/img/ - 检查 Activity 状态: adb shell dumpsys activity activities | grep ImageGridActivity - 检查系统日志中的错误: adb logcat | grep -i "error\|exception\|crash" 8. 对比 demo 项目 - 确保代码与 demo 项目完全一致 - 检查 manifest 配置是否一致 - 检查 FileProvider 配置是否一致 常见问题及解决方案: ===================================== 问题1:onActivityResult 没有被调用 - 可能原因:相机应用没有正确返回结果 - 解决方案: 1. 检查相机应用是否有特殊设置 2. 尝试使用其他相机应用测试 3. 检查系统日志中是否有相机相关的错误 问题2:文件被创建但 onActivityResult 没有被调用 - 可能原因:相机应用保存了文件但没有正确返回结果 - 解决方案: 1. 在 onResume 中检查文件,如果存在可以手动触发处理(仅用于排查) 2. 检查是否是华为相机的特殊行为 问题3:Activity 被销毁 - 可能原因:系统内存不足或配置问题 - 解决方案: 1. 检查 Activity 的 launchMode 配置 2. 检查是否在 manifest 中正确配置了 Activity 问题4:权限问题 - 可能原因:相机权限或存储权限未授予 - 解决方案: 1. 检查权限请求流程 2. 确保权限已正确授予 下一步操作: ===================================== 1. 运行应用并触发拍照功能 2. 收集完整的日志输出(使用过滤:rjb_) 3. 检查日志中的关键点: - takePhoto() 是否被调用 - 相机是否启动 - onPause/onStop 是否被调用 - onRestart/onResume 是否被调用 - onActivityResult 是否被调用 - 文件是否被创建 4. 将日志和问题现象一起反馈,以便进一步分析