【每日学点鸿蒙知识】数据迁移、大量图片存放、原生自定义键盘调用、APP包安装到测试机、photoPicker顶部高度
1、迁移(克隆)手机中经过 ArkData (方舟数据管理)服务持久化后的数据?
在用户手动迁移(克隆)手机数据至另一台设备后,使用 ArkData (方舟数据管理)服务持久化的数据是否会同步迁移至新设备中?
例如:调用 用户首选项 flush 方法进行持久化的数据。
针对应用沙箱数据,HarmonyOS NEXT提供“数据迁移框架”统一调度应用数据迁移任务
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-data-migration-overview-V5
2、HarmonyOS 项目中大量图片资源存放位置最佳实践?
项目中存在大量的图片资源,华为是有最佳实践方案放置目录,目前项目工程存在base/media与rawfile两个目录,最佳实践放在哪个目录下?
可以根据需求来选择
- base目录:base目录是默认存在的目录,二级子目录element用于存放字符串、颜色、布尔值等基础元素,media、profile存放媒体、动画、布局等资源文件。目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。通过指定资源类型(type)和资源名称(name)引用。
- rawfile目录:支持创建多层子目录,子目录名称可以自定义,文件夹内可以自由放置各类资源文件。目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。通过指定文件路径和文件名引用。
3、HarmonyOS H5页面怎么调用原生自定义键盘?
对javaScriptProxy和runJavaScript封装,实现JSBridge通信方案。适用于H5调用原生侧函数。可以参考:https://gitee.com/harmonyos/codelabs/tree/master/SelectContact
这个链接中有可供参考的demo。demo可参考如下:Web(xxx)
.onShowFileSelector((event) => {
console.warn(’…MyFileUploader onShowFileSelector invoked’);
console.warn(’…invoke camera’)
this.invokeCamera(uri => {
console.warn(’…uri: ’ + uri)
event?.result.handleFileList([uri]);
});
return true;
})
invokeCamera(callback?: (uri: string) => void) {
const context = getContext(this) as common.UIAbilityContext
context.startAbilityForResult({
action: “ohos.want.action.imageCapture”,
parameters: {
callBundleName: “com.example.mydemo”
}
}, (err: BusinessError, data: common.AbilityResult) => {
if (err && err.code != 0) {
console.error(“imageCapture error:” + ${JSON.stringify(err)});
return;
}
console.warn(“imageCapture data:” + ${JSON.stringify(data)});
let uri = data?.want?.parameters?.resourceUri;
if (callback && uri) {
callback(uri.toString());
}
})
}
结合Web组件的onShowFileSelector事件,已经能够拉起系统摄像机并返回给h5的input标签,并自动触发了其onchange事件。
对于“ohos.want.action唤起键盘”可参考文档链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-ability-wantconstant-V5
根据问题描述,示例代码如下:
<!--index.html-->
<!DOCTYPE html>
<html lang="en-gb">
<head>
<title>WebView MessagePort Demo</title>
</head>
<body>
<h1>Html5 Send and Receive Message</h1>
<h3 id="msg">Receive string:</h3>
<h3 id="msg2">Receive arraybuffer:</h3>
<div style="font-size: 10pt; text-align: center;">
<input type="button" value="Send String" onclick="showKeyboard();" /><br/>
</div>
</body>
<script src="index.js">
</script>
</html>
import web_webview from '@ohos.web.webview';
@Entry
@Component
struct WebComponent {
controller: web_webview.WebviewController = new web_webview.WebviewController();
...
Web({ src: $rawfile('index.html'), controller: this.controller })
.onShowFileSelector((event) => {
console.warn(’…MyFileUploader onShowFileSelector invoked’);
console.warn(’…invoke keyboard’)
this.invokeKeyboard(uri => {
console.warn(’…uri: ’ + uri)
event?.result.handleFileList([uri]);
});
return true;
})
invokeKeyboard(callback?: (uri: string) => void) {
const context = getContext(this) as common.UIAbilityContext
context.startAbilityForResult({
action: “ohos.want.action.dial”,
parameters: {
callBundleName: “com.example.mydemo”
}
}, (err: BusinessError, data: common.AbilityResult) => {
if (err && err.code != 0) {
console.error(“imageCapture error:” + ${JSON.stringify(err)});
return;
}
console.warn(“imageCapture data:” + ${JSON.stringify(data)});
let uri = data?.want?.parameters?.resourceUri;
if (callback && uri) {
callback(uri.toString());
}
})
}
}
4、HarmonyOS 怎样把生成的app包,安装到测试手机上?
现在app功能开发完成了,想要提交给测试部分测试,构建了app包,但是不知道怎么让测试机安装这个包
可通过开放性测试的方式,经应用市场将.app安装到测试手机上。
开放性测试指导文档:https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-betatest-introduction-0000001071477284
APP:
元服务:
5、HarmonyOS 应该如何拿到photoPicker顶部的固有高度?
目前暂时没有API或相关工具支持实现获取photoPicker顶部的固有高度。photoPicker顶部的高度为56vp,可以基于此验证。