MediaStore.Images.Thumbnails.getThumbnail returns 空
MediaStore.Images.Thumbnails.getThumbnail returns null
在我的应用程序中,我的一个活动有一个菜单选项,可以打开图库意图并允许用户选择图像。在 onActivityResult 中,我调用 MediaStore.Images.Thumbnails.getThumbnail 来检索所选图像的缩略图版本。但是,由于某种原因,它 returns 为空。我为 read/write 访问外部存储设置了动态用户权限,我认为它正在工作(否则,Android 会发出安全异常)。这是我的代码的摘录:
override fun onActivityResult(requestCode: Int, resultCode: Int, responseData: Intent?) {
when (requestCode) {
MENU_PICK_IMAGE -> if (resultCode == Activity.RESULT_OK) {
responseData?.let{ data ->
val contentUri = data.data as Uri
val uriPath = contentUri.pathSegments
val imageId = uriPath.get(uriPath.size-1)
val b = MediaStore.Images.Thumbnails.getThumbnail(contentResolver,imageId.toLong(),MediaStore.Images.Thumbnails.MINI_KIND,null)
........
}
}
}
目标SDK:28
compileSdkVersion 28
我通过将 getThumbnail 方法移动到另一个方法(在 OnActivityResult 之外)解决了我的问题。我的假设是 getThumbnail 在用户选择图像后立即被阻止访问数据(因此只返回 null)。
在我的应用程序中,我的一个活动有一个菜单选项,可以打开图库意图并允许用户选择图像。在 onActivityResult 中,我调用 MediaStore.Images.Thumbnails.getThumbnail 来检索所选图像的缩略图版本。但是,由于某种原因,它 returns 为空。我为 read/write 访问外部存储设置了动态用户权限,我认为它正在工作(否则,Android 会发出安全异常)。这是我的代码的摘录:
override fun onActivityResult(requestCode: Int, resultCode: Int, responseData: Intent?) {
when (requestCode) {
MENU_PICK_IMAGE -> if (resultCode == Activity.RESULT_OK) {
responseData?.let{ data ->
val contentUri = data.data as Uri
val uriPath = contentUri.pathSegments
val imageId = uriPath.get(uriPath.size-1)
val b = MediaStore.Images.Thumbnails.getThumbnail(contentResolver,imageId.toLong(),MediaStore.Images.Thumbnails.MINI_KIND,null)
........
}
}
}
目标SDK:28 compileSdkVersion 28
我通过将 getThumbnail 方法移动到另一个方法(在 OnActivityResult 之外)解决了我的问题。我的假设是 getThumbnail 在用户选择图像后立即被阻止访问数据(因此只返回 null)。