如何通过编程方式从内部存储将PDF文件附加到Gmail应用
Android 内部存储PDF文件附加到Gmail发送的实现方案
核心实现逻辑
通过系统ACTION_SEND意图唤起邮件应用(包含Gmail),将内部存储的PDF文件作为附件传入意图,同时授予邮件应用文件访问权限即可完成需求。
注意事项
- 需提前确认目标PDF文件的内部存储路径正确,文件真实存在
- Android 7.0(API 24)及以上版本禁止直接使用
Uri.fromFile()分享文件,会触发FileUriExposedException,需使用FileProvider生成可授权的Content Uri - 必须添加读写权限授予标记,否则Gmail无法读取附件内容
实现代码
// 初始化发送意图 Intent intentShareFile = new Intent(Intent.ACTION_SEND); // 配置收件人邮箱,mailTo替换为实际收件人地址 intentShareFile.putExtra(Intent.EXTRA_EMAIL, new String[] {mailTo}); // path替换为内部存储中PDF文件的实际路径 File fileWithinMyDir = new File(path); if(fileWithinMyDir.exists()) { // 设置附件格式为PDF intentShareFile.setType("application/pdf"); // API <24 可直接使用该方法生成Uri Uri pdfUri = Uri.fromFile(fileWithinMyDir); // API >=24 请替换为FileProvider生成Uri,示例如下: // Uri pdfUri = FileProvider.getUriForFile(context, "你的应用包名.fileprovider", fileWithinMyDir); intentShareFile.putExtra(Intent.EXTRA_STREAM, pdfUri); // 配置邮件主题 intentShareFile.putExtra(Intent.EXTRA_SUBJECT, "邮件主题"); // 配置邮件正文 intentShareFile.putExtra(Intent.EXTRA_TEXT, "邮件正文内容"); // 授予目标应用文件读写权限 intentShareFile.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intentShareFile.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); // 拉起应用选择器,用户选择Gmail即可发送 startActivity(Intent.createChooser(intentShareFile, "分享文件")); }
内容的提问来源于stack exchange,提问作者Alam
相关产品推荐
相关产品推荐

