安卓app,从相册选取照片做裁剪,Intent.ACTION_PICK,在API Level 31的AVD上跑,得到的uri疑似是错误的?

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某个版本有瑕疵呢,还是代码哪里有问题哦!

请大家指点迷津哦。谢谢!

针对问题3,补充一点。

在API Level 31的AVD上调用裁剪失败,而在API Level 33的AVD上成功,
两者的AVD除过API Level不同之外,前者是仅支持Google APIs的image,没有设置G账号;而后者则是支持Google Play的image,而且设置过并登入了Google账号的。
不知到与这些环境的差别,有没有关系呢?