我无法从存储中共享文件 - "无法附加空文件"

时间:2017-12-03 13:27:51

标签: android performance android-layout

我的应用程序的重点是:创建一个PDF文件,并在Whatsapp,Messenger,Gmail和其他人分享...但我试图共享该文件(它保存在 / storage / emulated / 0 / ),但我在toast上为我返回错误:"无法附加空文件。"。分享方法的代码如下:

  

MainActivity.java

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("*/*");
i.putExtra(Intent.EXTRA_TEXT, "NOME: ".concat(String.valueOf(Hawk.get("register_name"))));
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
i.putExtra(Intent.EXTRA_SUBJECT, String.valueOf(Hawk.get("register_name")).concat(" Business Card"));
i.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(this, "test.com.br.businesscard.provider", new File(getExternalFilesDir(null), "business.pdf")));
startActivity(Intent.createChooser(i, "Sending e-mail..."));
  

provider_paths.xml

<paths>
    <external-path
        name="external_files"
        path="." />
</paths>

1 个答案:

答案 0 :(得分:2)

对于/storage/emulated/0中的直接文件,构建File的方法是:

new File(Environment.getExternalStorageDirectory(), ...)

其中...是文件的文件名(例如"business.pdf")。

getExternalFilesDir(null)适用于/storage/emulated/0/Android/data/.../等位置的文件,其中...是您的应用程序ID。

事实证明,您的FileProvider配置会处理任一位置。但是,FileProvider无法使用指向不存在的文件的File对象来提供内容,这就是您遇到问题的原因。