openharmony 鸿蒙 changelogs-mediaLibrary

2023-06-24 浏览 (969)

文件子系统ChangeLog

cl.file.1 mediaLibrary相关接口变更

multimedia 部件 mediaLibrary所有接口废弃。

变更影响

mediaLibrary所有接口废弃。系统只对三方应用开放公共目录下文件资源选择和保存功能,由FilePicker提供能力。 基于此前版本开发的应用,需注意废弃接口的迭代更新。

关键接口/组件变更

以下为可以使用FilePicker替代的接口。

模块名方法/属性/枚举/常量变更类型
medialibraryfunction getMediaLibrary(context: Context): MediaLibrary;废弃
medialibraryfunction getFileAssets(options: MediaFetchOptions, callback: AsyncCallback<FetchFileResult>): void废弃
medialibraryfunction getFileAssets(options: MediaFetchOptions): Promise<FetchFileResult>废弃
medialibraryfunction createAsset(mediaType: MediaType, displayName: string, relativePath: string, callback: AsyncCallback<FileAsset>): void废弃
medialibraryfunction createAsset(mediaType: MediaType, displayName: string, relativePath: string): Promise<FileAsset>废弃
medialibraryfunction getPublicDirectory(type: DirectoryType, callback: AsyncCallback<string>): void废弃
medialibraryfunction getPublicDirectory(type: DirectoryType): Promise<string>废弃
medialibraryfunction release(callback: AsyncCallback<void>): void废弃
medialibraryfunction release(): Promise<void>废弃
medialibraryfunction FileAsset.open(mode: string, callback: AsyncCallback<number>): void废弃
medialibraryfunction FileAsset.open(mode: string): Promise<number>废弃
medialibraryfunction FileAsset.close(fd: number, callback: AsyncCallback<void>): void废弃
medialibraryfunction FileAsset.close(fd: number): Promise<void>废弃
medialibraryfunction FetchFileResult.getCount(): number废弃
medialibraryfunction FetchFileResult.isAfterLast(): boolean废弃
medialibraryfunction FetchFileResult.close(): void废弃
medialibraryfunction FetchFileResult.getFirstObject(callback: AsyncCallback<FileAsset>): void废弃
medialibraryfunction FetchFileResult.getFirstObject(): Promise<FileAsset>废弃
medialibraryfunction FetchFileResult.getNextObject(callback: AsyncCallback<FileAsset>): void废弃
medialibraryfunction FetchFileResult.getNextObject(): Promise<FileAsset>废弃
medialibraryfunction FetchFileResult.getLastObject(callback: AsyncCallback<FileAsset>): void废弃
medialibraryfunction FetchFileResult.getLastObject(): Promise<FileAsset>废弃
medialibraryfunction FetchFileResult.getPositionObject(index: number, callback: AsyncCallback<FileAsset>): void废弃
medialibraryfunction FetchFileResult.getPositionObject(index: number): Promise<FileAsset>废弃
medialibraryfunction FetchFileResult.getAllObject(callback: AsyncCallback<Array<FileAsset>>): void废弃
medialibraryfunction FetchFileResult.getAllObject(): Promise<Array<FileAsset>>废弃
medialibraryfunction Album.getFileAssets(options: MediaFetchOptions, callback: AsyncCallback<FetchFileResult>): void废弃
medialibraryfunction Album.getFileAssets(options?: MediaFetchOptions): Promise<FetchFileResult>废弃
medialibraryenum FileKey废弃
medialibraryenum DirectoryType废弃
medialibraryenum MediaType废弃
medialibraryinterface MediaFetchOptions废弃
medialibraryinterface FileAsset废弃

适配指导

使用mediaLibrary接口编辑公共目录下的文件示例:

  1. 使用getMediaLibrary接口获取媒体库实例。
  2. 创建MediaFetchOptions检索条件使用mediaLibrary实例调用getFileAssets接口获取公共目录下的文件。
  3. 使用FetchFileResult相应接口获取目的文件的fileAsset。
  4. 使用fileAsset.open接口打开这个文件得到fd。
  5. 通过fd使用fs.writeSync接口对这个文件进行编辑修改。
  6. 修改完成后使用fileAsset.close接口关闭这个文件的fd。
  7. 使用fetchFileResult.close接口释放getFileAssets时占用的资源。
  8. 使用release接口释放媒体库实例。

示例:

import mediaLibrary from '@ohos.multimedia.mediaLibrary';
import fs from '@ohos.file.fs';

async function example() {
  try {
    let context = getContext(this);
    let media = mediaLibrary.getMediaLibrary(context);
    let fileKeyObj = mediaLibrary.FileKey;
    let imageType = mediaLibrary.MediaType.IMAGE;
    let getImageOp = {
      selections: fileKeyObj.MEDIA_TYPE + '= ?',
      selectionArgs: [imageType.toString()],
      order: fileKeyObj.DATE_ADDED + ' DESC',
    };
    const fetchFileResult = await media.getFileAssets(getImageOp);
    const fileAsset = await fetchFileResult.getFirstObject();
    console.info('mediaLibrary fileAsset displayName: ' + fileAsset.displayName);
    let fd = await fileAsset.open('rw');
    console.info('mediaLibrary fileAsset open fd: ' + fd);
    let writeLen = fs.writeSync(fd, 'hello, world');
    console.info('write data to file succeed and size is: ' + writeLen);
    fileAsset.close(fd);
    fetchFileResult.close();
    media.release();
  } catch (err) {
    console.error('mediaLibrary fail, err: ' + err);
  }
}

