【问题标题】:Is it possible to share a file with Intent.ACTION_SEND retrieve and store users choice是否可以使用 Intent.ACTION_SEND 共享文件检索和存储用户选择
【发布时间】:2016-06-01 03:16:57
【问题描述】:

我想允许用户与Intent.ACTION_SEND 共享文件,然后存储用户的选择和地址/电话号码,以便能够在不同的时间自动将不同的文件发送到同一目的地。这可能吗?如何? 谢谢

【问题讨论】:

  • 绝对有可能。
  • 你能不能至少把我引向正确的方向。一个多小时的研究并没有让我找到任何东西。

标签: android android-intent android-sharing


【解决方案1】:

您可以将文件作为二进制数据共享,如下所述。

来自 Android 开发者页面的参考链接: https://developer.android.com/training/sharing/send.html

发送二进制内容

使用 ACTION_SEND 操作共享二进制数据 设置适当的 MIME 类型并将数据的 URI 放在 一个名为 EXTRA_STREAM 的额外名称。这通常用于共享图像 但可用于共享任何类型的二进制内容:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

注意以下几点:

您可以使用“/”的 MIME 类型,但这只会匹配活动 能够处理通用数据流。接收方 应用程序需要访问 Uri 指向的数据的权限。这 推荐的方法是:将数据存储在您自己的 ContentProvider,确保其他应用具有正确的 访问您的提供商的权限。首选机制 提供访问权限是使用 per-URI 权限,这些权限是临时的,并且 仅授予对接收应用程序的访问权限。一种简单的创建方法 像这样的 ContentProvider 是使用 FileProvider 辅助类。 使用系统 MediaStore。 MediaStore 主要针对视频, 音频和图像 MIME 类型,但从 Android 3.0(API 11 级)它还可以存储非媒体类型(参见 MediaStore.Files 更多信息)。可以使用 scanFile() 将文件插入到 MediaStore 之后,一个适合分享的 content:// 风格的 Uri 被传递给 提供的 onScanCompleted() 回调。请注意,一旦添加到 系统 MediaStore 内容可供设备上的任何应用访问

只需更改上面代码中的最后一行,这样它就不会每次都显示选择器。它将在您的应用程序的后续运行中存储默认选择。

startActivity(shareIntent);

关于“然后存储用户的选择和地址/电话号码,以便能够自动将不同的文件发送到同一目的地

将使用上述代码存储用户选择将文件发送到特定应用程序。但我不认为您可以将来自另一个应用程序的特定号码/地址存储在您的应用程序中,以便随后发送文件。一旦您的意图转到另一个活动(应用程序),就无法从您之前的活动(应用程序)控制它。每次,您都必须在第二个应用程序中选择该特定地址/号码。

【讨论】:

  • 谢谢,我并不是要限制自己使用发送 Intent 机制。有没有其他办法?
  • 目前我想不出任何其他机制。意图是标准的方法。让我们看看其他人是否提出了什么建议。如果您发现任何其他替代方案,请在此处分享。
猜你喜欢
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多