我的代码是这样的 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
- 更新:2025-03-11 16:41
- 阅读:164
1 个回复
DCloud_App_Array
建议使用uni原生插件或uts插件开发调用原生能力。