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.png
和res/drawable-hdpi/splash_bc.png
和res/drawable-xxhdpi/splash_bc.png
。应该分享哪一个? ¯\_(ツ)_/¯
或者,如果splash_bc
是可绘制的矢量怎么办——共享图像的分辨率应该是多少? ¯\_(ツ)_/¯
第四,您使用的是通配符 MIME 类型 (intent.type = "image/*"
)。 您是提供内容的人——告诉接收者内容的 MIME 类型是您的工作。
要解释的最简单的解决方案是将图像写入文件(例如,在getCacheDir()
中),使用FileProvider
及其getUriForFile()
方法获取可用的Uri
到该文件,然后使用Uri
与您的共享逻辑。此外,由于您知道图像使用的文件格式,因此请使用它来驱动您的 MIME 类型。
This sample project(在this book 中介绍)说明了使用FileProvider
的基本技术。我的项目与您尝试做的不同:
ACTION_VIEW
,而不是ACTION_SEND
但是,它说明了将内容复制到缓存文件并使用FileProvider
使其可用于其他应用程序的概念。
【讨论】:
以上是关于Android 图像共享意图 - 不支持文件格式的主要内容,如果未能解决你的问题,请参考以下文章
使用android意图将带有图像的文本共享到instagram