HarmonyOS实战开发:@ohos.file.backup (备份恢复)

该模块为应用提供备份/恢复数据的能力。

说明:

  • 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
  • 本模块接口为系统接口。

导入模块

import backup from '@ohos.file.backup';

FileMeta

文件的元数据,包含一个应用名称以及文件uri。FileMeta在执行备份/恢复时是不可缺少的对象

系统能力:SystemCapability.FileManagement.StorageService.Backup

名称类型必填说明
bundle名称字符串应用名称,可通过bundleManager.BundleInfo提供的获取方式获取。
uri字符串应用沙箱内待传输文件的名称,当前uri尚未升级为标准格式,仅接受0-9a-zA-Z下划线(_)点(.)组成的名称

FileData

文件的元数据,包含一个已经打开的文件描述符。FileData在执行备份/恢复时是不可缺少的对象

说明:

FileData使用完成后必须关闭,如不关闭会出现内存泄露问题。关闭的方法可参考由@ohos.file.fs提供的fs.closeSync等相关关闭接口。

系统能力:SystemCapability.FileManagement.StorageService.Backup

名称类型必填说明
fd已经打开的文件描述符,通过备份服务获取。

File

一个文件对象。 继承FileMetaFileData

说明:

file.backup.File与@ohos.file.fs中的提供的File是带有不同的涵义,前者是继承FileMetaFileData的对象而后者只有一个文件描述符的对象。请注意做区分,不要混淆。

系统能力:SystemCapability.FileManagement.StorageService.Backup

GeneralCallbacks

备份/恢复过程中的通用回调,备份服务将通过这些回调通知客户端其应用的备份/恢复阶段。

系统能力:SystemCapability.FileManagement.StorageService.Backup

onFileReady

onFileReady : AsyncCallback<File>

回调函数。当服务端返向客户端发送文件成功时触发回调,err为undefined,否则为错误对象。

说明:

AsyncCallback回调中返回的File 所属file.backup.File类型,返回的文件归备份服务所有,一旦文件关闭,备份服务将选择合适的时机去清理,但客户端必须关闭文件句柄。

系统能力:SystemCapability.FileManagement.StorageService.Backup

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900005I/O error
13900011Out of memory
13900020Invalid argument
13900025No space left on device
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

onFileReady: (err: BusinessError, file: backup.File) => {
  if (err) {
    console.error('onFileReady failed with err: ' + JSON.stringify(err));
  }
  console.info('onFileReady success with file: ' + file.bundleName + ' ' + file.uri);
  fs.closeSync(file.fd);
}

onBundleBegin

onBundleBegin : AsyncCallback<string>

回调函数。当应用备份/恢复开始时返回bundle名称成功时触发回调,err为undefined,否则为错误对象。

系统能力:SystemCapability.FileManagement.StorageService.Backup

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900005I/O error
13900011Out of memory
13900020Invalid argument
13900025No space left on device
13900042Unknown error

示例:

import { BusinessError } from '@ohos.base';

onBundleBegin: (err: BusinessError, bundleName: string) => {
  if (err) {
    console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
  }
  console.info('onBundleBegin success with bundleName: ' + bundleName);
}

onBundleEnd

onBundleEnd : AsyncCallback<string>

回调函数。当应用备份/恢复结束后返回bundle名称成功时触发回调,err为undefined,否则为错误对象。

系统能力:SystemCapability.FileManagement.StorageService.Backup

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900005I/O error
13900011Out of memory
13900020Invalid argument
13900025No space left on device
13900042Unknown error

示例:

import { BusinessError } from '@ohos.base';

onBundleEnd: (err: BusinessError, bundleName: string) => {
  if (err) {
    console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
  }
  console.info('onBundleEnd success with bundleName: ' + bundleName);
}

onAllBundlesEnd

onAllBundlesEnd : AsyncCallback<undefined>

回调函数。当所有bundle的备份/恢复过程结束成功时触发回调,err为undefined,否则为错误对象。

系统能力:SystemCapability.FileManagement.StorageService.Backup

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900005I/O error
13900011Out of memory
13900020Invalid argument
13900025No space left on device
13900042Unknown error

示例:

import { BusinessError } from '@ohos.base';

