Android普通应用获取Logcat日志并通过邮件发送附件失败如何解决
问题根因
你遇到的附件添加失败问题核心是Android分区存储适配和路径配置错误,和系统隐藏API的警告无关,以下是可直接落地的修改方案:
修正步骤
1. 替换日志存储路径(核心修改)
API 29(Android 10)开始普通应用无法直接读写外部存储公共目录的自定义路径,你当前使用的Environment.getExternalStorageDirectory()已废弃,需改为应用专属外部存储目录,无需额外申请存储权限,完全合规:// 替换原来的appDirectory定义 File appDirectory = new File(getExternalFilesDir(null), "MyPersonalAppFolder"); File logDirectory = new File(appDirectory, "logs"); // 创建目录要使用mkdirs(),确保多级目录创建成功 if (!appDirectory.exists()) { appDirectory.mkdirs(); } if (!logDirectory.exists()) { logDirectory.mkdirs(); }2. 调整FileProvider路径配置
修改xml下的路径配置文件,匹配应用专属目录的映射规则:<?xml version ="1.0" encoding ="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="app_files" path="."/> </paths>3. 修正邮件Intent配置
原来的MIME类型设置兼容性差,改为邮件通用类型:emailIntent.setType("message/rfc822");4. 清理无效权限
删掉Manifest里的READ_LOGS、WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE权限声明:READ_LOGS仅系统应用可获取,普通应用获取自身进程日志不需要该权限- 应用专属目录读写不需要额外存储权限
5. 确认Manifest的Provider配置
确保你已在Manifest中正确注册FileProvider:<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/你的路径配置文件名" /> </provider>
补充说明
你通过Runtime.getRuntime().exec("logcat")获取自身应用日志的方式是合规的,普通应用可正常使用,不会被安全规则拦截。
内容的提问来源于stack exchange,提问作者Mvfm
相关产品推荐
相关产品推荐

