溜鲸鱼的猫
溜鲸鱼的猫
  • 发布:2025-03-07 10:36
  • 更新:2025-03-11 16:41
  • 阅读:164

uniapp基于native.js扫描ble蓝牙设备

分类:uni-app
我的代码是这样的  BLE扫描已启动 是正确log 了 扫描结束也正确log了 该有的权限也加了 就是扫描回调不触发 有哪位大佬可以帮忙看一下吗 ble_scan1() {  
            const main = plus.android.runtimeMainActivity();  
            const Context = plus.android.importClass('android.content.Context');  
            const PackageManager = plus.android.importClass('android.content.pm.PackageManager');  
            var Build = plus.android.importClass("android.os.Build");  

            // 1. 检查BLE支持  
            if (!main.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {  
                console.log("设备不支持BLE");  
                return;  
            }  

            // 2. 动态权限检查  
            const Permission = plus.android.importClass('android.Manifest$permission');  
            if (plus.android.invoke(main, 'checkSelfPermission', Permission.ACCESS_FINE_LOCATION)   
                != PackageManager.PERMISSION_GRANTED) {  

                plus.android.invoke(main, 'requestPermissions',   
                    [Permission.ACCESS_FINE_LOCATION], 1001);  
                return;  
            }  

            // 3. 获取BluetoothLeScanner  
            const BluetoothAdapter = plus.android.importClass('android.bluetooth.BluetoothAdapter');  
            const adapter = BluetoothAdapter.getDefaultAdapter();  
            if (!adapter || !adapter.isEnabled()) {  
                console.log("蓝牙未开启");  
                return;  
            }  

            const bleScanner = adapter.getBluetoothLeScanner();  
            if (!bleScanner) {  
                console.log("无法获取BLE扫描器");  
                return;  
            }  

            // 4. 配置扫描参数  
            const ScanSettings = plus.android.importClass('android.bluetooth.le.ScanSettings');  
            const builder = plus.android.newObject('android.bluetooth.le.ScanSettings$Builder');  
            plus.android.invoke(builder, 'setScanMode', ScanSettings.SCAN_MODE_LOW_LATENCY);  

            // Android 5.0+ 必要设置  
            if (Build.VERSION.SDK_INT >= 23) {  
                plus.android.invoke(builder, 'setCallbackType', ScanSettings.CALLBACK_TYPE_ALL_MATCHES);  
                plus.android.invoke(builder, 'setMatchMode', ScanSettings.MATCH_MODE_AGGRESSIVE);  
            }  

            const settings = plus.android.invoke(builder, 'build');  

            // 5. 定义回调  
            const scanCallback = {  
                onScanResult: function(callbackType, result) {  
                    const device = result.getDevice();  
                    console.log(`发现设备:${device.getName()} | RSSI:${result.getRssi()}`);  
                },  
                onScanFailed: function(errorCode) {  
                    console.log(`扫描失败,错误码:${errorCode}`);  
                }  
            };  
            const NativeScanCallback = plus.android.implements('android.bluetooth.le.ScanCallback', scanCallback);  

            // 6. 开始扫描   
            try {  
                plus.android.invoke(bleScanner, 'startScan', null, settings, NativeScanCallback);  
                console.log("BLE扫描已启动");  

                setTimeout(() => {  
                    plus.android.invoke(bleScanner, 'stopScan', NativeScanCallback);  
                    console.log("BLE扫描已停止");  
                }, 10000);  
            } catch(e) {  
                console.log("扫描异常:" + e);  
            }  
        },                     "<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",  
                "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>",  
                "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",  
                "<uses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\"/>",  
                    "<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\"/>",  
                    "<uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\"/>"
2025-03-07 10:36 负责人:无 分享
已邀请:
DCloud_App_Array

DCloud_App_Array

建议使用uni原生插件或uts插件开发调用原生能力。

要回复问题请先登录注册