onAllBundlesEnd: (err: BusinessError) => {
  if (err) {
    console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
  }
  console.info('onAllBundlesEnd success');
}

onBackupServiceDied

onBackupServiceDied : Callback<undefined>

回调函数。备份服务死亡时触发回调。

系统能力:SystemCapability.FileManagement.StorageService.Backup

示例:

onBackupServiceDied: () => {
  console.info('onBackupServiceDied success');
}

backup.getLocalCapabilities

getLocalCapabilities(callback: AsyncCallback<FileData>): void

用于获取一个描述本地能力的Json文件。使用callback异步回调。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
回调AsyncCallback<FileData>异步获取本地能力文件之后的回调。返回FileData对象。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900005I/O error
13900011Out of memory
13900025No space left on device
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

try {
  backup.getLocalCapabilities((err: BusinessError, fileData: backup.FileData) => {
    if (err) {
      console.error('getLocalCapabilities failed with err: ' + JSON.stringify(err));
    }
    console.info('getLocalCapabilities success');
    console.info('fileData info:' + fileData.fd);
    fs.closeSync(fileData.fd);
  });
} catch (error) {
  let err: BusinessError = error as BusinessError;
  console.error('getLocalCapabilities failed with err: ' + JSON.stringify(err));
}

能力文件可以通过@ohos.file.fs提供的fs.stat等相关接口获取,能力文件内容示例:

{
 "bundleInfos" :[{
   "allToBackup" : true,
   "extensionName" : "BackupExtensionAbility",
   "name" : "com.example.hiworld",
   "needToInstall" : false,
   "spaceOccupied" : 0,
   "versionCode" : 1000000,
   "versionName" : "1.0.0"
   }],
 "deviceType" : "default",
 "systemFullName" : "OpenHarmony-4.0.0.0"
}

backup.getLocalCapabilities

getLocalCapabilities(): Promise<FileData>

用于获取一个描述本地能力的Json文件。使用Promise异步回调。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

返回值:

类型说明
Promise<FileData>Promise对象,返回FileData对象。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900005I/O error
13900011Out of memory
13900025No space left on device
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

async function getLocalCapabilities() {
  try {
    let fileData = await backup.getLocalCapabilities();
    console.info('getLocalCapabilities success');
    console.info('fileData info:' + fileData.fd);
    fs.closeSync(fileData.fd);
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error('getLocalCapabilities failed with err: ' + JSON.stringify(err));
  }
}

能力文件可以通过@ohos.file.fs提供的fs.stat等相关接口获取,能力文件内容示例:

{
 "bundleInfos" :[{
   "allToBackup" : true,
   "extensionName" : "BackupExtensionAbility",
   "name" : "com.example.hiworld",
   "needToInstall" : false,
   "spaceOccupied" : 0,
   "versionCode" : 1000000,
   "versionName" : "1.0.0"
   }],
 "deviceType" : "default",
 "systemFullName" : "OpenHarmony-4.0.0.0"
}

SessionBackup

备份流程对象,用来支撑应用备份的流程。在使用前,需要先创建SessionBackup实例。

constructor

constructor(callbacks: GeneralCallbacks);

备份流程的构造函数,用于获取SessionBackup类的实例。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
callbackGeneralCallbacks备份流程所需的回调。

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let generalCallbacks: backup.GeneralCallbacks = {
  onFileReady: (err: BusinessError, file: backup.File) => {
    if (err) {
      console.error('onFileReady failed with err: ' + JSON.stringify(err));
    }
    console.info('onFileReady success');
    fs.closeSync(file.fd);
  },
  onBundleBegin: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleBegin success');
  },
  onBundleEnd: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleEnd success');
  },
  onAllBundlesEnd: (err: BusinessError) => {
    if (err) {
      console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onAllBundlesEnd success');
  },
  onBackupServiceDied: () => {
    console.info('service died');
  }
};
let sessionBackup = new backup.SessionBackup(generalCallbacks);

appendBundles

appendBundles(bundlesToBackup: string[], callback: AsyncCallback<void>): void

