ACTION_SEND - 使用与光盘上不同的文件名共享文件

时间:2014-04-22 14:39:41

标签: android android-intent share

问题的简短版本

是否可以启动ACTION_SEND意图以便在光盘上共享文件,但共享使用的文件名不同于光盘上的文件名?

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/png");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile("somepath/3c72ae1adacb.dat"));
// BEGIN Hopefully something like this exists....
shareIntent.putExtra(Intent.EXTRA_FILENAME, "CuteKittens.png"));
// END
startActivity(shareIntent);

长版...

出于安全考虑,我的Android应用中使用的某些文件遮挡了光盘上的文件名,例如" 3c72ae1adacb.dat"。

我希望登录用户能够共享这些文件,但文件名不明确,例如" CuteKittens.png"。

这可以实现吗? (理想情况下,不要将文件复制到光盘上,共享副本并最终删除它,这对于如此直接的事情似乎很有用。)

1 个答案:

答案 0 :(得分:2)

您通常不应该使用file:// Uri值,因为无法保证其他应用可以读取这些文件。

欢迎您实施提供这些文件的ContentProvider,其中Uri值具有"未隐藏的文件名"。所以,而不是:

shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile("somepath/3c72ae1adacb.dat"));
你会得到:

shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://your.authority.goes.here/files/CuteKittens.png"));

ContentProvider会通过某种方式知道CuteKittens.pngsomepath/3c72ae1adacb.dat的内容。

内置的FileProvider几乎就是你所需要的,除了我假设在编译时不知道文件名(原始的和重命名的)。