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
【解决方案】
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开发星闪应用时,扫描失败可能由以下原因导致:
- 未在module.json5中配置"ohos.permission.USE_BLUETOOTH"权限;
- 设备硬件不支持星闪功能;
- 星闪服务未正确初始化;
- 扫描参数配置错误;
- 系统星闪开关处于关闭状态。
请检查权限声明、设备兼容性及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或相应生命周期中调用权限请求。权限授予后,星闪扫描功能即可正常使用。

