• 【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示例:

    1. import ability_featureAbility from '@ohos.ability.featureAbility'
    2. var context = ability_featureAbility.getContext();
    3. let permission = "ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS";
    4. context.verifyPermission(permission,(error, data)=>{
    5. if (error) {
    6. console.error('Operation failed. Cause: ' + JSON.stringify(error));
    7. return;
    8. }
    9. console.info('Operation successful. Data:' + JSON.stringify(data))
    10. })

    1.3 context.requestPermissionsFromUser
    requestPermissionsFromUser(permissions: Array, requestCode: number): Promise
    向用户请求某些权限,在申请权限之前查询自身进程是否已被授予该权限(verifyPermission),如果已有权限,则无需申请,否则需要申请权限。使用Promise方式作为异步方法。
    1.3.1参数详解
    参数一:permissions:请求授予的权限
    参二:requestCode :请求状态码 与匹配应用程序对应的特定请求代码,取值范围:大于等于0
    1.3.2返回值:Promise:回调函数,可以在回调函数中处理接口返回值,返回权限请求结果
    1.3.3PermissionRequestResult属性详解
    requestCode:得到返回的请求码,主要作用用于判断是哪个请求的权限的作用
    permissions:请求权限集合
    authResults:权限验证结果,返回-1表示不具备当前检查权限,0表示有权限
    1.3.4示例

    1. import ability_featureAbility from '@ohos.ability.featureAbility'
    2. var context = ability_featureAbility.getContext();
    3. let permissions = ["ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS","ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS_EXTENSION"];
    4. let requestCode = 123
    5. context.requestPermissionsFromUser(permissions, requestCode)
    6. .then((data) => {
    7. console.info('Operation successful. Data: ' + JSON.stringify(data));
    8. }).catch((error) => {
    9. console.error('Operation failed. Cause: ' + JSON.stringify(error));
    10. })

    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 示例代码

    1. import ability_featureAbility from '@ohos.ability.featureAbility'
    2. var context = ability_featureAbility.getContext();
    3. context.getAppVersionInfo()
    4. .then((data) => {
    5. console.info('Operation successful. Data: ' + JSON.stringify(data));
    6. }).catch((error) => {
    7. console.error('Operation failed. Cause: ' + JSON.stringify(error));
    8. })

    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 全部代码

    1. import ability_featureAbility from '@ohos.ability.featureAbility'
    2. @Entry
    3. @Component
    4. struct MyFeatureAbilityPage {
    5. private myVerifyPermission() {
    6. var context = ability_featureAbility.getContext();
    7. let permission = "ohos.permission.CAMERA";
    8. context.verifyPermission(permission, null)
    9. .then((data) => {
    10. if(data===-1){
    11. console.log('当前没有权限 ' );
    12. }else{
    13. console.log('当前已具备权限 ' );
    14. }
    15. }).catch((error) => {
    16. console.log('Operation failed. Cause: ' + JSON.stringify(error));
    17. })
    18. }
    19. private MyRequestPermissionsFromUser() {
    20. var context = ability_featureAbility.getContext();
    21. let permissions = ["ohos.permission.CAMERA","ohos.permission.READ_USER_STORAGE"];
    22. let requestCode = 123
    23. context.requestPermissionsFromUser(permissions, requestCode)
    24. .then((data) => {
    25. console.log("请求码"+data.requestCode)
    26. console.log("请求权限"+data.permissions.toString())
    27. if(requestCode===data.requestCode){//用于判断返回的请求码和申请的请求是否相同
    28. for(var i=0;ipermissions.length;i++){
    29. if(data.authResults[i]==-1){
    30. console.log("请求权限:"+data.permissions[i]+"==>请求状态是拒绝")
    31. }else{
    32. console.log("请求权限:"+data.permissions[i]+"==>请求状态是同意")
    33. }
    34. }
    35. }
    36. }).catch((error) => {
    37. console.log('Operation failed. Cause: ' + JSON.stringify(error));
    38. })
    39. }
    40. private MyGetAppVersionInfo() {
    41. var context = ability_featureAbility.getContext();
    42. context.getAppVersionInfo()
    43. .then((data) => {
    44. console.log("getAppVersionInfo===>应用名称:"+data.appName)
    45. console.log("getAppVersionInfo===>versionCode:"+data.versionCode)
    46. console.log("getAppVersionInfo===>versionName:"+data.versionName)
    47. }).catch((error) => {
    48. console.log('Operation failed. Cause: ' + JSON.stringify(error));
    49. })
    50. }
    51. private myGetBundleName() {
    52. var context = ability_featureAbility.getContext();
    53. context.getBundleName()
    54. .then((data) => {
    55. console.log('getBundleName包名: ' + JSON.stringify(data));
    56. }).catch((error) => {
    57. console.log('Operation failed. Cause: ' + JSON.stringify(error));
    58. })
    59. }
    60. build() {
    61. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
    62. Text('检查当前权限')
    63. .fontSize(50)
    64. .fontWeight(FontWeight.Bold)
    65. .onClick(this.myVerifyPermission.bind(this))
    66. Text('申请权限')
    67. .fontSize(50)
    68. .fontWeight(FontWeight.Bold)
    69. .onClick(this.MyRequestPermissionsFromUser.bind(this))
    70. .backgroundColor(Color.Red)
    71. Text('获取版本信息')
    72. .fontSize(50)
    73. .fontWeight(FontWeight.Bold)
    74. .onClick(this.MyGetAppVersionInfo.bind(this))
    75. Text('获取包名')
    76. .fontSize(50)
    77. .fontWeight(FontWeight.Bold)
    78. .onClick(this.myGetBundleName.bind(this))
    79. .backgroundColor(Color.Red)
    80. }
    81. .width('100%')
    82. .height('100%')
    83. }
    84. }

    3. 运行效果

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

    欲了解更多更全技术文章,欢迎访问:https://developer.huawei.com/consumer/cn/forum/topic/0204809977852700206?fid=18?ha_source=zzh

     

  • 相关阅读:
    02c++呵呵老师【官方案例FloatingActor】
    6数据层相关框架-基本
    jQuery相关知识
    4405. 统计子矩阵
    使用LVGL:我喜欢的几个界面
    Flume数据源与数据接收端的了解
    Redis基础运维及问题排查
    laravel项目通过中间件推送接口调用信息到TransferStatistics项目
    elasticsearch 7.7.0 单节点配置x-pack
    【AGC】更新应用信息报未知错误解决方法
  • 原文地址:https://blog.csdn.net/weixin_44708240/article/details/126124986