OpenHarmony开源鸿蒙学习入门--API8升级到API9之系统权限和接口修改

OpenHarmony开源鸿蒙学习入门–API8升级到API9之系统权限和接口修改

在项目框架升级的过程中,遇到很多痛苦的问题。首先是IDE报错无法捕捉栈,其次是debug调试很费劲。问题解决的速度很慢,导致只能对数据流转全路线添加log记录,来定位问题。

在升级过程中遇到很多错误问题,是升级之前没有预料到的,现整理在这里,希望后面的人能少些痛苦。

一、首先升级会导致申请权限的方式改变:
API 8 :

private LOCATION_PERMISSIONS: Array<string> = [
    'ohos.permission.LOCATION'
 ]

private LOCATION_REQUEST_CODE = 1
    
  let context = featureAbility.getContext()
        await new Promise((callback) => {

            context.requestPermissionsFromUser(
                this.LOCATION_PERMISSIONS,
                this.LOCATION_REQUEST_CODE,
                (permissionRequestResult) => {
                    callback(0)
                }
            )
        })

API 9:

private LOCATION_PERMISSIONS: Array<string> = [
    'ohos.permission.LOCATION'
 ]

globalThis.AbilityContext.requestPermissionsFromUser(this.LOCATION_PERMISSIONS).then((data) => {
    // 成功处理
}, (err) => {
    // 失败处理
})
import Ability from '@ohos.application.Ability'

export default class MainAbility extends Ability {
    onCreate(want, launchParam) {
         globalThis.AbilityContext = this.context
    }
};

参见以上代码可以发现,API 8 是通过featureAbility.getContext 来调用requestPermissionsFromUser,并且是三个参数,1.请求的权限集合 2. 申请操作返回的code 3.回调

API 9是通过MainAbility 的context来调用。我们使用globalThis来存储一个全局的变量AbilityContext
并且参数是 1. 请求的权限集合 2. 回调成功和失败

二、使用媒体库时,要对初始化的方法进行修改
OpenHarmony开源鸿蒙学习入门--API8升级到API9之系统权限和接口修改_第1张图片
对于系统接口调用的修改,思路是首先定位接口是否有问题,然后去官方的接口wiki中查询是否有修改。当然如果能在问题暴露之前识别到是最好的,不管接口管理对于项目管理要求还是很高的,一般没有必要如此操作。
====》开源官方的接口汇总

三、对于升级之后,类引入导包会重新初始化

对于单例失效的问题,参见之前的博客最底下 =====》OpenHarmony开源鸿蒙学习入门–API8升级到API9

该问题现象是,app启动时会调用初始化,在时机调用时又会初始化。具体原因不明。使用static修饰的变量,一样有这样的问题。所以目前的解决方案都是放在 GlobalThis 中。

还有一些问题,会红色波浪线提示报错,但是编译时不会导致报错。目前忽略这些类型的问题。例如:TS类型文件中,引入ETS。在TS中,使用AppStorage同理。

你可能感兴趣的:(OpenHarmony知识体系,harmonyos,学习,华为,OpenHarmony)