添加需要备份的应用。当前整个流程中,在获取SessionBackup类的实例后只能调用一次。使用callback异步回调。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
bundlesToBackupstring[]需要备份的应用名称的数组。
callbackAsyncCallback<void>异步添加备份应用之后的回调。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900001Operation not permitted
13900005I/O error
13900011Out of memory
13900020Invalid argument
13900025No space left on device
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let generalCallbacks: backup.GeneralCallbacks = {
  onFileReady: (err: BusinessError, file: backup.File) => {
    if (err) {
      console.error('onFileReady failed with err: ' + JSON.stringify(err));
    }
    console.info('onFileReady success');
    fs.closeSync(file.fd);
  },
  onBundleBegin: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleBegin success');
  },
  onBundleEnd: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleEnd success');
  },
  onAllBundlesEnd: (err: BusinessError) => {
    if (err) {
      console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onAllBundlesEnd success');
  },
  onBackupServiceDied: () => {
    console.info('service died');
  }
};
let sessionBackup = new backup.SessionBackup(generalCallbacks);
try {
  let backupApps: Array<string> = [
    "com.example.hiworld",
  ];
  sessionBackup.appendBundles(backupApps, (err: BusinessError) => {
    if (err) {
      console.error('appendBundles failed with err: ' + JSON.stringify(err));
    }
    console.info('appendBundles success');
  });
} catch (error) {
  let err: BusinessError = error as BusinessError;
  console.error('appendBundles failed with err: ' + JSON.stringify(err));
}

appendBundles

appendBundles(bundlesToBackup: string[]): Promise<void>

添加需要备份的应用。当前整个流程中,在获取SessionBackup类的实例后只能调用一次。使用Promise异步回调。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
bundlesToBackupstring[]需要备份的应用名称的数组。

返回值:

类型说明
承诺<无效>Promise对象。无返回值。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900001Operation not permitted
13900005I/O error
13900011Out of memory
13900020Invalid argument
13900025No space left on device
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let generalCallbacks: backup.GeneralCallbacks = {
  onFileReady: (err: BusinessError, file: backup.File) => {
    if (err) {
      console.error('onFileReady failed with err: ' + JSON.stringify(err));
    }
    console.info('onFileReady success');
    fs.closeSync(file.fd);
  },
  onBundleBegin: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleBegin success');
  },
  onBundleEnd: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleEnd success');
  },
  onAllBundlesEnd: (err: BusinessError) => {
    if (err) {
      console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onAllBundlesEnd success');
  },
  onBackupServiceDied: () => {
    console.info('service died');
  }
};
let sessionBackup = new backup.SessionBackup(generalCallbacks);
async function appendBundles() {
  try {
    let backupApps: Array<string> = [
      "com.example.hiworld",
    ];
    await sessionBackup.appendBundles(backupApps);
    console.info('appendBundles success');
  } catch (error) {
  let err: BusinessError = error as BusinessError;
  console.error('appendBundles failed with err: ' + JSON.stringify(err));
  }
}

SessionRestore

恢复流程对象,用来支撑应用恢复的流程。在使用前,需要先创建SessionRestore实例。

constructor

constructor(callbacks: GeneralCallbacks);

恢复流程的构造函数,用于获取SessionRestore类的实例。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
callbackGeneralCallbacks恢复流程所需的回调。

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let generalCallbacks: backup.GeneralCallbacks = {
  onFileReady: (err: BusinessError, file: backup.File) => {
    if (err) {
      console.error('onFileReady failed with err: ' + JSON.stringify(err));
    }
    console.info('onFileReady success');
    fs.closeSync(file.fd);
  },
  onBundleBegin: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleBegin success');
  },
  onBundleEnd: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleEnd success');
  },
  onAllBundlesEnd: (err: BusinessError) => {
    if (err) {
      console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onAllBundlesEnd success');
  },
  onBackupServiceDied: () => {
    console.info('service died');
  }
};
let sessionRestore = new backup.SessionRestore(generalCallbacks);

appendBundles

appendBundles(remoteCapabilitiesFd: number, bundlesToBackup: string[], callback: AsyncCallback<void>): void

添加需要恢复的应用。当前整个流程中,在获取SessionRestore类的实例后只能调用一次。使用callback异步回调。

