You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native蓝牙模块构建失败:权限与Manifest命名空间问题

解决Expo React Native蓝牙模块的权限与清单文件错误

1. 先修复AndroidManifest.xml的命名空间错误

你当前的清单文件有两处关键错误:

  • <manifest>标签缺少Android命名空间声明,必须加上xmlns:android="http://schemas.android.com/apk/res/android"
  • <uses-permission>的属性应该是android:name,不是name——所有Android专属属性都需要带android:前缀

正确的清单文件开头结构如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <!-- 其他权限或配置写在这里 -->
</manifest>

2. 补全蓝牙所需的完整权限

Android 12+(API 31)对蓝牙权限做了拆分,仅添加BLUETOOTH_CONNECT不足以覆盖所有场景,需根据功能补全:

  • 若需要扫描蓝牙设备,添加BLUETOOTH_SCAN;如果涉及后台扫描,还要补充旧版本的定位权限:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
  • 兼容Android 11及以下版本,需添加传统蓝牙权限:
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
  • 可选:添加蓝牙功能声明,帮助应用在应用商店正确分类:
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />

3. 代码层面需动态请求权限

清单声明只是静态配置,Android 12+必须在运行时让用户主动授予权限,才能调用蓝牙相关功能。在你的模块代码中添加权限检查逻辑:

private val REQUEST_BLUETOOTH_PERMISSIONS = 1001

// 调用蓝牙启用意图前先检查权限
fun checkBluetoothPermissions() {
    val requiredPermissions = arrayOf(
        Manifest.permission.BLUETOOTH_CONNECT,
        Manifest.permission.BLUETOOTH_SCAN
    )
    val missingPermissions = requiredPermissions.filter {
        ContextCompat.checkSelfPermission(AppActivity!!, it) != PackageManager.PERMISSION_GRANTED
    }
    if (missingPermissions.isNotEmpty()) {
        ActivityCompat.requestPermissions(AppActivity!!, missingPermissions.toTypedArray(), REQUEST_BLUETOOTH_PERMISSIONS)
    } else {
        // 权限已授予,启动蓝牙启用意图
        val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
        AppActivity?.startActivityForResult(enableBtIntent, ACTION_REQUEST_ENABLE)
    }
}
  • 只有用户同意权限后,再执行启动蓝牙的代码,才能避免最初的权限缺失错误。

内容的提问来源于stack exchange,提问作者CodeNebulaWizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:37:48