3***@qq.com
3***@qq.com
  • 发布:2026-03-27 11:18
  • 更新:2026-03-27 11:20
  • 阅读:13

uniapp打包app会自动打开附近的设备权限 且无法监听到呢

分类:uni-app

大佬们问一下 ,为什么我打包的uniapp app 会自动开启附近的设备权限 是在安卓12+版本的安卓手机上面 HB的版本是5.05
我的manifest.json是这样的
"modules" : {
"Bluetooth" : {},
"Maps" : {
"provider" : "amap"
}
},
"permissions" : [
// 基础网络权限
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
// 蓝牙权限(Android 12+)
"<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\" android:usesPermissionFlags=\"neverForLocation\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\"/>",
// 位置权限(Android 11及以下蓝牙扫描需要)
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
// 保持设备唤醒(蓝牙连接稳定性需要)
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
// 相机权限
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
// 相机硬件特性
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",

]
我这么声明的话 打包报错BLUETOOTH_SCAN被重复声明 不声明的情况使用Bluetooth模块自动导入的情况下如何区分是安卓11- 和 安卓12+呢
下面这是我请求的方法
isNearbyDevicesPermissionGranted() {
const permissions = [
"android.permission.BLUETOOTH_SCAN",
"android.permission.BLUETOOTH_CONNECT"
];

            plus.android.requestPermissions(permissions, (e) => {  
                if (e.deniedAlways.length > 0) {  
                    console.log('永久拒绝');  
                } else if (e.deniedPresent.length > 0) {  
                    console.log('临时拒绝');  
                } else {  
                    console.log('同意');  
                }  
                console.log('e', e);  
            });  
        },  

我进入的时候弹出是否允许附近的设备 我点击禁止且不再询问的时候
{
"granted": [
"android.permission.BLUETOOTH_SCAN",
"android.permission.BLUETOOTH_CONNECT"
],
"deniedPresent": [],
"deniedAlways": []
}给我打印的是这样的 为什么呢 我拒绝了不应该在deniedAlways里面吗 为什么不会刷新呢 无论是拒绝 还是允许 都是在granted里面 我如何判断用户是开启了还是拒绝了呢

2026-03-27 11:18 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

关于您遇到的问题,我将基于知识库内容为您解答:

1. 自动开启附近设备权限的原因

manifest.json 中配置 "Bluetooth": {} 模块后,uniapp 会根据 targetSdkVersion 自动注入对应的蓝牙权限。当 targetSdkVersion >= 31(Android 12+)时,系统会自动引入 BLUETOOTH_SCANBLUETOOTH_CONNECT 等附近设备权限,这是 Android 12 引入的新权限模型导致的。

2. 解决 BLUETOOTH_SCAN 重复声明问题

不要permissions 数组中手动添加 BLUETOOTH_SCANBLUETOOTH_CONNECT 权限。配置 Bluetooth 模块后,打包时会自动根据 targetSdkVersion 注入正确的权限:

  • Android 12+ (targetSdkVersion >= 31):自动注入 BLUETOOTH_SCANBLUETOOTH_CONNECT
  • Android 11 及以下:自动注入 BLUETOOTHBLUETOOTH_ADMIN 和定位权限

如需手动控制,建议移除手动声明,仅保留模块配置。

3. 区分 Android 11- 和 Android 12+ 的方法

根据知识库信息,Android 和 iOS 平台不支持通过条件编译来区分。您需要通过 uni.getSystemInfo 获取系统版本进行判断:

const systemInfo = uni.getSystemInfoSync();  
const isAndroid12Plus = systemInfo.platform === 'android' &&   
  parseInt(systemInfo.system.split('.')[0]) >= 12;

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

根据版本动态请求不同权限:

  • Android 12+:请求 BLUETOOTH_SCANBLUETOOTH_CONNECT
  • Android 11-:请求 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION

4. 权限监听返回异常问题(拒绝后仍在 granted 中)

您遇到的 plus.android.requestPermissions 返回结果异常(拒绝后权限仍在 granted 数组中),这是该 API 的已知限制。建议使用 uni.getAppAuthorizeSetting() 作为权限状态的权威判断

根据知识库 getAppAuthorizeSetting 的说明:

const authSetting = uni.getAppAuthorizeSetting();  
console.log(authSetting.bluetoothAuthorized);   
// 返回状态说明:  
// 'authorized' - 已授权  
// 'denied' - 请求授权被拒绝,无法再次请求授权(需引导用户去设置页)  
// 'not determined' - 尚未请求授权(仅 iOS)  
// 'config error' - 未配置蓝牙模块(Android 不会返回)

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

推荐做法:在 plus.android.requestPermissions 回调后,立即使用 uni.getAppAuthorizeSetting() 验证实际授权状态,或直接使用插件市场的权限管理插件如 permission-handlerpermission-handler-plus(支持 Android 12+ 权限处理)。

5. manifest.json 正确配置示例

{  
  "app-android": {  
    "distribute": {  
      "modules": {  
        "Bluetooth": {}  
      },  
      "permissions": [  
        "<uses-permission android:name=\"android.permission.INTERNET\"/>",  
        "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>"  
      ]  
    }  
  }  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

注意:HBuilderX 4.71 及以上版本,权限配置应放在 app-android -> distribute -> permissions 节点下,而非旧的 app -> distribute -> android -> permissions 路径。

内容为 AI 生成,仅供参考

要回复问题请先登录注册