【问题标题】:Different URI from ACTION_SEND intent与 ACTION_SEND 意图不同的 URI
【发布时间】:2014-07-01 12:35:55
【问题描述】:

我已经在我的应用程序中加入了使用手机图库中的“分享给”按钮插入内容的可能性,但在不同的设备上我有不同的结果。例如,如果我使用代码从 Intent 中检索内容的 uri

  val fileUri: Uri =  intent.getParcelableExtra(Intent.EXTRA_STREAM).asInstanceOf[Uri]

在 Galaxy S3 中我有:content://media/external/images/media/812 在nexus 7中我有:file:///storage/sdcard0/DCIM/Camera/ContactPhoto-IMG_20131119_173230.jpg

如果我使用该功能:

val projection: Array[String] = Array(MediaColumns.DATA)
val cursor :Cursor= act.getContentResolver.query(uri,projection,null,null,null)
val column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA)
cursor.moveToFirst()
cursor.getString(column_index)

在这两种不同类型的 Uri 中,第二个给我错误,因为光标是 null

问题在于,有时 action_send 带有 file:\ URI,有时带有 content:\ URI。我需要发现 file:\ 并将其转换为内容。

【问题讨论】:

    标签: android android-intent share


    【解决方案1】:

    如何在所有设备中使用相同的 Uri 结构?

    欢迎其他应用发送他们想要的任何Uri 值。如果您的<intent-filter> 表示您支持这些方案,您将获得那些Uri 值并且必须处理它们。

    请注意,无论如何您都不应该使用您的代码 sn-p。没有要求提供给您的任何 Uri 必须在 MediaStore 中。

    【讨论】:

    • 问题是有时 action_send 带有 file:\\ URI,有时带有 content:\\ URI。我需要发现 file:\\ 并将其转换为内容。
    • @user3793870:欢迎您创建自己的ContentProvider,以提供来自file:// Uri 值的文件。您无法通过任何其他方式将file:// 方案“转换”为content:// 方案,就像您无法在Internet 上将http:// URL 转换为ftp:// URL 一样。您可能希望解释为什么您认为需要以这种方式转换 Uri - 毕竟,您不需要这样做来获取文件的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2011-05-20
    • 2023-03-10
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多