使用FilePicker编辑公共目录下的文件示例:

  1. 获取DocumentViewPicker文件选择器对象。
  2. 拉起DocumentViewPicker.select接口选择目的文件。
  3. 用户选择完后返回目的文件的uri。
  4. 待界面从DocumentViewPicker返回后在其他函数中使用fs.openSync接口通过uri打开这个文件得到fd。
  5. 通过fd使用fs.writeSync接口对这个文件进行编辑修改。
  6. 编辑修改完毕后使用fs.closeSync接口关闭这个fd。

示例:

import mediaLibrary from '@ohos.multimedia.mediaLibrary';
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';

let uri;

async function example() {
  try {
    let DocumentSelectOptions = new picker.DocumentSelectOptions();
    let documentPicker = new picker.DocumentViewPicker();
    documentPicker.select(DocumentSelectOptions).then((DocumentSelectResult) => {
      console.info('DocumentViewPicker.select successfully, DocumentSelectResult uri: ' + JSON.stringify(DocumentSelectResult));
      uri = DocumentSelectResult[0];
    }).catch((err) => {
      console.error('DocumentViewPicker.select failed with err: ' + err);
    });
  } catch (err) {
    console.error('DocumentViewPicker failed with err: ' + err);
  }
}

async function writeFile() {
  try {
    let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
    console.info('DocumentViewPicker file fd: ' + file.fd);
    let writeLen = fs.writeSync(file.fd, 'hello, world');
    console.info('write data to file succeed and size is: ' + writeLen);
    fs.closeSync(file);
  } catch (err) {
    console.error('DocumentViewPicker fail, err: ' + err);
  }
}

使用mediaLibrary接口在公共目录下创建文件示例:

  1. 使用getMediaLibrary接口获取媒体库实例。
  2. 使用getPublicDirectory接口获取公共目录路径。
  3. 使用createAsset接口创建文件得到这个文件的fileAsset。
  4. 使用fileAsset.open接口打开这个文件得到fd。
  5. 通过fd使用fs.write接口对这个文件进行编辑修改。
  6. 修改完成后使用fileAsset.close接口关闭这个文件的fd。
  7. 使用release接口释放媒体库实例。

示例:

import mediaLibrary from '@ohos.multimedia.mediaLibrary';
import fs from '@ohos.file.fs';

async function example() {
  try {
    let context = getContext(this);
    let media = mediaLibrary.getMediaLibrary(context);
    let mediaType = mediaLibrary.MediaType.FILE;
    let DIR_DOWNLOAD = mediaLibrary.DirectoryType.DIR_DOWNLOAD;
    const path = await media.getPublicDirectory(DIR_DOWNLOAD);
    const fileAsset = await media.createAsset(mediaType, 'test.txt', path);
    console.info('mediaLibrary fileAsset displayName: ' + fileAsset.displayName);
    let fd = await fileAsset.open('rw');
    console.info('mediaLibrary fileAsset open fd: ' + fd);
    let writeLen = fs.writeSync(fd, 'hello, world');
    console.info('write data to file succeed and size is: ' + writeLen);
    fileAsset.close(fd);
    media.release();
  } catch (err) {
    console.error('mediaLibrary fail, err: ' + err);
  }
}

使用FilePicker在公共目录下创建文件示例:

  1. 获取DocumentViewPicker文件选择器对象。
  2. 拉起DocumentViewPicker.save接口创建保存一个空的文件。
  3. 用户保存完后返回目的文件的uri。
  4. 待界面从DocumentViewPicker返回后在其他函数中使用fs.openSync接口通过uri打开这个文件得到fd。
  5. 通过fd使用fs.writeSync接口对这个文件进行编辑修改。
  6. 编辑修改完毕后使用fs.closeSync接口关闭这个fd。

示例:

import mediaLibrary from '@ohos.multimedia.mediaLibrary';
import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';

let uri;

async function example() {
  try {
    let DocumentSaveOptions = new picker.DocumentSaveOptions();
    DocumentSaveOptions.newFileNames = ['DocumentViewPicker01.txt'];
    let documentPicker = new picker.DocumentViewPicker();
    documentPicker.save(DocumentSaveOptions).then((DocumentSaveResult) => {
      console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' + JSON.stringify(DocumentSaveResult));
      uri = DocumentSaveResult[0];
    }).catch((err) => {
      console.error('DocumentViewPicker.save failed with err: ' + err);
    });
  } catch (err) {
    console.error('DocumentViewPicker failed with err: ' + err);
  }
}

