2014-09-06 9 views
11

Ich habe hier in Foren, auf dem monotouch Proben GIT-Hub, und fand nie ein wirklich funktionsfähiges Beispiel CoreBluetooth zu verwenden, um Folgendes zu erreichen: 1.Überprüfen Sie, ob vorhanden ist ein Gerät, das einem Kriterium (nach Name oder einer Kennung des Geräts) gepaart und verbunden ist 2.Wenn gepaart, aber nicht verbunden, versuchen Sie es zu verbinden 3.Wenn Verbindung fehlschlägt, dann zeigen Sie eine Liste der Bluetooth-Geräte, die die übereinstimmt Kriterien zu Thema 1, damit der Benutzer auswählen und eine Verbindung zu ihm herstellen kannXamarin.iOS CoreBluetooth/Externe Accessory Problem

Hinweis: Das Gerät, das ich verbinden möchte, verwendet SPP, ist aber Apple MFi-zertifiziert. Es ist eine Kreditkarte Leser über Bluetooth und einige dann auch ExternalAccessory Protokolle

Die CoreBluetooth Proben implementieren Seite ist leer http://developer.xamarin.com/samples/ios/CoreBluetooth/

ich diese ziemlich einfache Probe habe versucht, die nie die Ereignisse nach dem Scan aufgerufen:

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); 
     } 
    } 

Kann jemand helfen? Ich bin es wirklich leid zu googeln und viele Fragen zu SO zu stellen, ohne eine wirkliche Antwort zu haben.

@XamarinTeam, euch eine Probe auf bereitstellen sollte, wie es zu benutzen ... Wir sind ohne Bezug verloren ...

danken, wirklich zu schätzen jede Hilfe ...

Gutemberg

+0

iOS nicht SPP unterstützt. – Jason

+1

Danke für die Antwort, aber das BT-Gerät bestanden Apple MFi-Lizenzprogramm und implementiert das ExternalAccessory-Protokoll. Ich habe es funktioniert ziemlich gut auf native objetive-C \ –

+0

Wenn es MFi und SPP ist dann Core-Bluetooth ist nicht, was Sie wollen - es ist das externe Zubehör-Framework – Paulw11

Antwort

0

Es sieht so aus, als würden Sie sich falsche Dokumente ansehen. Core Bluetooth ermöglicht Ihnen nur die Kommunikation mit Bluetooth Low Energy (BLE) -Geräten über das GATT-Profil. Sie können SPP-Geräte nicht mit Corebluetooth scannen.

Für Ihr MFI-Gerät müssen Sie External Accessory framework überprüfen. Es ermöglicht die Kommunikation mit älteren Bluetooth-Geräten mit Profilen wie dem Serial Port Protocol (SPP).

Um Ihre Frage zu beantworten: : 1. Überprüfen Sie, ob ein Gerät ist, das einen Kriterien entsprechen (nach Name oder eine Kennung des Gerätes) gekoppelt und verbunden

Sie showBluetoothAccessoryPicker Funktion verwenden können, EAAccessoryManager Liste der verfügbaren Geräte zu erhalten, lesen sie mehr here

2.Falls gepaart, aber nicht verbunden, versuchen sie es verbinden

Es gibt keine dokumentierte Möglichkeit, dies zu überprüfen. Sie können keine Verbindung von App ohne showBluetoothAccessoryPicker initiieren. Sie können für EAAccessoryDidConnect Benachrichtigung überwachen. Wenn diese Methode nicht aufgerufen wird und die complition von showbluetoothaccessorypicker aufgerufen wird, ist Ihr Gerät nicht verbunden.

3.Wenn die Verbindung fehlschlägt, zeigt dann eine Liste der Bluetooth-Geräte, die die Kriterien zum Thema matches 1 so kann der Benutzer auswählen und es 1)

Nach Abschluss der showbluetoothaccessorypicker Sie können in ConnectedAccessories überprüfen verbinden. Wenn es nicht verfügbar ist, rufen Sie showbluetoothaccessorypicker an, um die Zubehörliste anzuzeigen.

Beispielcode für in Ihrem Code Externe Zubehör Framework

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(); 
    } 
} 

und

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. 

    } 
} 

Es gibt keine perticular Demo für die Verwendung von Exeternal Accessory Framework aber Sie können überprüfen, Dieser Beispielcode für das Verständnis, wie es funktioniert .:

Whole Project

AccessoryBrowser class

Verwandte Themen