uni-app 安卓13使用nativejs搜不到蓝牙

uni-app 安卓13使用nativejs搜不到蓝牙

项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 13.4.1
HBuilderX类型 正式
HBuilderX版本号 3.99
手机系统 Android
手机系统版本号 Android 13
手机厂商 OPPO
手机机型 oppo
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

  • 搜索蓝牙

预期结果:

  • 搜索出周围蓝牙

实际结果:

  • 搜不出来蓝牙

bug描述:

安卓13使用nativejs搜索蓝牙 搜不出来蓝牙


更多关于uni-app 安卓13使用nativejs搜不到蓝牙的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 安卓13使用nativejs搜不到蓝牙的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中使用 Native.js 进行蓝牙搜索时,如果遇到在 Android 13 上无法搜索到蓝牙设备的问题,可能是由于以下几个原因导致的。你可以根据以下步骤进行排查和解决:

1. 权限问题

  • Android 13 引入了新的蓝牙权限:在 Android 13 及以上版本,应用需要明确请求以下权限才能进行蓝牙扫描:
    • BLUETOOTH_SCAN
    • BLUETOOTH_CONNECT
    • ACCESS_FINE_LOCATION(如果需要获取位置信息)
  • 解决方案:确保在 AndroidManifest.xml 中添加以下权限:
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
  • 动态权限申请:在代码中动态申请这些权限,确保用户已经授权。

2. 运行时权限申请

  • Android 13 需要动态申请权限:即使你在 AndroidManifest.xml 中声明了权限,仍然需要在运行时动态申请。
  • 解决方案:使用 uni-appuni.requestPermissions 方法动态申请权限:
    uni.requestPermissions({
        permissions: ['android.permission.BLUETOOTH_SCAN', 'android.permission.BLUETOOTH_CONNECT', 'android.permission.ACCESS_FINE_LOCATION'],
        success: function(res) {
            console.log('权限申请成功', res);
        },
        fail: function(err) {
            console.log('权限申请失败', err);
        }
    });
    

3. 蓝牙适配器未启用

  • 蓝牙未启用:确保设备的蓝牙已经开启。
  • 解决方案:在搜索蓝牙设备之前,检查并启用蓝牙:
    const bluetoothAdapter = plus.android.importClass('android.bluetooth.BluetoothAdapter');
    const adapter = bluetoothAdapter.getDefaultAdapter();
    if (!adapter.isEnabled()) {
        adapter.enable();
    }
    

4. Native.js 代码问题

  • Native.js 代码可能存在问题:确保你的 Native.js 代码正确调用了 Android 的蓝牙 API。
  • 解决方案:检查你的 Native.js 代码,确保正确调用了蓝牙扫描相关的 API。以下是一个简单的示例:
    const bluetoothAdapter = plus.android.importClass('android.bluetooth.BluetoothAdapter');
    const adapter = bluetoothAdapter.getDefaultAdapter();
    const bluetoothLeScanner = adapter.getBluetoothLeScanner();
    
    const scanCallback = plus.android.implements('android.bluetooth.le.ScanCallback', {
        onScanResult: function(callbackType, result) {
            console.log('扫描到设备:', result.getDevice().getName());
        }
    });
    
    bluetoothLeScanner.startScan(scanCallback);
回到顶部