【每日学点HarmonyOS Next知识】数据迁移、大量图片存放、原生自定义键盘调用、APP包安装到测试机、photoPicker顶部高度

137 阅读3分钟

1、迁移(克隆)手机中经过 ArkData (方舟数据管理)服务持久化后的数据?

在用户手动迁移(克隆)手机数据至另一台设备后,使用 ArkData (方舟数据管理)服务持久化的数据是否会同步迁移至新设备中? 例如:调用 用户首选项 flush 方法进行持久化的数据。

针对应用沙箱数据,HarmonyOS NEXT提供“数据迁移框架”统一调度应用数据迁移任务 参考文档:developer.huawei.com/consumer/cn…

image.png

image.png

image.png

2、HarmonyOS 项目中大量图片资源存放位置最佳实践?

项目中存在大量的图片资源,华为是有最佳实践方案放置目录,目前项目工程存在base/media与rawfile两个目录,最佳实践放在哪个目录下?

可以根据需求来选择

  • base目录:base目录是默认存在的目录,二级子目录element用于存放字符串、颜色、布尔值等基础元素,media、profile存放媒体、动画、布局等资源文件。目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。通过指定资源类型(type)和资源名称(name)引用。
  • rawfile目录:支持创建多层子目录,子目录名称可以自定义,文件夹内可以自由放置各类资源文件。目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。通过指定文件路径和文件名引用。

3、HarmonyOS H5页面怎么调用原生自定义键盘?

对javaScriptProxy和runJavaScript封装,实现JSBridge通信方案。适用于H5调用原生侧函数。可以参考:gitee.com/harmonyos/c…

这个链接中有可供参考的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唤起键盘”可参考文档链接:developer.huawei.com/consumer/cn…

根据问题描述,示例代码如下:

<!--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安装到测试手机上。 开放性测试指导文档:developer.huawei.com/consumer/cn…

APP:

image.png 元服务:

image.png

5、HarmonyOS 应该如何拿到photoPicker顶部的固有高度?

目前暂时没有API或相关工具支持实现获取photoPicker顶部的固有高度。photoPicker顶部的高度为56vp,可以基于此验证。