一。手机在后台运行,蓝牙保持长连接
- target->info.plist,添加如下字段:
-
Required background modes
(这个字段的值是个数组,对应里面,添加两个元素item0
):
-
item0
=App shares data using CoreBluetooth
-
item1
=App communicates using CoreBluetooth
/// 第一个参数:在程序被挂起时,连接成功显示alert提醒框
/// 第二个参数:在程序被挂起时,断开连接显示alert提醒框
/// 第三个参数: 在程序被挂起时,显示所有的提醒消息
let option = [CBConnectPeripheralOptionNotifyOnConnectionKey:true,
CBConnectPeripheralOptionNotifyOnDisconnectionKey:true,
CBConnectPeripheralOptionNotifyOnNotificationKey:true]
self.central.connect(peripheral!, options:option)
二,扫描后,有两个方法会返回设备:
-
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)args_peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
: 中心设备的代理方法
,返回的是每次实时扫描的设备(每次设备的信息是最新的,获取RSSI变化就在这个回调了)
-
retrieveConnectedPeripheralsWithServices
: 中心设备的对象方法
,返回的是手机系统连接过的设备缓存,因为是缓存,所以如果设备信息(例如设备名称
)改变了,拿到的可能还是上次连接时候的信息(设备名称
),手机重连就用这个
三,扫描/连接方法,参数说明:
- 连接方法,参数说明:
/// 第一个参数:在程序被挂起时,连接成功显示alert提醒框
/// 第二个参数:在程序被挂起时,断开连接显示alert提醒框
/// 第三个参数: 在程序被挂起时,显示所有的提醒消
let option = [CBConnectPeripheralOptionNotifyOnConnectionKey:true,
CBConnectPeripheralOptionNotifyOnDisconnectionKey:true,
CBConnectPeripheralOptionNotifyOnNotificationKey:true]
self.central.connect(peripheral!, options:option)
- 扫描方法,参数说明:
/// 第一个参数:是否重复扫描已经发现的设备。如果需要不断获取最新信号强度RSSI,此参数要设为YES
/// 第二个参数:蓝牙没打开,是否弹出提示框
let option = [CBCentralManagerScanOptionAllowDuplicatesKey:true,
CBCentralManagerOptionShowPowerAlertKey:true]
self.central.scanForPeripherals(withServices:self.service ? array : nil, options:option)
四,按位与(AND)| 按位或(OR)|按位异或(XOR)
按位与(AND)
- 规则:
只有当两个位都为1时,结果位才为1,否则为0。
- 示例:
1100 & 1010 = 1000
第1位:1 & 1 = 1
第2位:1 & 0 = 0
第3位:0 & 1 = 0
第4位:0 & 0 = 0
按位或(OR)
- 规则:
只要有一个位为1,结果位就是1,只有当两个位都为0时,结果位才为0。
- 示例:
1100 | 1010 = 1110
第1位:1 | 1 = 1
第2位:1 | 0 = 1
第3位:0 | 1 = 1
第4位:0 | 0 = 0
- 用途:
- 设置特定位:
将某些位设置为1
将一个字节的低4位设置为1
let byte: UInt8 = 0b11000000
let mask: UInt8 = 0b00001111
let result = byte | mask // 0b11001111
- 合并多个标志:
将多个标志位合并到一个变量中。
设置多个选项或标志位
let flagA: UInt8 = 0b00000001
let flagB: UInt8 = 0b00000010
let combinedFlags = flagA | flagB // 0b00000011
按位异或(XOR)
- 规则:
当两个位不同时,结果位为1;当两个位相同时,结果位为0。
- 示例:
1100 ^ 1010 = 0110
第1位:1 ^ 1 = 0
第2位:1 ^ 0 = 1
第3位:0 ^ 1 = 1
第4位:0 ^ 0 = 0
- 用途:
- 翻转特定位
将某些位进行翻转(0变1,1变0)。
翻转一个字节的低4位。
let byte: UInt8 = 0b11010110
let mask: UInt8 = 0b00001111
let result = byte ^ mask // 0b11011001
- 加密解密:
在简单的加密算法中,用于加密和解密。
用相同的密钥进行加密和解密。
let data: UInt8 = 0b11010110
let key: UInt8 = 0b01100101
let encrypted = data ^ key // 加密
let decrypted = encrypted ^ key // 解密
- 交换两个变量的值:
在不使用第三个变量的情况下,交换两个变量的值。
交换两个整数。
var a = 5 // 0b0101
var b = 9 // 0b1001
a = a ^ b
b = a ^ b
a = a ^ b
// 交换后 a = 9, b = 5