Hi, 大家好!
安卓app里,从相册选取照片做裁剪,Intent.ACTION_PICK,在API Level 31的AVD上跑,得到的uri疑似是错误的?
用Intent.ACTION_PICK 选取系统相册中一张图片,
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, REQUEST_GALLERY_IMAGE);
得到的uri如下:
mImageCaptureUri = content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F76/ORIGINAL/NONE/image%2Fjpeg/296819256
实际上,这个jpg文件在Downloads文件夹下。而且,我在Files里查看到,它的uri是:content://com.android.providers.downloads.documents/document/msf%3A74
问题1:怎么用Intent.ACTION_PICK 选取后就变样了呢?而且那个mImageCaptureUri ,貌似是多了个无用的前缀“content://com.google.android.apps.photos.contentprovider/-1/1/”!
问题2:可能就是这个奇怪的uri,导致接下来调用intent CROP裁剪时失败,这个uri给intent.SetData(uri)作为源文件。执行画面报错信息:读取文件失败。
AVD上画面提示:Error, could not load media
在启动CROP intent前,已经授权过了。如下。
grantUriPermission(packageName, mImageCaptureUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
问题3:更令我大跌眼镜的是,这个奇怪的uri及app,虽然在API Level 31的AVD上调用裁剪失败,而在API Level 33的AVD上跑,却能正常运行!
真不知道是Google的AVD某个版本有瑕疵呢,还是代码哪里有问题哦!
请大家指点迷津哦。谢谢!