iBeacon开发基础

(迁移自我的qq日志:http://user.qzone.qq.com/511107989/blog/1401877946)

端午放假的时候,张老师@张诚 跟我说起一个词,iBeacon,说来惭愧,虽然一直做蓝牙相关的APP,但在此之前是完全没听过这个概念,虽然iBeacon是Location和Ble的结合体,但也算是直亲了吧,又想起了WWDC2014上新发布的开发语言Swift,突然感觉尝试去学习、掌握所有的东西是一个很笨的,因为更新的太快了,然后智商又比较捉急,按我的智商与学习能力,是永远没法赶上知识更新的脚步的,不知道其他同学有没有记忆力下降的现象,我反正是有了,所以都不得不边写代码,边通过日志的方式来记住刚学的东西了。

     能在闲暇的时候,积累或者扩展一下知识就好了,身体才是最重要滴。
    
    好了,老套路,扯淡完毕,进入正题:

==============================割了吧,反正将很久用不上了=========================================

    Beacon的应用场景是:当你手持一个设备,开启监听基站信号,一旦你进入这个基站的信号范围,你就能处理这个信号;就从这个角度看,这个很简单,就跟我们手机Sim卡信号和WiFi信号处理是一样的,只是SIM卡信号和WiFi信号的处理可能存在一个连接建立的过程,然后iBeacon不同,他是一个广播,那很简单的,我们就可以把它理解成,收音机,然而,这是一个特殊的收音机,不像我们日常用的收音机,你可以调不同频道,收听不同的内容,而iBeacon只能收到特定格式的广播。

    1、基站:一个BLE设备,广播内容;因为是一个BLE设备,因此不论是Android平台还是iOS平台,都可以扫描到这个基站;
                    

    2、手持设备:既然是通过处理BLE设备广播的数据,那自然手持设备就必须含有BLE模块,然而在iOS平台下(iBeacon其实就是iOS专属的,只是Android平台我们也可以做到大概的定位),确实通过了BLE模块和GPS模块结合起来(有没有其他模块以及内部是如何实现就暂不清楚了),来进行确定位置的,因此要使用的话,必须开启定位服务和蓝牙服务;在Android的平台,我们只能简单解析BLE的广播内容了;

好了,软件原理其实就是上面说的这么简单,掌握上面两个概念即可,而且iOS做了很好的集成,根本不需要我们做很多的工作;

现在如果你在iOS平台下做一个基站,广播内容,只需要以下3行关键代码:

CLBeaconRegion *region = [[CLBeaconRegion alloc]initWithProximityUUID:self.beaconRegion.proximityUUID

                                                                    major:value1

                                                                    minor:value2

                                                               identifier:self.beaconRegion.identifier];//根据uuid创建区域,uuid用来识别商场或其他应用场景,major和minor可以用来识别商场里面的不同的基站(beancon)
 

NSDictionary *beaconPeripheralData = [regionperipheralDataWithMeasuredPower:nil];//根据区域来建立广播的内容

   
[self.peripheralManager startAdvertising:beaconPeripheralData]//广播内容


//注:Android手机现在貌似不支持用作周边来广播内容,所以Android的先不写


如果你要做手持设备端软件:

  self.beaconRegion = [[CLBeaconRegion alloc]initWithProximityUUID:proximityUUID identifier:kIdentifier];

    self.beaconRegion.notifyEntryStateOnDisplay = YES;//创建需要监听的区域

[self.locationManager startMonitoringForRegion:self.beaconRegion];//开始监控区域 

 
如果要停止监控,调用:
 
 [self.locationManager stopMonitoringForRegion:self.beaconRegion];


接下来,就是回调函数的事情了: 

- ( void )locationManager:( CLLocationManager  *)manager

        didRangeBeacons:(NSArray *)beacons

               inRegion:(CLBeaconRegion *)region {


}


- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion*)region

{

}


- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion*)region

{

}


- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

{

}



其实到目前为止,可能还是没有理解这玩意有多大用处,说来说去我们只是收到了广播的内容,内容还非常有限,那接下来的事情,其实就是解析广播内容,然后搜索本地数据库或者网络中心等,获取内容后,显示给手持设备,
比如我收到的major值为1000,客户端就是给服务器发送这个major参数,服务器根据major值,xml格式或者jason格式返回打折对应产品的打折或者其他信息, 客户端解析,然后显示就ok啦;


Android平台就有点为难了,并没iOS集成的好,Android目前只是解析最表层的ble广播数据:

      在 BluetoothAdapter.LeScanCallback()中:
 onLeScan
(final BluetoothDevice device, int rssi, byte[] scanRecord)

解析这个scanRecord数组: 

// 02 01 1a 1a ff 4c 00  02 15   # Apple's fixed iBeacon advertising prefix  0215代表着iBeacon设备
// e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon profile uuid
// 00 00 # major值 
// 00 00 # minor 值
// c5 # The 2's complement of the calibrated Tx Power

然后再对应的处理,同iOS。 

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值