CoreBluetooth 命名空间
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
CoreBluetooth 命名空间提供用于蓝牙通信的类。
类
接口
ICBCentralManagerDelegate |
表示所需方法的接口 ((如果协议 CBCentralManagerDelegate有任何) )。 |
ICBPeripheralDelegate |
表示所需方法的接口 ((如果协议 CBPeripheralDelegate有任何) )。 |
ICBPeripheralManagerDelegate |
表示所需方法的接口 ((如果协议 CBPeripheralManagerDelegate有任何) )。 |
枚举
CBATTError |
GATT 服务器返回的错误。 |
CBAttributePermissions |
枚举特征值的读取、写入和加密权限。 |
CBCentralManagerState |
枚举 的可能状态 CBCentralManager。 |
CBCharacteristicProperties |
特征的可能属性。 一个特征可能具有多个属性。 |
CBCharacteristicWriteType |
枚举特征值的可能写入类型。 |
CBError |
蓝牙 LE 事务期间可能出现错误。 |
CBManagerState |
CoreBluetooth 命名空间提供用于蓝牙通信的类。 |
CBPeripheralManagerAuthorizationStatus |
枚举 的可能状态 CBPeripheralManager。 |
CBPeripheralManagerConnectionLatency |
的连接延迟 CBPeripheralManager。 |
CBPeripheralManagerState |
枚举 的可能状态 CBPeripheralManager。 |
CBPeripheralState |
枚举 的可能连接状态 CBPeripheral。 |
注解
CoreBluetooth 命名空间允许开发人员使用低功耗蓝牙 (蓝牙 LE) 设备。
蓝牙 LE 模型围绕 CBPeer 对象展开。 有两种类型的 CBPeer对象: CBCentral 扫描和使用对象提供 CBPeripheral 的数据,这些对象对应于提供数据的蓝牙 LE 设备。
通常,iOS 设备将处于 角色 CBCentral 中,但也可以创建设备为 CBPeripheral的应用。
以下示例演示使用外部蓝牙 LE 设备数据的应用的典型初始化行为。 具有 CBCentral 的应用程序必须具有关联的 CBCentralManagerDelegate 委托对象,并且必须重写它的 方法 UpdatedState 。 重写必须检查 的状态CBCentralManager,并确认它是 PoweredOn。
通常,应用程序需要扫描蓝牙 LE 外围设备。 这是一个高能量函数,因此开发人员在找到CBPeripheral感兴趣的 后或在一定时间后,应调用 *M:CoreBluetooth.CBManager.StopScan* 。
public class MySimpleCBCentralManagerDelegate : CBCentralManagerDelegate
{
override public void UpdatedState (CBCentralManager mgr)
{
if (mgr.State == CBCentralManagerState.PoweredOn) {
//Passing in null scans for all peripherals. Peripherals can be targeted by using CBUIIDs
CBUUID[] cbuuids = null;
mgr.ScanForPeripherals (cbuuids); //Initiates async calls of DiscoveredPeripheral
//Timeout after 30 seconds
var timer = new Timer (30 * 1000);
timer.Elapsed += (sender, e) => mgr.StopScan();
} else {
//Invalid state -- Bluetooth powered down, unavailable, etc.
System.Console.WriteLine ("Bluetooth is not available");
}
}
public override void DiscoveredPeripheral (CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
{
Console.WriteLine ("Discovered {0}, data {1}, RSSI {2}", peripheral.Name, advertisementData, RSSI);
}
}
public partial class HelloBluetoothCSharpViewController : UIViewController
{
MySimpleCBCentralManagerDelegate myDel;
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
//Important to retain reference, else will be GC'ed
myDel = new MySimpleCBCentralManagerDelegate ();
var myMgr = new CBCentralManager (myDel, DispatchQueue.CurrentQueue);
}
//...etc...
}
DiscoveredPeripheral可以为单个物理设备多次调用 方法。 一旦应用程序开发人员引用 CBPeripheral 了他们感兴趣的 ,他们应保留该引用以进一步工作并调用 StopScan。
通过对发现的 CBPeripheral引用,开发人员可以连接到它,如以下示例所示。
具有 CBPeripheral 零个或多个 CBServices,其中每个都有零个或多个 CBCharacteristics。 如果特征表示测量 ((如检测信号、时间、温度等 ) ),则 值将位于 属性中 Value 。
public class SimplePeripheralDelegate : CBPeripheralDelegate
{
public override void DiscoveredService (CBPeripheral peripheral, NSError error)
{
System.Console.WriteLine ("Discovered a service");
foreach (var service in peripheral.Services) {
Console.WriteLine (service.ToString ());
peripheral.DiscoverCharacteristics (service);
}
}
public override void DiscoveredCharacteristic (CBPeripheral peripheral, CBService service, NSError error)
{
System.Console.WriteLine ("Discovered characteristics of " + peripheral);
foreach (var c in service.Characteristics) {
Console.WriteLine (c.ToString ());
peripheral.ReadValue (c);
}
}
public override void UpdatedValue (CBPeripheral peripheral, CBDescriptor descriptor, NSError error)
{
Console.WriteLine ("Value of characteristic " + descriptor.Characteristic + " is " + descriptor.Value);
}
public override void UpdatedCharacterteristicValue (CBPeripheral peripheral, CBCharacteristic characteristic, NSError error)
{
Console.WriteLine ("Value of characteristic " + characteristic.ToString () + " is " + characteristic.Value);
}
}
//...
mgr = new CBCentralManager (myCentralDelegate, DispatchQueue.CurrentQueue);
mgr.ConnectedPeripheral += (s, e) => {
activePeripheral = e.Peripheral;
System.Console.WriteLine ("Connected to " + activePeripheral.Name);
if (activePeripheral.Delegate == null) {
activePeripheral.Delegate = new SimplePeripheralDelegate ();
//Begins asynchronous discovery of services
activePeripheral.DiscoverServices ();
}
};
//Connect to peripheral, triggering call to ConnectedPeripheral event handled above
mgr.ConnectPeripheral (myPeripheral);