鸿蒙0基础学习【应用升级过程代码开发注意事项】文件基础服务
本文介绍了HarmonyOS开发中两个关键场景的实现方法:1) 在BackupExtensionAbility中通过重写onRestoreEx方法区分升级和克隆场景,利用restoreInfo字段进行判断;2) 提供了公共目录文件uri继承方案,通过convertFileUris接口将HarmonyOS媒体库文件uri转换为HarmonyOS NEXT可访问的uri。两种方案均包含详细代码示例,帮
区分升级场景和克隆场景
开发者需要区分升级场景和克隆场景时,可以重写BackupExtensionAbility中的onRestoreEx方法,通过restoreInfo预留字段进行场景区分。
示例代码如下所示:
import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit';
const TAG = `BackupExtensionAbility`;
interface ErrorInfo {
type: string,
errorCode: number,
errorInfo: string
}
interface DetailInfo {
type: string,
detail: string
}
export default class EntryBackupAbility extends BackupExtensionAbility {
async onBackup() {
console.log(TAG, 'onBackup ok');
}
async onRestoreEx(bundleVersion: BundleVersion, restoreInfo: string): Promise<string> {
console.log(TAG, `onRestoreEx ok ${JSON.stringify(bundleVersion)}`);
let errorInfo: ErrorInfo = {
type: "ErrorInfo",
errorCode: 0,
errorInfo: "app diy error info"
}
if (bundleVersion.name.startsWith("0.0.0.0")){
// 在此处实现终端设备从HarmonyOS 4.x到HarmonyOS NEXT的应用数据处理。
// 涉及异步操作请进行同步等待
console.log(TAG, `HarmonyOS to HarmonyOS NEXT scenario`);
// 如果升级场景与克隆场景没有差异化数据处理诉求,此处可以忽略。
if (this.IsOtaScenario(restoreInfo)) {
// 在此处实现终端设备从HarmonyOS 4.x到HarmonyOS NEXT升级场景的特有数据处理。无特殊要求,此处可以忽略。
console.log(TAG, `Ota Scenario`)
} else {
// 在此处实现终端设备从HarmonyOS 4.x到HarmonyOS NEXT克隆场景的特有数据处理。无特殊要求,此处可以忽略。
console.log(TAG, `Clone Scenario`)
}
} else {
// 在此处实现从HarmonyOS NEXT设备迁移到HarmonyOS NEXT设备后,应用数据的处理。无特殊要求,可以空实现。
// 涉及异步操作请进行同步等待
console.log(TAG, `Other scenario`);
}
return JSON.stringify(errorInfo);
}
/**
* 判断是否是升级场景
* @param restoreInfo 预留字段,应用恢复过程中需要的扩展参数
* @returns 升级场景返回true,否则返回false
*/
IsOtaScenario(restoreInfo: string): boolean {
let details:Array<DetailInfo> = JSON.parse(restoreInfo);
return details.some((detailInfo) => {
//设备从HarmonyOS 4.x升级到HarmonyOS NEXT/5.0.x场景判断条件
return detailInfo.type == 'isSameDevice' && detailInfo.detail == 'true';
});
}
}
公共目录文件uri继承
场景说明
应用在HarmonyOS 3.1 Release API 9及更低版本运行时,开发者可通过记录公共媒体库中文件的uri或者路径,用于后续的文件访问。 当终端设备从HarmonyOS升级到HarmonyOS NEXT后,公共媒体库中的文件会由系统整体搬迁至新位置,直接继承。导致应用记录的旧有uri或者路径不可使用。
为解决该问题,系统提供数据迁移公共目录文件继承方案,支持应用将记录的HarmonyOS公共媒体库文件uri或者路径转换为对应的HarmonyOS NEXT公共媒体库文件uri或者路径,并且返回对应文件类型。当应用需要在HarmonyOS NEXT中访问公共媒体库中的文件时,可以使用转换后的HarmonyOS NEXT公共媒体库文件uri或者路径,通过HarmonyOS NEXT提供的公共媒体库API进行授权访问。

代码实现
应用可以调用Scenario Fusion Kit的接口[convertFileUris()],将记录的HarmonyOS公共媒体库文件uri或者路径转换为HarmonyOS NEXT可访问的uri或者路径,并获取到对应文件类型。其中媒体文件类型请参考[继承媒体文件访问权限],其他类型文件可通过[基础文件接口]进行操作。
说明
开发者可以在数据迁移的过程中,通过该接口将HarmonyOS公共媒体库文件uri或者路径转换为对应的HarmonyOS NEXT公共媒体库文件uri或者路径,并重新保存,便于后续使用。
import { fileUriService } from '@kit.ScenarioFusionKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
let sourceFileUris: Array<string> =
['100','content://media/external/files/10', '/storage/emulated/0/Pictures/test.gif',
'/storage/emulated/0/Android/media/com.test/test.mp4'];
fileUriService.convertFileUris(sourceFileUris).then(result => {
hilog.info(0x0000, 'testTag', 'succeeded in converting file uris');
result.forEach(data => {
let sourceUri: string = data.sourceUri;
let targetUri: string = data.targetUri;
let targetType: fileUriService.TargetType = data.targetType;
})
}).catch((error: BusinessError) => {
hilog.error(0x0000, 'testTag', 'Promise error: %{public}d %{public}s', error.code, error.message);
});
} catch (error) {
hilog.error(0x0000, 'testTag', 'failReason: %{public}d %{public}s', error.code, error.message);
}
更多鸿蒙开发内容:

在↓↓↓
更多推荐



所有评论(0)