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 物件。 有兩種 CBPeerCBCentral :物件會掃描及取用物件所提供的 CBPeripheral 資料,這些物件會對應至提供藍牙 LE 裝置的資料。
一般而言,iOS 裝置會處於 CBCentral 角色,但也可以建立裝置為 CBPeripheral 的應用程式。
下列範例顯示從外部藍牙 LE 裝置取用資料之應用程式的一般初始化行為。 具有 CBCentral 的應用程式必須具有相關聯的 CBCentralManagerDelegate 委派物件,而且必須覆寫其 UpdatedState 方法。 覆寫必須檢查 的狀態 CBCentralManager ,並確認其為 PoweredOn 。
一般而言,應用程式會想要掃描藍牙 LE 周邊。 這是一個高能源函式,因此開發人員在尋找感興趣的 或在特定時間之後,應該呼叫 M:CoreBluetooth.CBManager.StopScan* 。 CBPeripheral
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有零個或多個 CBService s,每個都有零或多個 CBCharacteristic s。 如果特性代表測量 (,例如活動訊號、時間、溫度等 ) ,該值將會在 屬性中 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);