You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用分享CSV文件至其他应用时提示不支持附件问题排查

解决CSV文件分享时“不支持的附件”错误

问题原因

你直接使用file://格式的URI分享文件,在Android 7.0及以上系统中,出于安全限制,其他应用无法访问这个路径下的文件,因此会抛出“不支持的附件”错误。正确的做法是使用FileProvider生成内容URI来授权其他应用访问文件。

解决方案

1. 在Manifest中配置FileProvider

在<application>标签内添加FileProvider的配置:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

如果使用的是support库,将androidx.core.content.FileProvider替换为android.support.v4.content.FileProvider即可。

2. 创建文件路径配置文件

在res/xml目录下新建file_paths.xml文件(若没有xml目录则手动创建),内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="external_files"
        path="." />
</paths>

该配置允许FileProvider访问外部存储根目录下的文件,与你代码中Environment.getExternalStorageDirectory()的路径对应。

3. 修改分享代码

将原代码中Uri.parse("file://"+csvFile)的部分替换为FileProvider生成的URI,修改后的完整代码:

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
File csvFile = new File(Environment.getExternalStorageDirectory() + "/SalesManagerBackup/" + "inventoryBackup.csv");
if (!csvFile.exists()) {
    Toast.makeText(SettingsActivity.this, getResources().getString(R.string.there_is_no_data), Toast.LENGTH_SHORT).show();
} else {
    Intent intentShare = new Intent(Intent.ACTION_SEND);
    intentShare.setType("text/csv");
    // 使用FileProvider生成内容URI
    Uri fileUri = FileProvider.getUriForFile(SettingsActivity.this, 
            getPackageName() + ".fileprovider", csvFile);
    intentShare.putExtra(Intent.EXTRA_STREAM, fileUri);
    // 授予接收应用临时读取权限
    intentShare.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivity(Intent.createChooser(intentShare, getResources().getString(R.string.share_data_to_other_device)));
}

额外注意

  • 确保在Android 6.0及以上系统中已经动态申请并获取了READ_EXTERNAL_STORAGE权限
  • 不要依赖StrictMode设置绕过文件URI限制,这只是临时方案,FileProvider才是合规的解决方式

内容的提问来源于stack exchange,提问作者Muamal Kadhim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:42:23