跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

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同理。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。