photoAccessHelper-notify-guidelines.md 9.0 KB
Newer Older
H
huweiqi 已提交
1
# 媒体资源(图片、视频和相册)变更通知相关
H
huweiqi 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14

photoAccessHelper提供监听媒体资源变更的接口,供开发者对指定媒体资源变更进行监听。

> **说明:**
>
> 在进行功能开发前,请开发者查阅[相册管理模块开发概述](photoAccessHelper-overview.md),了解如何获取相册管理模块实例和如何申请相册管理模块功能开发相关权限。
> 文档中使用到photoAccessHelper的地方默认为使用相册管理模块开发概述中获取的对象,如未添加此段代码报photoAccessHelper未定义的错误请自行添加。

媒体资源变更通知相关接口的异步调用仅支持使用callback方式。以下只列出部分接口使用方式,其他使用方式可以查阅[API参考](../reference/apis/js-apis-photoAccessHelper.md)
如无特别说明,文档中涉及的待获取的资源均视为已经预置且在数据库中存在相应数据。如出现按照示例代码执行出现获取资源为空的情况请确认文件是否已预置,数据库中是否存在该文件的数据。

## 监听指定URI

H
huweiqi 已提交
15
通过调用[registerChange](../reference/apis/js-apis-photoAccessHelper.md#registerchange)接口监听指定uri。当被监听对象发生变更时返回监听器回调函数的值。
H
huweiqi 已提交
16

H
huweiqi 已提交
17
### 对指定FileAsset注册监听
H
huweiqi 已提交
18

H
huweiqi 已提交
19
对指定FileAsset注册监听,当被监听的FileAsset发生变更时,返回监听回调。
H
huweiqi 已提交
20 21 22 23 24 25

**前提条件:**

- 获取相册管理模块photoAccessHelper实例。
- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。

H
huweiqi 已提交
26
下面以对一张图片注册监听,通过将这张图片设置为收藏触发监听回调为例。
H
huweiqi 已提交
27 28 29 30

**开发步骤:**

1. [获取指定媒体资源](photoAccessHelper-resource-guidelines.md#获取指定媒体资源)
H
huweiqi 已提交
31
2. 对指定FileAsset注册监听。
H
huweiqi 已提交
32 33 34 35
3. 将指定媒体资源设置为收藏。

```ts
import dataSharePredicates from '@ohos.data.dataSharePredicates';
N
nwx1279094 已提交
36
import photoAccessHelper from '@ohos.file.photoAccessHelper';
H
huweiqi 已提交
37

N
nwx1279094 已提交
38
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
H
huweiqi 已提交
39
predicates.equalTo(photoAccessHelper.ImageVideoKey.DISPLAY_NAME, 'test.jpg');
N
nwx1279094 已提交
40
let fetchOptions: photoAccessHelper.FetchOptions = {
H
huweiqi 已提交
41 42 43 44 45
  fetchColumns: [],
  predicates: predicates
};

try {
N
nwx1279094 已提交
46 47
  let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
  let fileAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
H
huweiqi 已提交
48 49
  console.info('getAssets fileAsset.uri : ' + fileAsset.uri);

N
nwx1279094 已提交
50
  let onCallback = (changeData:dataSharePredicates.ChangeData) => {
H
huweiqi 已提交
51 52 53 54 55 56 57 58 59 60 61
    console.info('onCallback successfully, changData: ' + JSON.stringify(changeData));
  }
  phAccessHelper.registerChange(fileAsset.uri, false, onCallback);

  await fileAsset.favorite(true);
  fetchResult.close();
} catch (err) {
  console.error('onCallback failed with err: ' + err);
}
```

H
huweiqi 已提交
62
### 对指定Album注册监听
H
huweiqi 已提交
63

H
huweiqi 已提交
64
对指定Album注册监听,当被监听的Album发生变更时,返回监听回调。
H
huweiqi 已提交
65 66 67 68 69 70

**前提条件:**

- 获取相册管理模块photoAccessHelper实例。
- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。

H
huweiqi 已提交
71
下面以对一个用户相册注册监听,通过重命名相册触发监听回调为例。
H
huweiqi 已提交
72 73 74 75

**开发步骤:**

1. [获取用户相册](photoAccessHelper-userAlbum-guidelines.md#获取用户相册)
H
huweiqi 已提交
76 77
2. 对指定Album注册监听。
3. 将指定用户相册重命名。
H
huweiqi 已提交
78 79 80

```ts
import dataSharePredicates from '@ohos.data.dataSharePredicates';
N
nwx1279094 已提交
81
import photoAccessHelper from '@ohos.file.photoAccessHelper';
H
huweiqi 已提交
82

N
nwx1279094 已提交
83 84
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKey.ALBUM_NAME;
H
huweiqi 已提交
85
predicates.equalTo(albumName, 'albumName');
N
nwx1279094 已提交
86
let fetchOptions: dataSharePredicates.FetchOptions = {
H
huweiqi 已提交
87 88 89 90 91
  fetchColumns: [],
  predicates: predicates
};

try {
N
nwx1279094 已提交
92 93
  let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions);
  let album: photoAccessHelper.Album = await fetchResult.getFirstObject();
H
huweiqi 已提交
94 95
  console.info('getAlbums successfullyfully, albumName: ' + album.albumUri);

N
nwx1279094 已提交
96
  let onCallback = (changeData: photoAccessHelper.ChangeData) => {
H
huweiqi 已提交
97 98 99 100 101 102 103 104 105 106 107 108 109 110
    console.info('onCallback successfully, changData: ' + JSON.stringify(changeData));
  }
  phAccessHelper.registerChange(album.albumUri, false, onCallback);

  album.albumName = 'newAlbumName' + Date.now();
  await album.commitModify();
  fetchResult.close();
} catch (err) {
  console.error('onCallback failed with err: ' + err);
}
```

## 模糊监听

H
huweiqi 已提交
111
通过设置forChildUris值为true来注册模糊监听,uri为相册uri时,forChildUris为true能监听到相册中文件的变化,如果是false只能监听相册本身变化。uri为fileAsset时,forChildUris为true、false没有区别,uri为DefaultChangeUri时,forChildUris必须为true,如果为false将找不到该uri,收不到任何消息。
H
huweiqi 已提交
112

H
huweiqi 已提交
113
### 对所有FileAsset注册监听
H
huweiqi 已提交
114

H
huweiqi 已提交
115
对所有FileAsset注册监听,当有被监听的FileAsset发生变更时,返回监听回调。
H
huweiqi 已提交
116 117 118 119 120 121

**前提条件:**

- 获取相册管理模块photoAccessHelper实例。
- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。

H
huweiqi 已提交
122
下面以对所有FileAsset注册监听,对被监听的FileAsset设置为收藏触发监听回调为例。
H
huweiqi 已提交
123 124 125

**开发步骤:**

H
huweiqi 已提交
126
1. 对所有FileAsset注册监听。
H
huweiqi 已提交
127 128 129 130 131
2. [获取指定媒体资源](photoAccessHelper-resource-guidelines.md#获取指定媒体资源)
3. 将指定媒体资源设置为收藏。

```ts
import dataSharePredicates from '@ohos.data.dataSharePredicates';
N
nwx1279094 已提交
132
import photoAccessHelper from '@ohos.file.photoAccessHelper';
H
huweiqi 已提交
133

N
nwx1279094 已提交
134
let onCallback = (changeData:  dataSharePredicates.ChangeData) => {
H
huweiqi 已提交
135 136 137 138
  console.info('onCallback successfully, changData: ' + JSON.stringify(changeData));
}
phAccessHelper.registerChange(photoAccessHelper.DefaultChangeUri.DEFAULT_PHOTO_URI, true, onCallback);

N
nwx1279094 已提交
139 140
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let fetchOptions: photoAccessHelper.FetchOptions = {
H
huweiqi 已提交
141 142 143 144 145
  fetchColumns: [],
  predicates: predicates
};

try {
N
nwx1279094 已提交
146 147
  let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
  let fileAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
H
huweiqi 已提交
148 149 150 151 152 153 154 155
  console.info('getAssets fileAsset.uri : ' + fileAsset.uri);
  await fileAsset.favorite(true);
  fetchResult.close();
} catch (err) {
  console.error('onCallback failed with err: ' + err);
}
```

H
huweiqi 已提交
156
## 取消对指定URI的监听
H
huweiqi 已提交
157

H
huweiqi 已提交
158
取消对指定uri的监听,通过调用[unRegisterChange](../reference/apis/js-apis-photoAccessHelper.md#unregisterchange)接口取消对指定uri的监听。一个uri可以注册多个监听,存在多个callback监听时,可以取消指定注册的callback的监听;不指定callback时取消该uri的所有监听。
H
huweiqi 已提交
159 160 161 162 163 164

**前提条件:**

- 获取相册管理模块photoAccessHelper实例。
- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。

H
huweiqi 已提交
165
下面以取消对一张图片指定的监听为例,取消监听后,改变图片的收藏状态不再触发对应的监听回调。
H
huweiqi 已提交
166 167 168 169

**开发步骤:**

1. [获取指定媒体资源](photoAccessHelper-resource-guidelines.md#获取指定媒体资源)
H
huweiqi 已提交
170
2. 取消对指定媒体资源uri的监听。
H
huweiqi 已提交
171 172 173 174
3. 将指定媒体资源设置为收藏。

```ts
import dataSharePredicates from '@ohos.data.dataSharePredicates';
N
nwx1279094 已提交
175
import photoAccessHelper from '@ohos.file.photoAccessHelper';
H
huweiqi 已提交
176

N
nwx1279094 已提交
177
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
H
huweiqi 已提交
178
predicates.equalTo(photoAccessHelper.ImageVideoKey.DISPLAY_NAME, 'test.jpg');
N
nwx1279094 已提交
179
let fetchOptions: photoAccessHelper.FetchOptions = {
H
huweiqi 已提交
180 181 182 183 184
  fetchColumns: [],
  predicates: predicates
};

try {
N
nwx1279094 已提交
185 186
  let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
  let fileAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
H
huweiqi 已提交
187 188
  console.info('getAssets fileAsset.uri : ' + fileAsset.uri);

N
nwx1279094 已提交
189
  let onCallback1 = (changeData: photoAccessHelper.ChangeData) => {
H
huweiqi 已提交
190 191
    console.info('onCallback1, changData: ' + JSON.stringify(changeData));
  }
N
nwx1279094 已提交
192
  let onCallback2 = (changeData: photoAccessHelper.ChangeData) => {
H
huweiqi 已提交
193 194 195 196 197 198 199 200 201 202 203 204
    console.info('onCallback2, changData: ' + JSON.stringify(changeData));
  }
  phAccessHelper.registerChange(fileAsset.uri, false, onCallback1);
  phAccessHelper.registerChange(fileAsset.uri, false, onCallback2);
  phAccessHelper.unRegisterChange(fileAsset.uri, onCallback1);

  await fileAsset.favorite(true);
  fetchResult.close();
} catch (err) {
  console.error('onCallback failed with err: ' + err);
}
```