说明:

  • 服务在恢复时需要其能力文件进行相关校验。
  • 因此remoteCapabilitiesFd可通过备份端服务所提供的getLocalCapabilities接口获取,可对其内容根据恢复应用的实际状况修改参数。也可通过getLocalCapabilities提供的json示例自行生成能力文件。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
remoteCapabilitiesFd用于恢复所需能力文件的文件描述符。
bundlesToBackupstring[]需要恢复的应用名称的数组。
回调AsyncCallback<void>异步添加需要恢复的应用之后的回调。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900001Operation not permitted
13900005I/O error
13900011Out of memory
13900020Invalid argument
13900025No space left on device
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let generalCallbacks: backup.GeneralCallbacks = {
  onFileReady: (err: BusinessError, file: backup.File) => {
    if (err) {
      console.error('onFileReady failed with err: ' + JSON.stringify(err));
    }
    console.info('onFileReady success');
    fs.closeSync(file.fd);
  },
  onBundleBegin: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleBegin success');
  },
  onBundleEnd: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleEnd success');
  },
  onAllBundlesEnd: (err: BusinessError) => {
    if (err) {
      console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onAllBundlesEnd success');
  },
  onBackupServiceDied: () => {
    console.info('service died');
  }
};
let sessionRestore = new backup.SessionRestore(generalCallbacks);
async function appendBundles() {
  try {
    let fileData = await backup.getLocalCapabilities();
    console.info('getLocalCapabilities success');
    let restoreApps: Array<string> = [
      "com.example.hiworld",
    ];
    sessionRestore.appendBundles(fileData.fd, restoreApps, (err: BusinessError) => {
      if (err) {
        console.error('appendBundles failed with err: ' + JSON.stringify(err));
      }
      console.info('appendBundles success');
    });
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error('getLocalCapabilities failed with err: ' + JSON.stringify(err));
  } finally {
    fs.closeSync(fileData.fd);
  }
}

appendBundles

appendBundles(remoteCapabilitiesFd: number, bundlesToBackup: string[]): Promise<void>

添加需要恢复的应用。当前整个流程中,在获取SessionRestore类的实例后只能调用一次。使用Promise异步回调。

说明:

  • 服务在恢复时需要其能力文件进行相关校验。
  • 因此remoteCapabilitiesFd可通过备份端服务所提供的getLocalCapabilities接口获取,可对其内容根据恢复应用的实际状况修改参数。也可通过getLocalCapabilities提供的json示例自行生成能力文件。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
remoteCapabilitiesFd用于恢复所需能力文件的文件描述符。
bundlesToBackupstring[]需要恢复的应用包名称的数组。

返回值:

类型说明
承诺<无效>Promise对象。无返回值。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900001Operation not permitted
13900005I/O error
13900011Out of memory
13900020Invalid argument
13900025No space left on device
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let generalCallbacks: backup.GeneralCallbacks = {
  onFileReady: (err: BusinessError, file: backup.File) => {
    if (err) {
      console.error('onFileReady failed with err: ' + JSON.stringify(err));
    }
    console.info('onFileReady success');
    fs.closeSync(file.fd);
  },
  onBundleBegin: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleBegin success');
  },
  onBundleEnd: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleEnd success');
  },
  onAllBundlesEnd: (err: BusinessError) => {
    if (err) {
      console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onAllBundlesEnd success');
  },
  onBackupServiceDied: () => {
    console.info('service died');
  }
};
let sessionRestore = new backup.SessionRestore(generalCallbacks);
async function appendBundles() {
  try {
    let fileData = await backup.getLocalCapabilities();
    console.info('getLocalCapabilities success');
    let restoreApps: Array<string> = [
      "com.example.hiworld",
    ];
    await sessionRestore.appendBundles(fileData.fd, restoreApps);
    console.info('appendBundles success');
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error('getLocalCapabilities failed with err: ' + JSON.stringify(err));
  } finally {
    fs.closeSync(fileData.fd);
  }
}

getFileHandle

getFileHandle(fileMeta: FileMeta, callback: AsyncCallback<void>): void

用于请求从服务中获取共享文件。使用callback异步回调。

