数据类别:-
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))
回收程序视图中的my 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)
}
获取错误:-文件格式不受支持。在检查logcat以查找URI时,获取此- I/ContentValues:用户(imagepic=2131165295) .
请帮助这一点。不知道为什么文件格式不支持。让我知道有没有其他方法来解决这个问题。
2条答案
按热度按时间h5qlskok1#
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
使其可用于其他应用程序的概念。1sbrub3j2#
这个对它会起作用的