2014-09-06 3 views
11

Я смотрю здесь на форумах, на образцах моноблока GIT и никогда не нашел действительно функционального образца для использования CoreBluetooth, чтобы достичь следующего: 1.Проверьте, есть ли там устройство, которое соответствует критериям (по имени или некоторому идентификатору устройства) в паре и подключено 2.Если сопряжено, но не подключено, попробуйте подключиться к нему. 3.Если соединение завершено с ошибкой, тогда отобразите список устройств Bluetooth, соответствующих критерии по теме 1, чтобы пользователь мог выбрать и подключиться к нему.Xamarin.iOS CoreBluetooth/External Accesory issue

Примечание. Устройство, которое я пытаюсь подключить, использует SPP, но сертифицировано Apple MFI. Это считыватель кредитных карт через Bluetooth и некоторые потом даже реализовать ExternalAccessory протоколов

Страница CoreBluetooth образцы пуст http://developer.xamarin.com/samples/ios/CoreBluetooth/

Я пытаюсь это довольно простой образец, который никогда не получает события вызывается после сканирования:

public static class BTHelper 
    { 
     private static CBCentralManager manager; 
     private static CBUUID UUID; 

     static BTHelper() 
     { 
      manager = 
      manager.DiscoveredPeripheral += OnDiscovery; 
      manager.ConnectedPeripheral += OnConnected; 
      manager.DisconnectedPeripheral += OnDisconnected; 
      UUID = CBUUID.FromString("00001101-0000-1000-8000-00805F9B34FB"); 
     } 

     public static void CheckBluetooth() 
     { 
      manager.ScanForPeripherals(new[] { UUID }); 
     } 

     static void OnDisconnected(object sender, CBPeripheralErrorEventArgs e) 
     { 
      Console.WriteLine("Disconnected - " + e.Peripheral.Name); 
     } 

     static void OnConnected(object sender, CBPeripheralEventArgs e) 
     { 
      Console.WriteLine("Connected - " + e.Peripheral.Name); 
     } 

     static void OnDiscovery(object sender, CBDiscoveredPeripheralEventArgs e) 
     { 
      Console.WriteLine("Found - " + e.Peripheral.Name); 
     } 
    } 

Может ли кто-нибудь помочь? Я действительно устал от поиска и поиска многих вопросов на SO без реального ответа.

@XamarinTeam, вы, ребята, должны предоставить образец о том, как использовать его ... Мы потеряли без ссылки ...

Спасибо, очень признателен за любую помощь ...

Gutemberg

+0

IOS не поддерживает SPP. – Jason

+1

Спасибо за ответ, но устройство BT передало лицензионную программу Apple MFi и реализует протокол ExternalAccessory. У меня это работает очень хорошо на родной objetive-C \ –

+0

Если это MFi и SPP, то Core-Bluetooth не то, что вам нужно - это внешняя инфраструктура аксессуаров – Paulw11

ответ

0

Кажется, что вы смотрите на неправильные документы. Bluetooth поддерживает только связь с устройствами Bluetooth Low Energy (BLE) с использованием профиля GATT. вы не можете сканировать SPP-устройство с помощью corebluetooth.

Для вашего устройства MFI вам необходимо проверить структуру внешнего аксессуара, что позволяет связываться с «устаревшими» устройствами Bluetooth с использованием таких профилей, как протокол последовательного порта (SPP).

Чтобы ответить на ваш вопрос: : 1.Check, если есть устройство, которое соответствовать критериям (по имени или какой-либо идентификатор устройства) в паре и подключен

Вы можете использовать функцию showBluetoothAccessoryPickerEAAccessoryManager, чтобы получить список доступных устройств читать далее here

2.Если в паре, но не подключен, попробуйте подключиться к нему

Для этого не существует документального подтверждения. Вы не можете инициировать подключение из приложения без showBluetoothAccessoryPicker. Вы можете следить за уведомлением EAAccessoryDidConnect. если этот метод не вызывается, а вызов showbluetoothaccessorypicker вызывается, ваше устройство не подключено.

3.Если не удается установить соединение, а затем показать список устройств Bluetooth, который соответствует по теме из условий 1, так что пользователь может выбрать и подключить к нему 1)

После завершения showbluetoothaccessorypicker Вы можете проверить в ConnectedAccessories. Если его невозможно, позвоните showbluetoothaccessorypicker, чтобы отобразить список аксессуаров.

Пример кода для использования рамок внешних устройств в вашем коде

EAAccessoryManager manager= EAAccessoryManager.SharedAccessoryManager; 
var allaccessorries= manager.ConnectedAccessories; 
foreach(var accessory in allaccessorries) 
{ 
    yourlable.Text = "find accessory"; 
    Console.WriteLine(accessory.ToString()); 
    Console.WriteLine(accessory.Name); 
    var protocol = "com.Yourprotocol.name"; 

    if(accessory.ProtocolStrings.Where(s => s == protocol).Any()) 
    { 
     yourlable.Text = "Accessory found"; 
     //start session 
     var session = new EASession(accessory, protocol); 
     var outputStream = session.OutputStream; 
     outputStream.Delegate = new MyOutputStreamDelegate(yourlable); 
     outputStream.Schedule(NSRunLoop.Current, "kCFRunLoopDefaultMode"); 
     outputStream.Open(); 
    } 
} 

и

public class MyOutputStreamDelegate : NSStreamDelegate 
{ 
    UILabel label; 
    bool hasWritten = false; 

    public MyOutputStreamDelegate(UILabel label) 
    { 
     this.label = label; 
    } 
    public override void HandleEvent(NSStream theStream, NSStreamEvent streamEvent) 
    { 
     //write code to handle stream. 

    } 
} 

Существует не perticular демо для использования рамок Exeternal Комплектующие, , но Вы можете проверить этот пример кода для понимания, как он работает .:

Whole Project

AccessoryBrowser class

Смежные вопросы