说明:

  • 这个接口是零拷贝特性(减少不必要的内存拷贝,实现了更高效率的传输)的一部分。零拷贝方法可参考由@ohos.file.fs提供的fs.copyFile等相关零拷贝接口。
  • 使用getFileHandle前需要获取SessionRestore类的实例,并且成功通过appendBundles添加需要待恢复的应用。
  • 开发者可以通过onFileReady回调来获取文件句柄,当客户端完成文件操作时,需要使用publishFile来进行发布。
  • 根据所需要恢复的文件个数,可以多次调用getFileHandle。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
fileMetaFileMeta恢复文件的元数据。
callbackAsyncCallback<void>异步请求文件句柄成功之后的回调。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900001Operation not permitted
13900020Invalid argument
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let generalCallbacks: backup.GeneralCallbacks = {
  onFileReady: (err: BusinessError, file: backup.File) => {
    if (err) {
      console.error('onFileReady failed with err: ' + JSON.stringify(err));
    }
    console.info('onFileReady success');
    fs.closeSync(file.fd);
  },
  onBundleBegin: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleBegin success');
  },
  onBundleEnd: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleEnd success');
  },
  onAllBundlesEnd: (err: BusinessError) => {
    if (err) {
      console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onAllBundlesEnd success');
  },
  onBackupServiceDied: () => {
    console.info('service died');
  }
};
let sessionRestore = new backup.SessionRestore(generalCallbacks);
let fileMeta: backup.FileMeta = {
  bundleName: "com.example.hiworld",
  uri: "test.txt"
}
sessionRestore.getFileHandle(fileMeta, (err: BusinessError) => {
  if (err) {
    console.error('getFileHandle failed with err: ' + JSON.stringify(err));
  }
  console.info('getFileHandle success');
});

getFileHandle

getFileHandle(fileMeta: FileMeta): Promise<void>

用于请求从服务中获取共享文件。使用Promise异步回调。

说明:

  • 这个接口是零拷贝特性(减少不必要的内存拷贝,实现了更高效率的传输)的一部分。零拷贝方法可参考由@ohos.file.fs提供的fs.copyFile等相关零拷贝接口。
  • 使用getFileHandle前需要获取SessionRestore类的实例,并且成功通过appendBundles添加需要待恢复的应用。
  • 开发者可以通过onFileReady回调来获取文件句柄,当客户端完成文件操作时,需要使用publishFile来进行发布。
  • 根据所需要恢复的文件个数,可以多次调用getFileHandle。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
fileMetaFileMeta恢复文件的元数据。

返回值:

类型说明
承诺<无效>Promise对象。无返回值。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900001Operation not permitted
13900020Invalid argument
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let generalCallbacks: backup.GeneralCallbacks = {
  onFileReady: (err: BusinessError, file: backup.File) => {
    if (err) {
      console.error('onFileReady failed with err: ' + JSON.stringify(err));
    }
    console.info('onFileReady success');
    fs.closeSync(file.fd);
  },
  onBundleBegin: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleBegin success');
  },
  onBundleEnd: (err: BusinessError, bundleName: string) => {
    if (err) {
      console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onBundleEnd success');
  },
  onAllBundlesEnd: (err: BusinessError) => {
    if (err) {
      console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
    }
    console.info('onAllBundlesEnd success');
  },
  onBackupServiceDied: () => {
    console.info('service died');
  }
};
let sessionRestore = new backup.SessionRestore(generalCallbacks);
async function getFileHandle() {
  try {
    let fileMeta: backup.FileMeta = {
      bundleName: "com.example.hiworld",
      uri: "test.txt"
    }
    await sessionRestore.getFileHandle(fileMeta);
    console.info('getFileHandle success');
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error('getFileHandle failed with err: ' + JSON.stringify(err));
  }
}

publishFile

publishFile(fileMeta: FileMeta, callback: AsyncCallback<void>): void

用于将FileMeta发布到备份服务,使服务知道文件的内容已经准备完成。使用callback异步回调。

说明:

  • 这个接口是零拷贝特性(减少不必要的内存拷贝,实现了更高效率的传输)的一部分。零拷贝方法可参考由@ohos.file.fs提供的fs.copyFile等相关零拷贝接口。
  • 服务端通过onFileReady返回文件句柄后,客户端可通过零拷贝操作将其对应的文件内容拷贝到服务端提供的文件句柄中。
  • 在完成拷贝操作后可使用publishFile通知备份服务文件已经准备完成。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
