99 lines
3.4 KiB
Plaintext
99 lines
3.4 KiB
Plaintext
|
|
拍摄照片问题排查指南
|
|||
|
|
=====================================
|
|||
|
|
|
|||
|
|
问题现象:
|
|||
|
|
- 相机启动后,拍照完成但无法返回 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. 将日志和问题现象一起反馈,以便进一步分析
|
|||
|
|
|