我希望用户从设备中选择一个图像,然后自己将其作为位图处理,我如何在内容提供商的帮助下实现这一目标?

问题描述

我找到了几种方法来实现这一点,但没有一种看起来很简单,而且我不理解其中许多的代码。我最近阅读了一些关于内容解析器、内容提供者和光标的内容,这似乎是从用户那里获取存储在设备上的文件的最佳做法。 现在我正在使用它,但看起来很奇怪:

            val selectedImageUri: Uri = data.data!!
            val inputStream = contentResolver.query(selectedImageUri,Android.provider)
            bitmap = BitmapFactory.decodeStream(inputStream)

它使用 contnt resovler 但带有输入流?我认为这是 Java 的事情,而不是在 android 上实现这一点的最佳实践。还有这个功能

    fun getBitmapFromURI(uri: Uri): Bitmap? {
         val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
         val cursor: Cursor? =
             this.contentResolver.query(uri,filePathColumn,null,null)
         if (cursor != null) {
             cursor.moveToFirst()
             val columnIndex = cursor.getColumnIndex(filePathColumn[0])
             val fImage = File(cursor.getString(columnIndex))
             cursor.close()
             val o2 = BitmapFactory.Options()

             return BitmapFactory.decodeFile(fImage.absolutePath,o2)
         }
         return null
     }

我从 SO 上的另一个线程复制了这个,但再次感觉很奇怪,因为我不明白为什么我们要求光标转到第一个,而不管其余参数为什么传递为 null。有人可以为我提供遵循所有最佳实践并以非常有效的方式做事的最佳代码吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)