fileMetaFileMeta恢复文件元数据。
回调AsyncCallback<void>异步发布文件成功之后的回调。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900001Operation not permitted
13900020Invalid argument
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let g_session: backup.SessionRestore;
function createSessionRestore() {
  let generalCallbacks: backup.GeneralCallbacks = {
    onFileReady: (err: BusinessError, file: backup.File) => {
      if (err) {
        console.error('onFileReady failed with err: ' + JSON.stringify(err));
      }
      console.info('onFileReady success');
      fs.closeSync(file.fd);
      let fileMeta: backup.FileMeta = {
        bundleName: file.bundleName,
        uri: file.uri
      }
      g_session.publishFile(fileMeta, (err: BusinessError) => {
        if (err) {
          console.error('publishFile failed with err: ' + JSON.stringify(err));
        }
        console.info('publishFile success');
      });
    },
    onBundleBegin: (err: BusinessError, bundleName: string) => {
      if (err) {
        console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
      }
      console.info('onBundleBegin success');
    },
    onBundleEnd: (err: BusinessError, bundleName: string) => {
      if (err) {
        console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
      }
      console.info('onBundleEnd success');
    },
    onAllBundlesEnd: (err: BusinessError) => {
      if (err) {
        console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
      }
      console.info('onAllBundlesEnd success');
    },
    onBackupServiceDied: () => {
      console.info('service died');
    }
  };
  let sessionRestore = new backup.SessionRestore(generalCallbacks);
  return sessionRestore;
}
g_session = createSessionRestore();

publishFile

publishFile(fileMeta: FileMeta): Promise<void>

用于将FileMeta发布到备份服务,使服务知道文件的内容已经准备完成。使用Promise异步回调。

说明:

  • 这个接口是零拷贝特性(减少不必要的内存拷贝,实现了更高效率的传输)的一部分。零拷贝方法可参考由@ohos.file.fs提供的fs.copyFile等相关零拷贝接口。
  • 服务端通过onFileReady返回文件句柄后,客户端可通过零拷贝操作将其对应的文件内容拷贝到服务端提供的文件句柄中。
  • 在完成拷贝操作后可使用publishFile通知备份服务文件已经准备完成。

需要权限:ohos.permission.BACKUP

系统能力:SystemCapability.FileManagement.StorageService.Backup

参数:

参数名类型必填说明
fileMetaFileMeta恢复文件元数据。

返回值:

类型说明
Promise<void>Promise对象。无返回值。

错误码:

以下错误码的详细介绍请参见文件管理子系统错误码

错误码ID错误信息
13600001IPC error
13900001Operation not permitted
13900020Invalid argument
13900042Unknown error

示例:

import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';

let g_session: backup.SessionRestore;
async function publishFile(file: backup.FileMeta) {
  let fileMeta: backup.FileMeta = {
    bundleName: file.bundleName,
    uri: file.uri
  }
  await g_session.publishFile(fileMeta);
}
function createSessionRestore() {
  let generalCallbacks: backup.GeneralCallbacks = {
    onFileReady: (err: BusinessError, file: backup.File) => {
      if (err) {
        console.error('onFileReady failed with err: ' + JSON.stringify(err));
      }
      console.info('onFileReady success');
      fs.closeSync(file.fd);
      publishFile(file);
      console.info('publishFile success');
    },
    onBundleBegin: (err: BusinessError, bundleName: string) => {
      if (err) {
        console.error('onBundleBegin failed with err: ' + JSON.stringify(err));
      }
      console.info('onBundleBegin success');
    },
    onBundleEnd: (err: BusinessError, bundleName: string) => {
      if (err) {
        console.error('onBundleEnd failed with err: ' + JSON.stringify(err));
      }
      console.info('onBundleEnd success');
    },
    onAllBundlesEnd: (err: BusinessError) => {
      if (err) {
        console.error('onAllBundlesEnd failed with err: ' + JSON.stringify(err));
      }
      console.info('onAllBundlesEnd success');
    },
    onBackupServiceDied: () => {
      console.info('service died');
    }
  };
  let sessionRestore = new backup.SessionRestore(generalCallbacks);
  return sessionRestore;
}
g_session = createSessionRestore();

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值