1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android 蓝牙搜索代码 关于蓝牙设备搜索和Ble设备的搜索的简单调用方法

android 蓝牙搜索代码 关于蓝牙设备搜索和Ble设备的搜索的简单调用方法

时间:2021-11-20 10:27:09

相关推荐

android 蓝牙搜索代码 关于蓝牙设备搜索和Ble设备的搜索的简单调用方法

最近一段时间一直在调试蓝牙设备,论坛里面关于这方面资料的太少,特别是关于蓝牙4.0的案例,基本上没有,也只好摸石头过河了。目前的代码也就勉强能用,我希望在此抛砖引玉,大家一起来完善这一部分。

说明一下,蓝牙和蓝牙4.0调用的方法是不同的,我最开始没注意到这点,浪费了好多时间。

普通蓝牙搜索(安卓版)

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); //注册监听

}

蓝牙4.0这部分,在安卓系统5.0及以上版本,需要使用新的api,之前的api无法使用,所以需要判断当前系统,分别使用不同的api来实现。IOS部分目前没有实现。

Ble设备搜索

function Ble() {

switch(plus.os.name) {

case "Android":

bleAndroid();

break;

case "iOS":

bleIOS(); //暂未实现

break;

default:

// 其它平台

plus.nativeUI.alert("暂不支持该系统");

break;

}

}

function bleAndroid(){

var main = plus.android.runtimeMainActivity();

var Intent = plus.android.importClass("android.content.Intent");

//蓝牙适配器

var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");

var BAdapter = BluetoothAdapter.getDefaultAdapter();

var REQUEST_ENABLE_BT = 1;

// 判断是否开启蓝牙

if(!BAdapter.isEnabled()) {

var enableBtIntent = new Intent(BAdapter.ACTION_REQUEST_ENABLE);

main.startActivityForResult(enableBtIntent,REQUEST_ENABLE_BT);

return ;

}

//此判断当前android系统版本高于5.0

if(parseInt(plus.os.version) >= 5) {

bleAndroid5(BAdapter); //Native.js无法反射抽象类,目前无法找到解决方法

} else {

bleAndroid4(BAdapter);

}

}

function bleAndroid4(BAdapter){

//蓝牙搜索回调

var mLeScanCallback = plus.android.implements("android.bluetooth.BluetoothAdapter$LeScanCallback", {

"onLeScan": function(device, rssi, scanRecord) {

// 可通过 scanRecord 获取Ble设备的uuid,major,minor

}

});

BAdapter.startLeScan(mLeScanCallback);

console.log("scan start!");

setTimeout(function() {

BAdapter.stopLeScan(mLeScanCallback);

console.log("scan end!");

},5000);

}

目前暂时就这些,后面在慢慢补充吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。