async function writeFile() {
  try {
    let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
    console.info('DocumentViewPicker file fd: ' + file.fd);
    let writeLen = fs.writeSync(file.fd, 'hello, world');
    console.info('write data to file succeed and size is: ' + writeLen);
    fs.closeSync(file);
  } catch (err) {
    console.error('DocumentViewPicker fail, err: ' + err);
  }
}

关键接口/组件变更

medialibrary以下废弃接口由于功能管控,不对三方应用开放,无替代接口。

模块名方法/属性/枚举/常量变更类型
medialibraryfunction getMediaLibrary(): MediaLibrary;废弃
medialibraryfunction on(type: 'deviceChange'|'albumChange'|'imageChange'|'audioChange'|'videoChange'|'fileChange'|'remoteFileChange', callback: Callback<void>): void废弃
medialibraryfunction off(type: 'deviceChange'|'albumChange'|'imageChange'|'audioChange'|'videoChange'|'fileChange'|'remoteFileChange', callback?: Callback<void>): void废弃
medialibraryfunction deleteAsset(uri: string): Promise<void>废弃
medialibraryfunction deleteAsset(uri: string, callback: AsyncCallback<void>): void废弃
medialibraryfunction storeMediaAsset(option: MediaAssetOption, callback: AsyncCallback<string>): void废弃
medialibraryfunction storeMediaAsset(option: MediaAssetOption): Promise<string>废弃
medialibraryfunction startImagePreview(images: Array<string>, index: number, callback: AsyncCallback<void>): void废弃
medialibraryfunction startImagePreview(images: Array<string>, callback: AsyncCallback<void>): void废弃
medialibraryfunction startImagePreview(images: Array<string>, index?: number): Promise<void>废弃
medialibraryfunction startMediaSelect(option: MediaSelectOption, callback: AsyncCallback<Array<string>>): void废弃
medialibraryfunction startMediaSelect(option: MediaSelectOption): Promise<Array<string>>废弃
medialibraryfunction getActivePeers(): Promise<Array<PeerInfo>>;废弃
medialibraryfunction getActivePeers(callback: AsyncCallback<Array<PeerInfo>>): void;废弃
medialibraryfunction getAllPeers(): Promise<Array<PeerInfo>>;废弃
medialibraryfunction FileAsset.isDirectory(callback: AsyncCallback<boolean>): void废弃
medialibraryfunction FileAsset.isDirectory():Promise<boolean>废弃
medialibraryfunction FileAsset.commitModify(callback: AsyncCallback<void>): void废弃
medialibraryfunction FileAsset.commitModify(): Promise<void>废弃
medialibraryfunction FileAsset.getThumbnail(callback: AsyncCallback<image.PixelMap>): void废弃
medialibraryfunction FileAsset.getThumbnail(size: Size, callback: AsyncCallback<image.PixelMap>): void废弃
medialibraryfunction FileAsset.getThumbnail(size?: Size): Promise<image.PixelMap>废弃
medialibraryfunction FileAsset.favorite(isFavorite: boolean, callback: AsyncCallback<void>): void废弃
medialibraryfunction FileAsset.favorite(isFavorite: boolean): Promise<void>废弃
medialibraryfunction FileAsset.isFavorite(callback: AsyncCallback<boolean>): void废弃
medialibraryfunction FileAsset.isFavorite():Promise<boolean>废弃
medialibraryfunction FileAsset.trash(isTrash: boolean, callback: AsyncCallback<void>): void废弃
medialibraryfunction FileAsset.trash(isTrash: boolean): Promise<void>废弃
medialibraryfunction FileAsset.isTrash(callback: AsyncCallback<boolean>): void废弃
medialibraryfunction FileAsset.isTrash():Promise<boolean>废弃
medialibraryfunction getAlbums(options: MediaFetchOptions, callback: AsyncCallback<Array<Album>>): void废弃
medialibraryfunction getAlbums(options: MediaFetchOptions): Promise<Array<Album>>废弃
medialibraryfunction Album.commitModify(callback: AsyncCallback<void>): void废弃
medialibraryfunction Album.commitModify(): Promise<void>废弃
medialibraryenum DeviceType废弃
medialibraryinterface PeerInfo废弃
medialibraryinterface Size废弃
medialibraryinterface MediaAssetOption废弃
medialibraryinterface MediaSelectOption废弃

你可能感兴趣的鸿蒙文章

harmony 鸿蒙Readme

harmony 鸿蒙xxx子系统ChangeLog

harmony 鸿蒙元能力子系统JS API变更Changelog

harmony 鸿蒙帐号子系统changeLog

harmony 鸿蒙arkui子系统ChangeLog

harmony 鸿蒙媒体子系统 JS API 变更 Changelog

harmony 鸿蒙公共基础类库子系统JS API变更Changelog

harmony 鸿蒙分布式数据管理子系统JS API变更Changelog

harmony 鸿蒙文件管理子系统ChangeLog

harmony 鸿蒙输入法框架changeLog

  • 所属分类: 后端技术
  • 本文标签: 鸿蒙 软件
  • 版权声明: 本文链接 https://seaxiang.com/blog/3c19f2eda41645c783e2486940a1b5bc