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中查询是否有修改。当然如果能在问题暴露之前识别到是最好的,不管接口管理对于项目管理要求还是很高的,一般没有必要如此操作。 ====》
三、对于升级之后,类引入导包会重新初始化
对于单例失效的问题,参见之前的博客最底下 =====》
该问题现象是,app启动时会调用初始化,在时机调用时又会初始化。具体原因不明。使用static修饰的变量,一样有这样的问题。所以目前的解决方案都是放在 GlobalThis 中。
还有一些问题,会红色波浪线提示报错,但是编译时不会导致报错。目前忽略这些类型的问题。例如:TS类型文件中,引入ETS。在TS中,使用AppStorage同理。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/290614.html