Android 图像共享意图 - 不支持文件格式

Posted

技术标签:

【中文标题】Android 图像共享意图 - 不支持文件格式【英文标题】:Android Image Sharing Intent -File format not supported 【发布时间】:2021-11-18 10:50:54 【问题描述】:

数据类:-

data class User(val imagepic: Int)

将值传递给回收站视图:-

 val users = ArrayList<User>()
    val adapter = CustomAdapter(users)
    recyclerView.adapter = adapter
    users.add(User(R.drawable.splash_bc))
    users.add(User(R.drawable.image))
    users.add(User(R.drawable.splash_bc))
    users.add(User(R.drawable.share))
    users.add(User(R.drawable.splash_bc))
    users.add(User(R.drawable.image))

我在回收站视图中的 shareimage 功能:-

 fun sharepic(user: User) 
            var uri: Uri = Uri.parse(user.toString())
            Log.i(TAG, uri.toString())
            val intent = Intent(Intent.ACTION_SEND)
            intent.type = "image/*"
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.putExtra(Intent.EXTRA_STREAM, uri)
            startActivity(itemView.context, Intent.createChooser(intent, "Share Image"), null)
        

出现错误:- 不支持文件格式。 在检查 uri 的 logcat 时,得到这个 - I/ContentValues: User(imagepic=2131165295)

请帮忙。不知道为什么不支持文件格式。 让我知道是否有其他方法可以解决此问题。

【问题讨论】:

user.toString() 我们不知道这会有什么价值。请使用硬编码值,以便我们知道您在做什么。 【参考方案1】:

sharepic()有些问题。

首先,您不能在Uri.parse() 中使用任意字符串并期望android 或其他应用程序能够理解它。 user.toString() 默认不会生成有效的Uri

其次,你没有文件。你有一个可绘制的资源 ID。可绘制资源是开发机器上的文件。它不是手机上的文件。没有共享可绘制资源的内置方法。

第三,可绘制资源有点随意。例如,假设您的项目中有res/drawable-mdpi/splash_bc.pngres/drawable-hdpi/splash_bc.pngres/drawable-xxhdpi/splash_bc.png。应该分享哪一个? ¯\_(ツ)_/¯ 或者,如果splash_bc 是可绘制的矢量怎么办——共享图像的分辨率应该是多少? ¯\_(ツ)_/¯

第四,您使用的是通配符 MIME 类型 (intent.type = "image/*")。 是提供内容的人——告诉接收者内容的 MIME 类型是您的工作。


要解释的最简单的解决方案是将图像写入文件(例如,在getCacheDir() 中),使用FileProvider 及其getUriForFile() 方法获取可用的Uri 到该文件,然后使用Uri 与您的共享逻辑。此外,由于您知道图像使用的文件格式,因此请使用它来驱动您的 MIME 类型。

This sample project(在this book 中介绍)说明了使用FileProvider 的基本技术。我的项目与您尝试做的不同:

我复制到文件的内容是资产,而不是可绘制资源 我的内容是 PDF,不是可绘制的 我使用的是ACTION_VIEW,而不是ACTION_SEND

但是,它说明了将内容复制到缓存文件并使用FileProvider 使其可用于其他应用程序的概念。

【讨论】:

以上是关于Android 图像共享意图 - 不支持文件格式的主要内容,如果未能解决你的问题,请参考以下文章

不支持 Intent 图像共享文件格式

使用android意图将带有图像的文本共享到instagram

文件保存意图,如共享意图 Android/iOS react-native

Android 共享意图无法启动

从内容 URI 中获取搜索图像的绝对文件路径

如何在 expo 应用程序中处理共享意图(发送图像)?