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. 回调成功和失败

二、使用媒体库时,要对初始化的方法进行修改 对于系统接口调用的修改,思路是首先定位接口是否有问题,然后去官方的接口wiki中查询是否有修改。当然如果能在问题暴露之前识别到是最好的,不管接口管理对于项目管理要求还是很高的,一般没有必要如此操作。 ====》

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

对于单例失效的问题,参见之前的博客最底下 =====》

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

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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/290614.html

(0)
上一篇 2022年10月4日
下一篇 2022年10月4日

相关推荐

发表回复

登录后才能评论