微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从android 11设备的共享存储中选择图像?

如何解决如何从android 11设备的共享存储中选择图像?

我使用了这个库 https://github.com/Dhaval2404/ImagePicker,我收到了来自 android play 控制台团队的警告我们检测到您的应用在您的 1 个或多个 app bundle 或 APK 的清单文件中包含 requestLegacyExternalStorage 标志。在运行 Android 11+ 的设备上使用应用的开发人员必须使用 Scoped Storage 来让用户更好地控制他们的设备存储。要在 5 月 5 日之后在 Android 11 或更高版本上发布您的应用,您必须:

解决方法

  • Android 10 之前,我们有共享存储的概念。每一个 设备中的应用程序在内部存储器中有一些私有存储空间,您可以在 android/data/your_package_name 中找到它 目录。除了这个内部存储,其余的 存储称为共享存储,即每个具有 storage 权限可以访问这部分内存。这包括 媒体收藏和不同应用程序的其他文件。但该 问题是具有存储权限的应用程序没有 需要访问所有这些文件。他们想要的只是表演 对内存的一小部分进行一些小操作,那就是 它。例如,某些应用程序只需要选择一个用户图像 将其作为个人资料图片上传,仅此而已。那么,为什么要提供 他们拥有对该共享存储的完全访问权限?

  • 另外,第二个问题是当应用程序有这样的 存储上的广泛写入能力,然后生成的文件 应用程序变得分散,当用户卸载 应用程序然后应用程序生成的文件保留在 只存储,不删除,占用大量空间。

  • 因此,我们需要某种机制,借助该机制,应用程序 可以获得他们需要的特定访问权限,而无需获得如此广泛的访问权限 他们实际上并不需要的阅读和写作能力。这可以是 在范围存储的帮助下完成。

注意:- 从 Android 11 开始,谷歌强制使用范围存储检查此Link

,

简单。

val REQUEST_CODE_PICK_PHOTO = 1

pickPhotoButton.setOnClickListener {
    val intent = Intent(Intent.ACTION_PICK)

    intent.type = "image/*"

    startActivityForResult(intent,REQUEST_CODE_PICK_PHOTO)
}

override fun onActivityResult(requestCode: Int,resultCode: Int,data: Intent?) {
    super.onActivityResult(requestCode,resultCode,data)

    if (requestCode == REQUEST_CODE_PICK_PHOTO && resultCode == RESULT_OK) {
        val selectedImageUri = data!!.data!!

        //do something with this image uri      
    }
}

演示:https://youtu.be/LFfWnt77au8

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。