0

我正在尝试从用户存储中复制图像

File(userStorageImagePath).copyTo(userProfileImage, overwrite = true)

但随后用户选择了出现异常的图像:

open failed: EACCES (Permission denied)  /storage/emulated/0/Download/....

所有授予读/写的访问权限和异常仅出现在 android 10

android:requestLegacyExternalStorage="true"解决问题,

但是如何将 requestLegacyExternalStorage 替换为适合谷歌的东西?

4

1 回答 1

0

解决:

val inputStream: InputStream? = getMediaUriFromPath(ctx, userStorageImagePath)?.let { ctx.contentResolver.openInputStream(it) }
Files.copy(inputStream, imageDestinationPath, StandardCopyOption.REPLACE_EXISTING)

fun getMediaUriFromPath(context: Context, path: String): Uri? {
        val mediaUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
        val cursor: Cursor? = context.contentResolver.query(
            mediaUri,
            null,
            MediaStore.Images.Media.DISPLAY_NAME + "= ?",
            arrayOf(path.substring(path.lastIndexOf("/") + 1)),
            null
        )
        var uri: Uri? = null
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                uri = ContentUris.withAppendedId(
                    mediaUri,
                    cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID))
                )
            }
        }
        cursor?.close()
        return uri
    }
于 2021-07-07T13:46:59.277 回答