HarmonyOS鸿蒙Next应用开发之权限获取及一些问题

HarmonyOS鸿蒙Next应用开发之权限获取及一些问题 权限概念

默认情况下,应用只能访问有限的资源,有些敏感的资源是不能访问的,比如摄像头,麦克风等权限,但是有些应用需要用到麦克风、摄像头的能力来达到某些功能,比如微信需要摄像头权限来进行扫一扫操作,这个时候微信就需要向用户去申请使用摄像头权限。

简而言之,权限就是为了防止用户的某些个人隐私或设备能力被应用滥用的一种保护措施。

权限的保护对象分为数据和功能

数据包含个人数据,比如照片、通讯录等,还有设备数据,调用摄像头拍张照片,或者调用麦克风录下一段录音,这都数据数据保护,

功能则包含了设备功能,比如打电话、发短信、联网等,还有应用的功能,比如说应用能不能创建桌面快捷方式,能不能使用悬浮窗的能力,等等。

权限的分类

权限,按开放等级可以分为三级

  • normal 普通
  • system_basic 系统基础权限
  • system_core 系统核心权限

按授权方式可以分为两种

  • system_grant 系统授权,如果应用声明需要使用系统授权的能力,那么不需要经过用户授权即可使用,也就是你声明了就可以用,但是用户也可以手动关掉这个权限
  • user_grant 用户授权,此类权限需要用户主动授权

附:应用权限列表

权限的使用

声明所需权限

配置文件中声明当前应用所需的权限,重点是requestPermissions部分的内容

获取授权

如果是系统授权类的权限,声明后就可以直接使用,如果是用户授权类的权限,则需要在应用启动时向用户获取授权。

具体方法是:

  • 在当前Ability的启动文件中导入
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
  • 在当前Ability的onWindowStageCreate生命周期函数中拉起授权弹窗:
var context = this.context
var AtManager = abilityAccessCtrl.createAtManager();

//此弹窗只会拉起一次,无论用户是否授权,都不会再弹出第二次,并且会继续执行,所以有点不太合适

AtManager.requestPermissionsFromUser(context, ["ohos.permission.xxxxxx"]).then((data) => {
//获取权限成功
}).catch((err) => {
//获取权限失败
})

用户可以进行的操作有三个

  • 仅使用期间允许
  • 允许本次使用
  • 禁止使用

返回的数据里有两个

  • permissions 权限列表
  • authResults:授权状态 -1为未授权,0是授权

目前问题

如果在授权时,用户点击禁止使用,则应用不能获取到相对应的权限,那么应用此时应该退出。

但是退出逻辑如果写在这里,那么如果第一次用户没有授权,第二次打开应用时,应用会直接闪退


更多关于HarmonyOS鸿蒙Next应用开发之权限获取及一些问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者你好,根据所述,这个问题并不属于技术问题,应该是业务逻辑设计的问题。有如下建议可供参考:应用启动时,可以使用@ohos.abilityAccessCtrl模块下的函数verifyAccessToken来校验应用是否已取得相应的授权,并根据结果来进行相应业务处理。如无授权,则可进行授权申请。具体使用参考如下文档:

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-abilityAccessCtrl.md/#checkaccesstoken9

更多关于HarmonyOS鸿蒙Next应用开发之权限获取及一些问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next应用开发中,权限获取是实现应用功能的关键环节。鸿蒙系统提供了丰富的权限管理机制,开发者需要通过声明和请求权限来确保应用能够访问特定的系统资源或用户数据。

  1. 权限声明:在应用的config.json文件中,开发者需要明确声明应用所需的权限。例如,访问网络、读写存储、获取位置信息等权限都需要在此文件中进行声明。未声明的权限将无法在应用中使用。

  2. 动态权限请求:对于敏感权限(如位置、相机、麦克风等),鸿蒙系统要求应用在运行时动态向用户请求权限。开发者需要使用AbilityContextrequestPermissionsFromUser方法来发起权限请求,并处理用户的授权结果。

  3. 权限检查:在应用运行过程中,开发者可以通过AbilityContextverifySelfPermission方法来检查应用是否已经获取了某项权限。如果权限未授予,应用需要根据业务逻辑进行处理,例如提示用户授权或限制相关功能的使用。

  4. 权限回调:当用户对权限请求做出响应时,系统会回调onRequestPermissionsFromUserResult方法。开发者需要在此方法中处理用户的授权结果,并根据结果调整应用的行为。

  5. 权限问题排查:在开发过程中,可能会遇到权限无法获取或不符合预期的情况。开发者可以通过查看系统日志、检查权限声明和请求代码、以及确保应用配置正确来排查问题。

鸿蒙系统的权限管理机制旨在保护用户隐私和安全,开发者应遵循最佳实践,合理请求和使用权限,确保应用功能的正常运行。

在HarmonyOS鸿蒙Next应用开发中,权限获取是关键步骤。首先,在config.json中声明所需权限,如ohos.permission.INTERNET。然后,在代码中使用requestPermissionsFromUser方法动态请求权限。注意,权限请求需在用户交互场景下进行,避免应用启动时直接请求。此外,权限使用需遵循最小化原则,仅申请必要权限,确保用户隐私安全。开发过程中,还需关注权限回调处理,确保应用在权限被拒绝时仍能正常运行。

回到顶部