【每日学点鸿蒙知识】图片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。

相关推荐
nashane5 小时前
HarmonyOS Wi-Fi连接用户操作监听全解析:从系统弹框到Promise回调
华为·harmonyos·harmonyos 5
Lanren的编程日记8 小时前
Flutter 鸿蒙应用数据版本管理实战:版本记录+版本回退+版本对比,实现全链路数据版本控制
flutter·华为·harmonyos
我是大聪明.8 小时前
DeepSeek V4 Pro + 华为昇腾910:国产大模型落地的性能实测与深度解析
人工智能·华为
木斯佳10 小时前
HarmonyOS 本地存储实战:记账本案例改造实现日历联动
华为·harmonyos
李游Leo10 小时前
别让一张 12MB 的照片拖垮页面:ImageSource / PixelMap / ImagePacker 的工程化处理链路
harmonyos
nashane11 小时前
HarmonyOS 6学习:画中画(PiP)状态同步与场景化实战指南
学习·pip·harmonyos·harmonyos 5
@不误正业11 小时前
鸿蒙小艺智能体开放平台实战-接入系统级AI-Agent能力
人工智能·华为·harmonyos
IntMainJhy14 小时前
「Flutter三方库sqflite的鸿蒙化适配与实战指南:从入门到踩坑的本地数据库开发全记录」
数据库·flutter·华为·信息可视化·数据库开发·harmonyos
前端技术16 小时前
HarmonyOS开发:鸿蒙应用开发发展史
华为·harmonyos
忡黑梨17 小时前
eNSP_路由策略
运维·服务器·网络·华为·智能路由器·负载均衡