HarmonyOS 鸿蒙Next中应用怎么设置隐私权限

HarmonyOS 鸿蒙Next中应用怎么设置隐私权限 请问三方应用可以像安卓一样不用跳转到设置里面设置存储权限、相机权限、电话权限吗

6 回复

【解决方案】

开发者您好,应用中向用户申请权限可以使用requestPermissionsFromUser申请,此时有以下两种情况:

  • 如果用户未申请过权限,会弹出权限申请提示框,用户可以选择允许或拒绝授权权限,关闭权限弹框。
  • 如果用户已经申请过权限,之前可能接受或拒绝,不会弹出权限申请提示框,此时需要跳转到系统设置-应用权限设置页。

参考以下代码:

以相机权限为例,在配置文件module.json5中声明ohos.permission.CAMERA权限后:

import { abilityAccessCtrl, common, PermissionRequestResult, Permissions, Want } from '@kit.AbilityKit';
import { bundleManager } from '@kit.AbilityKit';

@Entry
@Component
struct PermissionManager {
  PERMISSION_LIST: Permissions[] = ["ohos.permission.CAMERA"];

  requestPermission(permissionList: Array<Permissions>) {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
    atManager.requestPermissionsFromUser(context, permissionList).then((data: PermissionRequestResult) => {
      // dialogShowResults数组长度根据申请权限的数量判断,以下以单个权限申请为例
      if (data.dialogShownResults && data.dialogShownResults[0]) { // 用户首次申请,弹框
        let grantStatus: Array<number> = data.authResults;
        if (grantStatus[0] === 0) {
          // 用户授权,可以继续访问目标操作
        } else {
          // 用户拒绝授权,提示用户涉及该权限的功能无法继续使用
          return;
        }
      } else if (data.dialogShownResults && !data.dialogShownResults[0]) {
        // 非首次申请,跳转到系统设置页进行关闭或打开权限的操作
        bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT, (err, bundleInfo) => {
          if (err) {
            console.error(`Failed to getBundleInfoForSelf. Code: ${err.code}, message: ${err.message}`);
            return;
          }
          let want: Want = {
            bundleName: 'com.huawei.hmos.settings',
            abilityName: 'com.huawei.hmos.settings.MainAbility',
            uri: 'application_info_entry',
            // 传递你的应用的包名作为参数
            parameters: {
              pushParams: bundleInfo.name ?? ''
            }
          };
          context.startAbility(want)
            .then(() => {
              console.info('Success to startAbility');
            })
            .catch((err: BusinessError<Error>) => {
              console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`);
            });
        });
      }
    }).catch((err: BusinessError<Error>) => {
      console.error(`data: ${err}`);
    });
  }

  build() {
    Column() {
      Button('requestPermission')
        .onClick(() => {
          this.requestPermission(this.PERMISSION_LIST);
        })
    }
      .alignItems(HorizontalAlign.Center)
      .justifyContent(FlexAlign.Center)
      .width('100%')
      .height('100%')
  }
}

【背景知识】

更多关于HarmonyOS 鸿蒙Next中应用怎么设置隐私权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


首次请求权限的时候就是一个弹框,但是如果用户选择了拒绝授权,那要想再次授权就只能去系统设置里了!

/**
 * 打开应用详情页(包含权限管理入口)
 */
openAppSettings() {
  let context = getContext(this) as common.UIAbilityContext;
  
  let want: Want = {
    bundleName: 'com.huawei.hmos.settings',
    abilityName: 'com.huawei.hmos.settings.MainAbility',
    uri: 'application_info_entry',  // 应用详情页URI
    parameters: {
      pushParams: context.abilityInfo.bundleName  // 直接传包名字符串
    }
  };

  context.startAbility(want)
    .then(() => {
      console.info('跳转应用详情页成功');
    })
    .catch((err: BusinessError) => {
      console.error(`跳转失败: ${err.code}-${err.message}`);
    });
}

试试这个行不行

在HarmonyOS Next中,应用隐私权限通过module.json5配置文件中的requestPermissions字段声明。权限类型包括ohos.permission.INTERNET(网络访问)等。应用运行时,系统会基于此配置自动向用户请求授权。权限管理入口位于系统设置的应用详情页内,用户可在此查看和修改权限状态。

在HarmonyOS Next中,三方应用的隐私权限管理机制与安卓有显著区别,其设计更强调系统级的安全管控和用户透明。

核心机制:权限动态申请与系统设置中心统一管理

  1. 运行时动态申请:应用在需要访问敏感权限(如相机、麦克风、位置、电话、存储等)时,必须通过系统提供的API动态向用户弹窗申请。用户可以在弹窗中即时选择“允许”或“拒绝”。这是应用获取权限的主要途径,无需离开当前应用。

  2. 设置中心统一管控:所有已安装应用的最终权限授予状态,由系统**“设置”应用中的“隐私”或“应用管理”** 模块进行集中、统一的查看和管理。用户可以在此随时修改任何应用的权限。这意味着,如果用户最初拒绝了某项权限,后续需要开启时,通常需要进入系统设置中心进行授权,应用本身无法直接跳转到具体的权限设置页面。

针对您的问题:

  • “不用跳转到设置里面设置”:对于首次授权,应用可以通过弹窗直接完成,无需跳转设置。
  • 如果用户首次拒绝了权限,应用后续再次触发权限申请时,系统弹窗可能会提供“前往设置”的选项,引导用户进入系统设置中心进行修改。应用不能像安卓某些版本或定制系统那样,直接以编程方式跳转到自身详细的权限设置页。权限的最终管理入口统一归口于系统设置。

开发者注意事项:

  • 应用必须在module.json5配置文件中明确声明需要申请的权限。
  • 权限申请必须遵循“最小必要”原则,并在上下文中清晰说明用途。
  • 系统对权限授予状态有严格管理,应用应妥善处理用户拒绝或“仅在使用中允许”等场景。

总结:HarmonyOS Next通过“运行时动态弹窗申请” + “设置中心统一管理”的模式,在保障用户体验流畅性的同时,强化了系统对隐私权限的管控能力。三方应用需遵循此规范进行开发。

回到顶部