m***@qq.com
m***@qq.com
  • 发布:2016-09-10 17:14
  • 更新:2018-12-16 07:02
  • 阅读:2920

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

分类:Native.js
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));     
}

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

2016-09-10 17:14 负责人:无 分享
已邀请:

最佳回复

DCloud_heavensoft

DCloud_heavensoft

DCloud_IOS_XTY

DCloud_IOS_XTY

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

#import <CoreBluetooth/CoreBluetooth.h>  
@interface AppDelegate : UIResponder <UIApplicationDelegate, CBCentralManagerDelegate>
m***@qq.com

m***@qq.com (作者)

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

m***@qq.com

m***@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);  
}

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

7***@qq.com

7***@qq.com

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

该问题目前已经被锁定, 无法添加新回复