HarmonyOS应用如何访问设备的相册和文件系统?

HarmonyOS应用如何访问设备的相册和文件系统?

阅读 820
avatarAI BotBETA

在HarmonyOS应用中访问设备的相册和文件系统,你需要通过以下步骤进行权限申请和文件访问:

访问相册

  1. 申请权限
    config.json文件中声明需要访问相册的权限:

    "module": {
      "package": "your.package.name",
      "reqPermissions": [
        "ohos.permission.READ_MEDIA",
        "ohos.permission.WRITE_MEDIA"
      ]
    }
  2. 动态申请权限(运行时)
    在代码中动态申请权限,确保应用有权限访问相册。

    if (verifySelfPermission("ohos.permission.READ_MEDIA") != IPermissionManager.PERMISSION_GRANT) {
        requestPermissionsFromUser(
            new String[]{"ohos.permission.READ_MEDIA", "ohos.permission.WRITE_MEDIA"},
            requestCode
        );
    }
  3. 访问相册
    使用媒体存储接口(如MediaStore)来访问相册中的图片和视频。

访问文件系统

  1. 申请权限
    config.json文件中声明需要访问文件系统的权限:

    "module": {
      "package": "your.package.name",
      "reqPermissions": [
        "ohos.permission.READ_EXTERNAL_STORAGE",
        "ohos.permission.WRITE_EXTERNAL_STORAGE"
      ]
    }
  2. 动态申请权限(运行时)
    同样地,在代码中动态申请文件系统访问权限。

    if (verifySelfPermission("ohos.permission.READ_EXTERNAL_STORAGE") != IPermissionManager.PERMISSION_GRANT) {
        requestPermissionsFromUser(
            new String[]{"ohos.permission.READ_EXTERNAL_STORAGE", "ohos.permission.WRITE_EXTERNAL_STORAGE"},
            requestCode
        );
    }
  3. 访问文件系统
    使用文件I/O接口(如FileFileOutputStream等)来读写文件系统中的数据。

总结

HarmonyOS应用访问相册和文件系统需要先在config.json中声明相关权限,然后在运行时动态申请这些权限,最后使用相应的API进行访问。这确保了应用的安全性和用户隐私的保护。

1 个回答

对于保存截图和录像到系统相册,目前有以下两种方式:

  1. 使用 SaveButton()安全控件向用户申请临时授权,授权通过后可以在 5 秒内使用 photoAccessHelper.createAsset()方法创建系统图库文件,创建完成后可以使用文件管理能力将需要保存的文件写入创建的文件中,写入过程不受时间限制。
  2. 在 AGC 网站上通过 ACL 的方式跨级别申请 ohos.permission.WRITE_IMAGEVIDEO 权限,在应用内向用户申请授权,授权通过后可任意使用 photoAccessHelper.createAsset()方法创建系统图库文件,使用文件管理能力将需要保存的文件写入创建的文件中。

HarmonyOS 目前没有 sdcard 目录,可以使用应用沙箱目录存储(沙箱目录无需申请权限)。

打开手机相册可以使用以下代码示例:

import { BusinessError } from '@ohos.base';
import { picker } from '@kit.CoreFileKit';
async function example03() {
  try {
    let photoPicker = new picker.PhotoViewPicker();
    photoPicker.select((err: BusinessError, PhotoSelectResult: picker.PhotoSelectResult) => {
      if (err) {
        console.error('PhotoViewPicker.select failed with err: ' + JSON.stringify(err));
        return;
      }
      console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ' + JSON.stringify(PhotoSelectResult));
    });
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error('PhotoViewPicker failed with err: ' + JSON.stringify(err));
  }
}
@Entry
@Component
struct PhotoViewPicker {
  @State message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        Button('PhotoPick')
         .onClick(() => {
            example03();
          })
         .margin({ right: 12 })
         .margin({ top: 20 })
      }
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题