【Harmony OS】【ARK UI】ETS 上下文基本操作

在HarmonyOS开发中,‘权限申请’,‘权限检查’,‘获取版本信息’,‘获取包名’都是基本操作,今天学习一下怎么实现如下功能,主要分为‘Api说明’,‘代码实现’,‘运行效果’三个步骤进行描述

1. Api 说明

1.1 参考Ability上下文

1.2 context.verifyPermission

verifyPermission(permission: string, options?: PermissionOptions): Promise

 

检查指定进程是否存在指定的权限,options为可选参数,不设置时表示检查自身权限,使用Promise方式作为异步方法。

1.2.1 请求参数

参数一 permission:需要校验的权限

参数二 options:包含pid,uid(常规应用使用不到,这里不做详细讲解)

1.2.2 返回类型

Promise:Promise形式返回结果。返回-1表示不具备当前检查权限,0表示有权限

1.2.3示例:

import ability_featureAbility from '@ohos.ability.featureAbility'

var context = ability_featureAbility.getContext();
let permission = "ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS";
context.verifyPermission(permission,(error, data)=>{      
    if (error) {
        console.error('Operation failed. Cause: ' + JSON.stringify(error));
        return;
    }
    console.info('Operation successful. Data:' + JSON.stringify(data))
})

1.3 context.requestPermissionsFromUser

requestPermissionsFromUser(permissions: Array, requestCode: number): Promise

向用户请求某些权限,在申请权限之前查询自身进程是否已被授予该权限(verifyPermission),如果已有权限,则无需申请,否则需要申请权限。使用Promise方式作为异步方法。

1.3.1 参数详解

参数一:permissions:请求授予的权限

参数二:requestCode :请求状态码 与匹配应用程序对应的特定请求代码,取值范围:大于等于0

1.3.2 返回值:

Promise:回调函数,可以在回调函数中处理接口返回值,返回权限请求结果

1.3.3 PermissionRequestResult 属性详解

requestCode:得到返回的请求码,主要作用用于判断是哪个请求的权限的作用

permissions:请求权限集合

authResults:权限验证结果,返回-1表示不具备当前检查权限,0表示有权限

1.3.4示例

import ability_featureAbility from '@ohos.ability.featureAbility'

var context = ability_featureAbility.getContext();
let permissions = ["ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS","ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS_EXTENSION"];
let requestCode = 123
context.requestPermissionsFromUser(permissions, requestCode)     
.then((data) => {
    console.info('Operation successful. Data: ' + JSON.stringify(data));
}).catch((error) => {
    console.error('Operation failed. Cause: ' + JSON.stringify(error));
})

1.4.1 context.getAppVersionInfo

getAppVersionInfo():Promise

获取应用的版本信息,使用Promise方式作为异步方法。

1.4.2 返回结果:

Promise:返回应用版本信息。

AppVersionInfo参数详解

appName:应用名称

versionCode:应用版本号

versionName:应用版本名称

1.4.3 准备资料需要在config.json中查找version标签,如下图所示

cke_3445.png

1.4.4 示例代码

import ability_featureAbility from '@ohos.ability.featureAbility'

var context = ability_featureAbility.getContext();
context.getAppVersionInfo()     
.then((data) => {
    console.info('Operation successful. Data: ' + JSON.stringify(data));
}).catch((error) => {
    console.error('Operation failed. Cause: ' + JSON.stringify(error));
})

1.5.1 context.getBundleName

getBundleName(): Promise

获取Ability的所属的包名信息,使用Promise方式作为异步方法。

返回值:Promise:Promise形式返回Ability的所属的包名信息。

1.5.2 参考配置文件的元素的bundleName。效果如如下

cke_7818.png

2. 代码实现

2.1 需要在config.json 注册权限,参考配置文件的元素的reqPermissions

cke_12162.png

2.2 目前申请权限如下

2.2.1 ohos.permission.READ_USER_STORAGE

2.2.2 ohos.permission.CAMERA

cke_15463.png

2.2.3 全部代码

 import ability_featureAbility from '@ohos.ability.featureAbility'

@Entry
@Component
struct MyFeatureAbilityPage {
  private myVerifyPermission() {
    var context = ability_featureAbility.getContext();
    let permission = "ohos.permission.CAMERA";
    context.verifyPermission(permission, null)
      .then((data) => {
        if(data===-1){
          console.log('当前没有权限 ' );
        }else{
          console.log('当前已具备权限 ' );
        }
      }).catch((error) => {
      console.log('Operation failed. Cause: ' + JSON.stringify(error));
    })
  }

  private MyRequestPermissionsFromUser() {

    var context = ability_featureAbility.getContext();
    let permissions = ["ohos.permission.CAMERA","ohos.permission.READ_USER_STORAGE"];
    let requestCode = 123
    context.requestPermissionsFromUser(permissions, requestCode)
      .then((data) => {
        console.log("请求码"+data.requestCode)
        console.log("请求权限"+data.permissions.toString())
        if(requestCode===data.requestCode){//用于判断返回的请求码和申请的请求是否相同
            for(var i=0;i<data.permissions.length;i++){
              if(data.authResults[i]==-1){
                console.log("请求权限:"+data.permissions[i]+"==>请求状态是拒绝")
              }else{
                console.log("请求权限:"+data.permissions[i]+"==>请求状态是同意")
              }
            }
        }

      }).catch((error) => {
      console.log('Operation failed. Cause: ' + JSON.stringify(error));
    })
  }

  private MyGetAppVersionInfo() {
    var context = ability_featureAbility.getContext();
    context.getAppVersionInfo()
      .then((data) => {
        console.log("getAppVersionInfo===>应用名称:"+data.appName)
        console.log("getAppVersionInfo===>versionCode:"+data.versionCode)
        console.log("getAppVersionInfo===>versionName:"+data.versionName)
      }).catch((error) => {
      console.log('Operation failed. Cause: ' + JSON.stringify(error));
    })
  }

  private myGetBundleName() {
    var context = ability_featureAbility.getContext();
    context.getBundleName()
      .then((data) => {
        console.log('getBundleName包名: ' + JSON.stringify(data));
      }).catch((error) => {
      console.log('Operation failed. Cause: ' + JSON.stringify(error));
    })
  }


  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Text('检查当前权限')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(this.myVerifyPermission.bind(this))

      Text('申请权限')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(this.MyRequestPermissionsFromUser.bind(this))
      .backgroundColor(Color.Red)

      Text('获取版本信息')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(this.MyGetAppVersionInfo.bind(this))

      Text('获取包名')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(this.myGetBundleName.bind(this))
      .backgroundColor(Color.Red)



    }
    .width('100%')
    .height('100%')
  }
}

3. 运行效果

%E4%B8%8A%E4%B8%8B%E6%96%87.gif

posted @ 2022-05-10 10:28  华为开发者论坛  阅读(422)  评论(0)    收藏  举报