2017-05-31 44 views
1

我已經創建了一個xamarin表單應用程序。我想檢查iOS中藍牙的狀態。我已經使用下面的代碼,但if (state == CBCentralManagerState.PoweredOn)正在返回我Unknown。它沒有提供藍牙狀態的實際狀態。有人可以幫我弄清楚什麼是錯的嗎?謝謝。檢查iOS中Xamarin表單的藍牙狀態

這種方法的引用是在這裏:https://developer.xamarin.com/api/type/MonoMac.CoreBluetooth.CBCentralManagerState/

private CBCentralManagerState state; 

    public bool CheckBluetoothStatus() 
    { 
     bool status; 
     if (state == CBCentralManagerState.PoweredOn) 
     { 
      status= true; 
     } 
     else 
     { 
      status = false; 
     } 
     return status; 

    } 
+0

什麼是你的設備?什麼是操作系統版本?你創建了CBCentralManager對象嗎?另外,請等到https://developer.xamarin.com/api/member/MonoMac.CoreBluetooth.CBCentralManagerDelegate.UpdatedState/p/MonoMac.CoreBluetooth.CBCentralManager/被調用來檢查它。 – Larme

+0

@Larme它是一個iphone 6s。 – jones

+0

您是否創建了CBCentralManager對象? – Larme

回答

0

你應該CBCentralManager

_mgr = new CBCentralManager(); 
_mgr.UpdatedState += CBCentralManager_UpdatedState; 
void CBCentralManager_UpdatedState(object sender, EventArgs e){ 
    switch (_mgr.State) 
} 
+0

您能否提供更詳細的示例? – jones

1

下標UpdatedState事件作爲apple documentation這裏描述,您需要初始化CBCentralManager你才能真正用它。

如果您查看CBCentralManager的Xamarin Documentation,它們將爲您提供它所需的所有構造函數的列表。實現從底部

CBCentralManager(CBCentralManagerDelegate, DispatchQueue, CBCentralInitOptions) 

第二人,但你實現這之前,你需要實現CBCentralManagerDelegate。這可能是像這樣簡單

public class CbCentralDelegate : CBCentralManagerDelegate 
{ 
    public override void UpdatedState(CBCentralManager central) 
    { 
     if(central.State == CBCentralManagerState.PoweredOn) 
     { 
      System.Console.WriteLine("Powered On"); 
     } 
    } 
} 

現在你已經實現了委託,你應該能夠從CBCentralManager獲取藍牙的狀態,這樣

var bluetoothManager = new CBCentralManager(new CbCentralDelegate(),DispatchQueue.DefaultGlobalQueue, 
                 new CBCentralInitOptions{ShowPowerAlert = true}); 

return bluetoothManager.State == CBCentralManagerState.PoweredOn; 

我知道它是一個雖然這是問,但希望這會幫助你。(或其他人)