【问题标题】:How to share anything?怎么分享东西?
【发布时间】:2012-09-27 16:52:40
【问题描述】:

作为学习练习,我正在编写一个具有 android.intent.action.SEND 意图的应用。我希望能够让它发送任何我能想到的文件名,但我看到的定义此类应用程序的所有示例都特​​定于媒体商店中的图像、铃声管理器中的铃声等。我不想要枚举我通过谷歌搜索找到的所有可能的算法,用于将 Uri 转换为文件。我想要一个通用的解决方案。我见过一个听起来很有希望的 OPENABLE 类别,但我仍然没有看到用于发现底层文件名的通用解决方案。有吗?

我只是想让这个东西上传它交给一个 php 脚本的任何内容,该脚本实现了一个 POST 方法来进行文件上传。我看不出有任何理由将其限制为图像或视频或类似的东西,但对于我的生活,我无法弄清楚如何让它适用于其他应用程序想要共享的任何随机文件。

【问题讨论】:

  • 您是在尝试用ACTION_SEND Intent 调用 startActivity(),还是在尝试实现响应的活动ACTION_SENDIntent?
  • 我正在回复 ACTION_SEND。无论我得到什么内容,我都想上传到网络服务器。我已经阅读了 ContentResolver 和 ParcelFileDescriptor,所以我认为(虽然我还没有尝试过)我有办法读取数据,但我正在寻找要使用的文件名,但找不到类似那(除非 toString() 人类可读的描述恰好是一个文件名)。

标签: android share intentfilter


【解决方案1】:

我正在寻找要使用的文件名

不保证有文件名可供使用。特别是如果scheme是content://,很有可能没有文件名,因为在某些情况下没有文件(例如,数据是数据库中的BLOB)。

即兴发挥,我会使用这样的算法:如果方案是content://getLastPathSegment() 上的Uri 返回一个整数,生成一个文件名;否则,使用getLastPathSegment()。这应该涵盖content://file://http:// 方案相当不错,而且我想不出您可能在ACTION_SEND 处理活动中遇到的任何其他方案。

【讨论】:

  • 我会试一试。看起来这可能是我能做的最好的事情。似乎没有任何类型的意图过滤器我可以用来说“请只是文件的东西”,这似乎很奇怪。谢谢。
  • @user1160711:哦,如果你真的只想要file:// 方案的东西,请在<intent-filter> 中使用<data> 元素来限制方案。我将诸如“我只想让这个东西上传它所传递的任何内容”这样的陈述解释为你只想让这个东西上传它所传递的任何内容,这并不意味着只有文件。
  • 是的,只获取 file:// 是行不通的。例如,画廊中的图片显然是文件(您可以在文件浏览器中找到它们),但是如果您从画廊应用程序中执行共享操作,您肯定不会得到 file:// Uri,即使那里是埋在某处的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多