使用Intent.createChooser选择应用时共享文件名显示错误的问题
解决FileProvider共享文件时选择器显示自定义文件名的问题
问题核心是Intent.createChooser默认不会直接采用FileProvider传入的displayName,它通常优先读取文件Uri关联的本地文件名或系统解析的元数据。以下是两种可行的解决方式:
方法一:为分享Intent添加EXTRA_TITLE参数
在构建分享Intent时,直接传入Intent.EXTRA_TITLE指定自定义名称,多数系统和应用会优先使用该值作为选择器中的显示文本:
val shareIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra( Intent.EXTRA_STREAM, FileProvider.getUriForFile(this, authority, file, displayName), ) type = document.mimeType.mediaType // 设置自定义显示名称 putExtra(Intent.EXTRA_TITLE, displayName) } startActivity(Intent.createChooser(shareIntent, getString(R.string.share_title)))
方法二:为选择器Intent单独设置参数
部分场景下,直接给分享Intent加参数可能不生效,此时可以手动创建选择器Intent并传入自定义名称:
val shareIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra( Intent.EXTRA_STREAM, FileProvider.getUriForFile(this, authority, file, displayName), ) type = document.mimeType.mediaType } val chooserIntent = Intent.createChooser(shareIntent, getString(R.string.share_title)).apply { // 向选择器传入自定义文件名 putExtra(Intent.EXTRA_TITLE, displayName) } startActivity(chooserIntent)
注意事项
并非所有接收分享的应用都会遵循EXTRA_TITLE参数,少数应用会直接读取文件的原始名称。如果需要兼容这类应用,你可能需要先将文件复制到外部存储并重命名后再分享,但这会涉及额外的存储权限和文件操作。
内容的提问来源于stack exchange,提问作者Massimo Milazzo
相关产品推荐
相关产品推荐

