2016-08-30 1 views
0

Ich versuche, die Geräte, die derzeit mit meinem iPhone verbunden sind, über Bluetooth mit Swift aufzulisten. Ich mag jedes Gerät (BLE, Klassik Bluetooh ...)Welche Service-UUIDs muss ich an retrieveConnectedPeripheralsWithServices übergeben, um ein verbundenes Gerät in swift zu erhalten?

I CoreBluetooth in Xcode 7.3 und schnellen 2,2

//CoreBluetooth methods 
func centralManagerDidUpdateState(central: CBCentralManager) 
{ 
    if (central.state == CBCentralManagerState.PoweredOn) 
    { 
     self.centralManager?.retrieveConnectedPeripheralsWithServices(**HERE**) 
    } 
    else 
    { 
     // do something like alert the user that ble is not on 
    } 
} 

func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) 
{ 
    allPeripherals.append(peripheral) 

} 

Ich verwende nicht das Projekt kompilieren, weil ich nicht weiß, was passieren ein Parameter für die Funktion retrieveConnectedPeripheralsWithServices, um alle angeschlossenen Geräte zu erhalten.

Danke für Ihre Hilfe.

+0

Überprüfen Sie diese Antwort: http://stackoverflow.com/questions/25865937/how-to-detect-if-a-iphone-is-connected-to-any-bluetooth-device -oder-nicht – p2pkit

Antwort

1

Gemäß der Dokumentation sollten Sie ein NSArray mit CBUUID-Objekten eingeben. Diese Dienst-UUIDs müssen zu denen gehören, die zuvor für dieses Peripheriegerät auf diesem Gerät entdeckt wurden. Normalerweise würden Sie dieselben UUIDs eingeben, die Sie beim Scannen für das Peripheriegerät verwenden.

auf Objective-C zumindest dies ist ein Beispiel dafür, was Sie nutzen könnten:

@[[CBUUID UUIDWithString:@"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]] 

Ich weiß nicht offensichtlich, welche uuid Sie benötigen.

0

Nach der Untersuchung können Sie keine klassischen Geräte mit CoreBluetooh finden, Sie müssen das ExternalAccessory-Framework verwenden. Hier ist ein Code, der zur Zeit „klassischen“ Geräte erhalten arbeitet verbunden:

class ViewController: UIViewController,CLLocationManagerDelegate,CBCentralManagerDelegate, EAAccessoryDelegate{ 

var locationManager:CLLocationManager=CLLocationManager() 
let accuracy=kCLLocationAccuracyBest 


var centralManager: CBCentralManager? 
var allPeripherals: Array<CBPeripheral> = Array<CBPeripheral>() 
var connectedPheripherals: Array<CBPeripheral> = Array<CBPeripheral>() 

var eaccessory:EAAccessoryManager? 

@IBAction func putAction(sender: AnyObject) { 
    //  GPS info 
    let latitude=locationManager.location?.coordinate.latitude 
    let longitude=locationManager.location?.coordinate.longitude 
    let altitude=locationManager.location?.altitude 
    let verticalAccuracy=locationManager.location?.verticalAccuracy 
    let horizontalAccuracy=locationManager.location?.horizontalAccuracy 
    let speed=locationManager.location?.speed 

    //   Carrier info 
    let networkInfo = CTTelephonyNetworkInfo() 
    let carrier = networkInfo.subscriberCellularProvider 
    let carrierName = carrier!.carrierName 

    //   Phone's info 
    let phone=UIDevice.currentDevice() 
    let model=phone.model 
    let os=phone.systemName 

    //   Bluetooth's info 
    for d in (eaccessory?.connectedAccessories)! 
    { 
     print("name: \(d.name)") 
     print("modelNumber: \(d.modelNumber)") 
     print("MAC: \(d.valueForKey("macAddress"))") 
    } 
} 


func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) { 

} 

private func sendRequest(latitude:CLLocationDegrees, longitude:CLLocationDegrees, accuracy: CLLocationAccuracy) 
{ 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    centralManager = CBCentralManager(delegate: self, queue: dispatch_get_main_queue()) 

    locationManager.delegate=self 

    eaccessory = EAAccessoryManager.sharedAccessoryManager() 

    locationManager.desiredAccuracy=accuracy 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.allowsBackgroundLocationUpdates=true 
    locationManager.pausesLocationUpdatesAutomatically=false 
    locationManager.startUpdatingLocation() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


//CoreBluetooth methods 
func centralManagerDidUpdateState(central: CBCentralManager) 
{ 
    if (central.state == CBCentralManagerState.PoweredOn) 
    { 
     //self.centralManager?.retrieveConnectedPeripheralsWithServices 
    } 
    else 
    { 
     // do something like alert the user that ble is not on 
    } 
} 

func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) 
{ 
    allPeripherals.append(peripheral) 


} 

}

Wenn Sie die BLE Geräte auflisten möchten, dann müssen Sie den CoreBluetooth Rahmen und die Methode verwenden retrieveConnectedPeripheralsWithServices die wird ein Array von CBUUID erhalten. Dieses Array muss mit der Service-UUID gefüllt sein, die Sie ermitteln möchten. Einige davon sind hier aufgelistet: https://www.bluetooth.com/specifications/gatt/services

+0

Oh yep, tut mir leid, ich habe den Teil über Bluetooth Classic in Ihrer ursprünglichen Frage vermisst. Meine Antwort ist nur für BTLE – Anton

Verwandte Themen