【问题标题】:ACTION_SEND - Share File with Different Filename Than That on DiscACTION_SEND - 共享文件名与光盘上不同的文件
【发布时间】:2014-06-07 00:16:28
【问题描述】:

问题的简短版本..

是否可以启动 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”。

这可以实现吗? (理想情况下,无需将文件复制到光盘上、共享副本并最终删除它,这对于如此直接的事情来说似乎需要做很多工作。

【问题讨论】:

  • 您找到解决方案了吗?我有类似的要求

标签: android android-intent share


【解决方案1】:

一般情况下,您不应使用 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 几乎是您所需要的,除了我假设文件名(原始文件名和重命名文件名)在编译时是未知的。

【讨论】:

  • 感谢您提供信息丰富的答案,并强调直接共享文件的问题。那么你认为子类 FileProvider 是要走的路吗?
  • @HaggleLad:我不确定您是否能够继承它并实现您的目标,但如果可行,当然欢迎您这样做。我最终将它分叉以创建 my StreamProvider,因为我需要覆盖的太多东西是 private 方法等。
猜你喜欢
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 2011-07-18
  • 2020-03-30
  • 2021-07-29
相关资源
最近更新 更多