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. 回调成功和失败
二、使用媒体库时,要对初始化的方法进行修改
对于系统接口调用的修改,思路是首先定位接口是否有问题,然后去官方的接口wiki中查询是否有修改。当然如果能在问题暴露之前识别到是最好的,不管接口管理对于项目管理要求还是很高的,一般没有必要如此操作。
====》开源官方的接口汇总
三、对于升级之后,类引入导包会重新初始化
对于单例失效的问题,参见之前的博客最底下 =====》OpenHarmony开源鸿蒙学习入门–API8升级到API9
该问题现象是,app启动时会调用初始化,在时机调用时又会初始化。具体原因不明。使用static修饰的变量,一样有这样的问题。所以目前的解决方案都是放在 GlobalThis 中。
还有一些问题,会红色波浪线提示报错,但是编译时不会导致报错。目前忽略这些类型的问题。例如:TS类型文件中,引入ETS。在TS中,使用AppStorage同理。