HarmonyOS鸿蒙Next中Java如何读取一个相册的照片

HarmonyOS鸿蒙Next中Java如何读取一个相册的照片 目前可以获取到相册照片的路径,但是读取报错权限有问题。

READ_MEDIA都授权了的

5 回复

更多关于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可以通过PhotoAccessHelper类来读取相册中的照片。PhotoAccessHelper是鸿蒙系统提供的用于访问和管理相册数据的工具类。以下是读取相册照片的基本步骤:

  1. 获取PhotoAccessHelper实例: 使用PhotoAccessHelper的静态方法getPhotoAccessHelper获取实例。

  2. 查询相册照片: 使用PhotoAccessHelperquery方法查询相册中的照片。可以通过PhotoView对象来指定查询条件,如照片的ID、创建时间等。

  3. 处理查询结果: 查询结果会返回一个PhotoResultSet对象,通过遍历PhotoResultSet可以获取每张照片的详细信息,如URI、文件名、创建时间等。

  4. 读取照片数据: 通过照片的URI,可以使用FileDescriptorInputStream来读取照片的二进制数据。

以下是一个简单的代码示例:

import ohos.media.photokit.metadata.PhotoAccessHelper;
import ohos.media.photokit.metadata.PhotoView;
import ohos.media.photokit.metadata.PhotoResultSet;
import ohos.media.photokit.metadata.PhotoMetadata;

public class PhotoReader {
    public void readPhotos() {
        PhotoAccessHelper photoAccessHelper = PhotoAccessHelper.getPhotoAccessHelper();
        PhotoView photoView = new PhotoView();
        photoView.setQuery(PhotoMetadata.ID, null, PhotoView.QUERY_ARG_MATCH_ALL);
        PhotoResultSet resultSet = photoAccessHelper.query(photoView);

        if (resultSet != null) {
            while (resultSet.goToNextRow()) {
                String photoUri = resultSet.getString(resultSet.getColumnIndex(PhotoMetadata.URI));
                // 读取照片数据
                // ...
            }
            resultSet.close();
        }
    }
}

通过上述步骤,可以在HarmonyOS鸿蒙Next中使用Java读取相册中的照片。

在HarmonyOS鸿蒙Next中,使用Java读取相册照片可以通过DataAbilityHelperPhotoView实现。首先,获取DataAbilityHelper实例,然后通过query方法查询相册数据。使用PhotoView组件展示照片。具体步骤包括:

  1. 获取DataAbilityHelper实例;
  2. 构建查询条件;
  3. 执行查询获取照片数据;
  4. 使用PhotoView展示照片。
回到顶部