HarmonyOS鸿蒙NEXT上开发一个星闪app,开启星闪扫描失败

HarmonyOS鸿蒙NEXT上开发一个星闪app,开启星闪扫描失败

public nearlink_adv_scan_start(){
  let scanFilter1: scan.ScanFilters = {
    address:"11:22:33:44:AA:BB", // 期望扫描到的外围设备1的地址
    deviceName:"deviceName1" // 期望扫描到的外围设备1的名称
  };
  let scanOptions: scan.ScanOptions = {
    scanMode: scan.ScanMode.SCAN_MODE_BALANCED
  }
  try {
    scan.startScan([scanFilter1], scanOptions).then(() => {
      console.info("start scan success");
    }).catch ((err: BusinessError) => {
      console.error('errCode: ' + err.code + ', errMessage: ' + err.message);
    });
  } catch (err) {
    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
  }
  hilog.info(DOMAIN, TAG, '%{public}s', 'nearlink_adv_scan_start');
}

在调用上面的接口失败 ,显示没有权限,日志如下:

[CheckPermissionForNapi:564]enter

[CheckPermissionForNapi:973]enter

[StartScanWithFilter:292]nearlink napi assert failed,

errCode(201) errCode: 201, errMessage: Permission denied.

我在module.json5 里面添加了 ohos.permission.ACCESS_NEARLINK

{ 
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes":  ["phone","tablet"],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
    {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "$string:EntryAbility_desc",
          "icon": "$media:layered_image",
        "label": "$string:EntryAbility_label",
        "startWindowIcon" : "$media:startIcon",
        "startWindowBackground" : "$color:start_window_background"
          ,
        "exported": true
          ,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "ohos.want.action.home"
            ]
          }
        ]
      }],"extensionAbilities": [
      {
        "name": "EntryBackupAbility",
        "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets",
        "type": "backup",
        "exported": false,
        "metadata": [
          {
            "name": "ohos.extension.backup",
            "resource": "$profile:backup_config"
          }
        ],
      }
    ],
    "requestPermissions": [
      {
        "name": "ohos.permission.ACCESS_NEARLINK",
        "reason": "$string:permission_reason_nearlink",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse",
        },
      },
    ]
  }
}

更多关于HarmonyOS鸿蒙NEXT上开发一个星闪app,开启星闪扫描失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

【解决方案】

ohos.permission.ACCESS_NEARLINK允许应用接入星闪并使用星闪能力,例如配对、连接外围设备等。该权限需要用户授权(user_grant),具体的步骤参考文档:向用户申请授权

更多关于HarmonyOS鸿蒙NEXT上开发一个星闪app,开启星闪扫描失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


还想请问下,扫描到的是随机地址,如果是要想获取客户端的真实地址 ,我要怎么做? 怎么去添加ohos.permission.GET_NEARLINK_PEER_MAC 这个权限呢 ?我尝试用requestPermissionsFromUser 的方法 好像不太行。

您好,星闪当前出于安全考虑没有暴露真实地址,您可以具体描述下实际需要获取真实地址的业务诉求,您是在什么样的业务场景中使用该能力,交互流程是怎样的,在哪一个环节遇到了问题?方便提供一下其他开发平台的实现方案或者接口(优先官方文档的内容)吗?请您注意提供的内容不要包含您或第三方的非公开信息,如给您带来不便,敬请谅解。

在HarmonyOS NEXT开发星闪应用时,扫描失败可能由以下原因导致:

  1. 未在module.json5中配置"ohos.permission.USE_BLUETOOTH"权限;
  2. 设备硬件不支持星闪功能;
  3. 星闪服务未正确初始化;
  4. 扫描参数配置错误;
  5. 系统星闪开关处于关闭状态。

请检查权限声明、设备兼容性及API调用逻辑。

在HarmonyOS NEXT中,星闪(NearLink)权限需要动态申请。虽然已在module.json5中声明了ohos.permission.ACCESS_NEARLINK权限,但还需要在调用扫描前进行动态权限请求。

添加以下代码进行权限申请:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';

async function requestNearLinkPermission(): Promise<void> {
  let atManager = abilityAccessCtrl.createAtManager();
  try {
    await atManager.requestPermissionsFromUser(getContext(this), 
      ['ohos.permission.ACCESS_NEARLINK']);
    console.info('Permission granted');
  } catch (err) {
    console.error('Permission denied: ' + (err as BusinessError).message);
  }
}

// 在调用nearlink_adv_scan_start前先请求权限
await requestNearLinkPermission();

确保在Ability的onWindowStageCreate或相应生命周期中调用权限请求。权限授予后,星闪扫描功能即可正常使用。

回到顶部