iOS上搜索蓝牙设备的问题,官方应该开发一些常用设备的插件。

function searchIOS(){

var CBCentralManager = plus.ios.import("CBCentralManager");

var manager = new CBCentralManager();

var delegate = plus.ios.implements("CBCentralManagerDelegate", {

"centralManagerDidUpdateState:": centralManagerDidUpdateState,

"centralManager:didDiscoverPeripheral:advertisementData:RSSI:": didDiscoverPeripheral

});

manager.initWithDelegatequeue(delegate,null);

console.log('1、开始扫描蓝牙外设....');

manager.scanForPeripheralsWithServicesoptions(null, null);

}

function centralManagerDidUpdateState(central) {

var state = central.plusGetAttribute('state');

if (state == 4) {

console.log('请开启蓝牙');

}

console.log("2. 中央外设管理器状态 state= " + state);

}



function didDiscoverPeripheral(central, peripheral, advertisementData, RSSI) {

console.log('4. 发现蓝牙外设 didDiscoverPeripheral')

console.log('<br>central=' + JSON.stringify(central));



//为什么能发现,但获取不到蓝牙设备,以下三个值均返回 undefined

console.log('<br>peripheral=' + JSON.stringify(peripheral));

console.log('<br>advertisementData=' + JSON.stringify(advertisementData));

console.log('<br>RSSI=' + JSON.stringify(RSSI));

}

\n

以上是根据论坛中的信息编写的IOS上查询蓝牙的方法,但是只能查询到蓝牙的开启状态,其他的信息都拿不到?哪位大神指导一下呗。另外manager.initWithDelegatequeue(delegate,null);这个方法如果第二个参数为空的情况下在最新版本的ios上无法执行,需要怎么修改呢?



2016-09-10 17:14 添加评论 分享
已邀请:

最佳回复

0

DCloud_heavensoft

赞同来自:

更新:5+已提供蓝牙,参考http://www.html5plus.org/doc/zh_cn/bluetooth.html 注意需要最新版HBuilderX 1.3


0

DCloud_IOS_XTY

赞同来自:

如果是离线打包可以在Appdelegate文件中这么写下:

#import <CoreBluetooth/CoreBluetooth.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, CBCentralManagerDelegate>
\n
0

macless@qq.com

赞同来自:

真机调试不行呢?现在还没有离线打包的环境,只能在线打包,在线打包不行吗?


0

macless@qq.com

赞同来自:

经过反复调试,发现在ipad上没有问题,但是在iphone上还是有问题。调试过程将代码调整如下:

function searchIOS(){
var CBCentralManager = plus.ios.import("CBCentralManager");
var manager = new CBCentralManager();
var delegate = plus.ios.implements("CBCentralManagerDelegate", {
"centralManagerDidUpdateState:": centralManagerDidUpdateState,
"centralManager:didDiscoverPeripheral:advertisementData:RSSI:": didDiscoverPeripheral
});
if(plus.device.model=="iPad" || plus.device.model=="iPod"){
manager.initWithDelegatequeue(delegate,null);
}else{
manager.initWithDelegatequeue(delegate,null,null);
}
}
function centralManagerDidUpdateState(central) {
//console.log(central);
var state = central.plusGetAttribute('state');
console.log(state);
if (state == 4) {
writelog('请开启蓝牙');
}
if(state==5){
console.log("中央外设管理器状态 state= " + state);
central.scanForPeripheralsWithServicesoptions(null, null);
}
//writelog("中央外设管理器状态 state= " + state);
}

function didDiscoverPeripheral(central, peripheral, advertisementData, RSSI) {
var name = peripheral.plusGetAttribute("name");
var uuid = peripheral.plusGetAttribute("identifier").plusGetAttribute("UUIDString");
var rssi = RSSI.plusGetAttribute("intValue");
var dist = calcDistByRSSI(rssi,74,2);
writelog("蓝牙设备:"+ name + " " + uuid + " " + rssi + " " + dist + "米");

}


function writelog(msg){
var li = document.createElement("li");
li.innerText = msg;
document.getElementById("test").appendChild(li);
}

function calcDistByRSSI(rssi,a,n){
var rs = Math.abs(rssi);
var power = (rs-a)/(10*n);
return Math.pow(10,parseFloat(power)).toFixed(2);
}
\n

真机调试情况下将manager.initWithDelegatequeue(delegate,null); 换成manager.initWithDelegatequeue(delegate,null,null); 这个的情况下,ipad不能继续运行,iphone不闪退,但是也不能得到什么结果。


0

773927929@qq.com

赞同来自:

楼主,最后是怎么搞定的?


要回复问题请先登录注册