【每日学点鸿蒙知识】图片base64、最先hap包下载、RN获取定位、app安装、SNAPSHOT组件管理

1、HarmonyOS 选择相册的图片后,返回了图片的uri,我该如何根据uri将图片转为base64?

可参考如下转换例子:

复制代码
let packOpts: image.PackingOption = { format: "image/jpeg", quality: 98 };
let imagePackerApi = image.createImagePacker();

const context: Context = getContext(this);
const resourceMgr = context.resourceManager;
let imageBuffer = await resourceMgr.getMediaContent($r('app.media.ic_low'));
const imageSource: image.ImageSource = image.createImageSource(imageBuffer.buffer);
let decodingOptions: image.DecodingOptions = {
  editable: true,
  desiredPixelFormat: 3,
  rotate: 90
}
// 创建pixelMap并进行简单的旋转和缩放

imageSource.createPixelMap(decodingOptions).then((pixelMap: PixelMap) => {

  this.pixelMap = pixelMap
  // pixelmap 转base64 先要有一个packing的过程
  imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => {
    let base64Str = buffer.from(data).toString('base64')
    let resultBase64Str = "data:image/png;base64," + base64Str
    this.resultBase64Str = resultBase64Str
  }).catch((error: BusinessError) => {
    console.error('Failed to pack the image. And the error is: ' + error);
  })
  pixelMap.release();
})
//重点提示: pixelmap转base64 不能直接转,先要加一个packing的过程,下面的方法是一个错误的实例,转出来的base64字符串不对。

let pixelMap = await imageSource.createPixelMap(opts);
console.log("pixelMap.getPixelBytesNumber():" + pixelMap.getPixelBytesNumber())
let arrayBuffer = new ArrayBuffer(pixelMap.getPixelBytesNumber());
pixelMap.readPixelsToBuffer(arrayBuffer)
console.log("arrayBuffer" + arrayBuffer)
let base64Str = buffer.from(arrayBuffer).toString(Constants.BASE_64);
let resultBase64Str = "data:image/png;base64," + base64Str

2、HarmonyOS 如何安装我从服务端下载的最新hap包?

我们首页有个版本更新功能,是否可以将我们的APP(hap)包放到服务端,首页下载后调用系统api安装新版本,怎么安装下载下来的hap,是否需要权限,有没有版本更新示例?

除了本地调试外,安装hap包只有应用市场一个入口,不支持调用api实现

应用市场提供了检测更新升级能力,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/store-update-V5

业务流程:

3、RN有什么方法获取定位信息的详情吗,比如省市区街道

RN没有获取定位信息的能力。推荐通过turboModule,通过OS来实现。OS获取定位信息文档链接如下:

  1. 获取当前经纬度:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-geolocationmanager-V5#geolocationmanagergetcurrentlocation
  2. 再根据经纬度信息获取省市区街道信息:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-geolocationmanager-V5#geolocationmanagergetaddressesfromlocation

4、HarmonyOS 如何安装app?

app升级功能中会先下载app,app下载成功之后调用哪个api进行安装?

应用安装是使用的@ohos.bundle.installer

5、关于SNAPSHOT组件管理与使用?

关于SNAPSHOT组件管理与使用

  1. 如果我们的版本是 1.0.0-SNAPSHOT 那在组件发布到私仓的时候直接用publish+tag的方式发布就行了, 还是需要用dist-tags命令来管理

  2. 如果我们发布的组件版本是1.0.0-SNAPSHOT, 那在使用时 要这样配置版本吗( "name": "1.0.0-SNAPSHOT:snapshot" ), 在override里可以吗?

  3. 如果组件版本是1.0.0 发布的时候添加了--tag命令,会影响正式发布的1.0.0版本吗?

  4. 同一个版本发了多次SNAPSHOT包,在本地的版本通过ohpm install会更新吗? 还是要用ohpm update

  5. dist-tags只能用来加tag,不能发布,推包还是要用publish。publish --tag指定发布版本的tag,需要指定的tag不存在,否则会发布失败。如果指定的tag已存在,请使用 dist-tag update重新指定tag对应的版本

  6. 使用方式为下面代码后支持overrides

    "dependencies": { "<依赖名>": "tag:<tag名>" }

  7. 不影响。同一个包同一个版本只能发布一次,同一个包tag不能重复,publish时如果指定的tag已存在,则发布失败

  8. install不会更新。更新请用ohpm update。

相关推荐
盐焗西兰花8 小时前
鸿蒙学习实战之路 - 图片预览功能实现
学习·华为·harmonyos
盐焗西兰花8 小时前
鸿蒙学习实战之路:HarmonyOS 布局性能优化最佳实践
华为·性能优化·harmonyos
是Dream呀14 小时前
昇腾实战 | 昇腾 NPU 异构编程与 GEMM 调优核心方法
人工智能·华为·cann
乾元15 小时前
AI + Jinja2/Ansible:从自然语义到可执行 Playbook 的完整流水线(工程级深度)
运维·网络·人工智能·网络协议·华为·自动化·ansible
xiaocao_102315 小时前
鸿蒙手机上使用的备忘录怎么导出来?
华为·智能手机·harmonyos
C雨后彩虹17 小时前
最少交换次数
java·数据结构·算法·华为·面试
春卷同学17 小时前
打砖块 - Electron for 鸿蒙PC项目实战案例
android·electron·harmonyos
春卷同学20 小时前
Electron for鸿蒙PC开发的骰子游戏应用
游戏·electron·harmonyos
春卷同学20 小时前
Electron for 鸿蒙pc开发的二十一点游戏
游戏·electron·harmonyos
不老刘21 小时前
react native for OpenHarmony iconfont 图标不显示问题
react native·harmonyos·iconfont