我正在Xamarin.Forms中構建具有藍牙功能的應用程序。在連接到設備後,我有一個ObsevableCollection
收集可用的服務。然後我想選擇我正在尋找的服務。如何在C#中搜索設置ID的列表
使用Monkey.Robotics
插件,並基於示例HeartRate Monitor應用程序。目前,有
this.services = new ObservableCollection<IService>();
listView.ItemsSource = services;
// when device is connected
adapter.DeviceConnected += (s, e) => {
device = e.Device;
// when services are discovered
device.ServicesDiscovered += (object se, EventArgs ea) => {
if (services.Count == 0) //if it's only just started
Device.BeginInvokeOnMainThread(() => {
foreach (var service in device.Services) {
services.Add(service); //add all new services found to ObservableCollection
}
});
};
// start looking for services
device.DiscoverServices();
};
所以當前代碼檢索所有服務,並將它們放入一個ObservableCollection
,然後填充一個列表視圖。我不想填充列表並等待用戶輸入,而是想搜索我想要的服務的結果。即
await Task.Delay (5000); // wait 5 seconds for the scan to complete
IService ChosenService = null;
try {
foreach(var data in services)
{
if (data!=null && data.ID!=null && data.ID.ToString() == 0x180D.ToString()){ ChosenService = data; break; }
}
}
catch {
Debug.WriteLine ("Exception");
}
Debug.WriteLineIf(ChosenService == null, "Not Chosen");
第三次更新:
我已經加入了嘗試,catch塊如上圖,也增加了檢查,以確保我們不與空引用工作。這一切都編譯,並且應用程序不會在任何時候崩潰!但是,該過程以ChosenService = null結束?所以這段代碼不起作用。任何想法爲什麼不呢?該服務掃描似乎是工作,因爲在調試窗口中,我得到以下回饋:
2015-09-26 22:09:38.329 Gas_SenseiOS[1431:605554] Device.Discovered Service: <CBService: 0x12832e7e0, isPrimary = YES, UUID = Heart Rate>
2015-09-26 22:09:38.333 Gas_SenseiOS[1431:605554] Device.Discovered Service: <CBService: 0x12831c950, isPrimary = YES, UUID = Device Information>
2015-09-26 22:09:38.349 Gas_SenseiOS[1431:605554] Device.Discovered Service: <CBService: 0x12832e7e0, isPrimary = YES, UUID = Heart Rate>
2015-09-26 22:09:38.350 Gas_SenseiOS[1431:605554] Device.Discovered Service: <CBService: 0x12831c950, isPrimary = YES, UUID = Device Information>
2015-09-26 22:09:38.352 Gas_SenseiOS[1431:605554] Device.Discovered Service: <CBService: 0x12832e7e0, isPrimary = YES, UUID = Heart Rate>
2015-09-26 22:09:38.352 Gas_SenseiOS[1431:605554] Device.Discovered Service: <CBService: 0x12831c950, isPrimary = YES, UUID = Device Information>
有什麼異常?嘗試用'try-catch'模塊包裝代碼並參閱。 – ieaglle
始終報告錯誤/異常消息及其發生的位置。 –
@SamiKuhmonen我在我的iPhone上調試,因爲我需要藍牙,我沒有收到任何錯誤消息。不確定它是調試器錯誤還是應用程序錯誤? –