有没有HarmonyOS鸿蒙Next工程师大佬路过,我拿到了权限,但是我应该是需要图上所显示的,请问他们如何关联上?

有没有HarmonyOS鸿蒙Next工程师大佬路过,我拿到了权限,但是我应该是需要图上所显示的,请问他们如何关联上?

仅获取并打印需要用户手动授权的权限

async getAndLogManualPermissions(): Promise<PermissionState[]> {
  try {
    const bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION;
    const data = await bundleManager.getBundleInfoForSelf(bundleFlags);

    if (!data || !data.reqPermissionDetails || !data.permissionGrantStates) {
      LOG.warn(LOG_TAG, "未获取到权限信息");
      return [];
    }

    const permissions = data.reqPermissionDetails;
    const states = data.permissionGrantStates;

    if (permissions.length !== states.length) {
      LOG.error(LOG_TAG, "权限名称与状态数组长度不一致");
      return [];
    }

    // 1. 先转换所有权限
    const allPermissionStates: PermissionState[] = [];
    for (let i = 0; i < permissions.length; i++) {
      const state: PermissionState = {
        name: permissions[i].name,
        granted: states[i] === 0
      };
      allPermissionStates.push(state);
    }

    // 2. 过滤出需要手动授权的权限
    const manualPermissions = allPermissionStates.filter(
      perm => MANUAL_AUTHORIZATION_PERMISSIONS.includes(perm.name)
    );

    // 3. 仅打印手动授权权限
    LOG.info(LOG_TAG, "===== 需要手动授权的权限状态 =====");
    manualPermissions.forEach(permission => {
      LOG.info(LOG_TAG, `${permission.name}: ${permission.granted ? '已授予' : '未授予'}`);
    });
    LOG.info(LOG_TAG, "==================================");

    return manualPermissions;

  } catch (error) {
    LOG.error(LOG_TAG, "获取手动授权权限失败:", error);
    return [];
  }
}

这是打印的内容

权限字符串 中文名称 授权状态
ohos.permission.ACCESS_BLUETOOTH 访问蓝牙权限 未授予
ohos.permission.APPROXIMATELY_LOCATION 大致位置权限 未授予
ohos.permission.APP_TRACKING_CONSENT 应用跟踪许可权限 未授予
ohos.permission.DISCOVER_BLUETOOTH 发现蓝牙权限 已授予
ohos.permission.KEEP_BACKGROUND_RUNNING 后台运行权限 已授予
ohos.permission.LOCATION 精确位置权限 未授予
ohos.permission.MEDIA_LOCATION 媒体位置信息权限 未授予
ohos.permission.READ_MEDIA 读取媒体文件权限 未授予
ohos.permission.USE_BLUETOOTH 使用蓝牙权限 已授予
ohos.permission.WRITE_MEDIA 写入媒体文件权限 未授予

如图所示 怎么拿到图上的两个权限


更多关于有没有HarmonyOS鸿蒙Next工程师大佬路过,我拿到了权限,但是我应该是需要图上所显示的,请问他们如何关联上?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

【背景知识】

为了尽可能减少系统弹出的权限弹窗数量,优化交互体验,系统将逻辑紧密相关的user_grant权限组合在一起,形成多个权限组。当应用请求权限时,同一个权限组的权限将会在一个弹窗内一起请求用户授权。权限组中的某个权限,称之为该权限组的子权限。详细信息请参考文档:权限组和子权限

【解决方案】

截图中的权限在应用权限组列表中,可以直接申请一个权限组,其中包括《跨应用关联》、《设备发现与连接》。

应用需要访问用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,应该向用户请求授权,这部分权限是user_grant权限。具体的步骤参考文档:向用户申请授权

更多关于有没有HarmonyOS鸿蒙Next工程师大佬路过,我拿到了权限,但是我应该是需要图上所显示的,请问他们如何关联上?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


项目名称

  • 项目状态: 已完成
  • 项目周期: 2023.01 - 2023.06
  • 项目描述: 该项目旨在提高公司的生产效率,通过引入自动化设备和技术来减少人工操作。
  • 技术栈: Python, C++, HTML, CSS, JavaScript

团队成员

  • 张三
  • 李四
  • 王五

项目亮点

  • 自动化设备集成
  • 生产流程优化
  • 数据分析与可视化

在HarmonyOS Next中,权限与功能关联通过Ability框架实现。确保在config.json中声明所需权限,并在对应Ability的onRequestPermissionsResult回调中处理授权结果。权限与API调用直接绑定,系统会自动检查。若权限未授权,相关API调用将失败。具体权限与功能对应关系需查阅官方文档中"权限与功能映射表"。

从代码和截图来看,您需要关联的是权限请求和实际功能使用。在HarmonyOS Next中,获取权限需要以下步骤:

  1. 首先确保在config.json中声明了需要的权限,例如:
"reqPermissions": [
  {
    "name": "ohos.permission.ACCESS_BLUETOOTH",
    "reason": "需要蓝牙功能",
    "usedScene": {
      "ability": ["YourAbility"],
      "when": "always"
    }
  }
]
  1. 在代码中动态请求权限:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

async function requestPermission(permission: string): Promise<boolean> {
  let atManager = abilityAccessCtrl.createAtManager();
  try {
    let result = await atManager.requestPermissionsFromUser(
      getContext(this), 
      [permission]
    );
    return result.authResults[0] === 0;
  } catch (err) {
    console.error(`请求权限失败: ${err}`);
    return false;
  }
}
  1. 对于您截图中的两个权限(ohos.permission.ACCESS_BLUETOOTHohos.permission.LOCATION),可以这样调用:
const btGranted = await requestPermission("ohos.permission.ACCESS_BLUETOOTH");
const locGranted = await requestPermission("ohos.permission.LOCATION");

注意:系统会弹出授权对话框让用户选择,您需要处理用户拒绝授权的情况。

回到顶部