问题的简短版本
是否可以启动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"。
这可以实现吗? (理想情况下,不要将文件复制到光盘上,共享副本并最终删除它,这对于如此直接的事情似乎很有用。)
答案 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.png
中somepath/3c72ae1adacb.dat
的内容。
内置的FileProvider
几乎就是你所需要的,除了我假设在编译时不知道文件名(原始的和重命名的)。