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

相关推荐
ChinaDragonDreamer5 小时前
HarmonyOS:MVVM模式
harmonyos·鸿蒙
RZer10 小时前
HarmonyOS应用开发快速入门
华为·harmonyos
RZer20 小时前
Hypium+python鸿蒙原生自动化安装配置
python·自动化·harmonyos
ChinaDragonDreamer21 小时前
HarmonyOS:状态管理最佳实践
harmonyos·鸿蒙
行十万里人生1 天前
Qt事件处理:理解处理器、过滤器与事件系统
开发语言·git·qt·华为od·华为·华为云·harmonyos
黄暄1 天前
HarmonyOS DevEco Studio模拟器点击运行没有反应的解决方法
harmonyos
AnyaPapa1 天前
HarmonyOS简介:高效开发与测试
华为·harmonyos
御承扬1 天前
从零开始开发纯血鸿蒙应用之自定义构建函数
华为·harmonyos
ChinaDragonDreamer1 天前
HarmonyOS:ForEach:循环渲染
harmonyos·鸿蒙
taopi20242 天前
鸿蒙开发在onPageShow中数据加载不完整的问题分析与解决
harmonyos