HarmonyOS鸿蒙Next中Java如何读取一个相册的照片
HarmonyOS鸿蒙Next中Java如何读取一个相册的照片 目前可以获取到相册照片的路径,但是读取报错权限有问题。
READ_MEDIA都授权了的
5 回复
楼主你好,请参考:https://developer.huawei.com/consumer/cn/forum/topic/0202550313178650107?fid=0101303901040230869
更多关于HarmonyOS鸿蒙Next中Java如何读取一个相册的照片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
权限的话好像是得要申请"ohos.permission.WRITE_USER_STORAGE"权限
获取图片代码可以试试下面这个:
private final int imgRequestCode=1123;
private void selectPic() {
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withAction(IntentConstants.ACTION_CHOOSE)
.build();
intent.setType("image/*");
intent.setOperation(operation);
startAbilityForResult(intent, imgRequestCode);
}
@Override
protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {
if(requestCode==imgRequestCode && resultData != null)
{
//选择的Img对应的Uri
String chooseImgUri=resultData.getUriString();
//定义数据能力帮助对象
DataAbilityHelper helper=DataAbilityHelper.creator(getContext());
//定义图片来源对象
ImageSource imageSource = null;
//获取选择的Img对应的Id
String chooseImgId;
//如果是选择文件则getUriString结果为content://com.android.providers.media.documents/document/image%3A30,其中%3A是":"的URL编码结果,后面的数字就是image对应的Id
//如果选择的是图库则getUriString结果为content://media/external/images/media/30,最后就是image对应的Id
//这里需要判断是选择了文件还是图库
if(chooseImgUri.lastIndexOf("%3A")!=-1){
chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf("%3A")+3);
}
else {
chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf('/')+1);
}
//获取图片对应的uri,由于获取到的前缀是content,我们替换成对应的dataability前缀
Uri uri=Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, chooseImgId);
try {
//读取图片
FileDescriptor fd = helper.openFile(uri, "r");
imageSource = ImageSource.create(fd, null);
//创建位图
PixelMap pixelMap = imageSource.createPixelmap(null);
//设置图片控件对应的位图
bgImg.setPixelMap(pixelMap);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (imageSource != null) {
imageSource.release();
}
}
}
}
欢迎开发小伙伴们进来帮帮楼主
在HarmonyOS鸿蒙Next中,使用Java读取相册照片可以通过DataAbilityHelper
和PhotoView
实现。首先,获取DataAbilityHelper
实例,然后通过query
方法查询相册数据。使用PhotoView
组件展示照片。具体步骤包括:
- 获取
DataAbilityHelper
实例; - 构建查询条件;
- 执行查询获取照片数据;
- 使用
PhotoView
展示照片。