var bArray = [];
function scanBluetoothDevice(callback){
//获取android应用Activity对象
var main = plus.android.runtimeMainActivity();
//过滤器
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
//蓝牙设备
var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");
//蓝牙适配器
var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
var filter = new IntentFilter();
var BDevice = new BluetoothDevice();
//蓝牙本地适配器
var BAdapter = BluetoothAdapter.getDefaultAdapter();
// 判断是否开启蓝牙
if(!BAdapter.isEnabled()) {
BAdapter.enable(); //启动蓝牙
}
BAdapter.startDiscovery(); //开启搜索
var receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: function(context, intent) { //回调
try {
plus.android.importClass(intent); //通过intent实例引入intent类
if(intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") {
main.unregisterReceiver(receiver); //取消监听
} else {
//从Intent中获取设备对象
BDevice= intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(BDevice == null) {
main.unregisterReceiver(receiver); //取消监听
return;
}
var name=BDevice.getAddress()+BDevice.getName();
if(bArray.indexOf(name) == -1){ //去重
bArray.push(name);
callback({
"name": BDevice.getName(),
"SN": BDevice.getAddress()
});
}
}
} catch(e) {
console.error(e);
}
}
});
//main.unregisterReceiver(receiver); //取消监听,这一步可以不需要
filter.addAction(BDevice.ACTION_FOUND);
filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BAdapter.ACTION_STATE_CHANGED);
main.registerReceiver(receiver, filter); //注册监听
}
1***@qq.com (作者)
在项目开发时, 用的蓝牙模块,
但是遇到了些问题, 就该用这个方法了.
目前APP的用户也有一定的量, 这个方法也没出问题, 所以就一直沿用.
2020-12-22 16:14
DCloud_Android_ST
回复 DCloud_Android_ST: 建议使用uniapp的蓝牙模块
2020-12-22 16:38
1***@qq.com (作者)
回复 DCloud_Android_ST: 之前版本都正常的,现在版本有问题, 说明你们这次的升级不兼容之前的, 这只是发现的, 还有未发现的呢, 这个bug你要不要看一下啊
2020-12-22 17:42
DCloud_Android_ST
回复 1***@qq.com: 嗯 已确认
2020-12-22 17:59