Forum: PC-Programmierung Swift Bluetooth app


von Test T. (passe)


Lesenswert?

Hallo Leute,

ich hätte da eine Frage bezüglich der Implementierung einer Bluetooth 
Verbindung zwischen meiner iPhone6 App und einem anderen device. In 
diesem Fall handelt es sich dabei um ein MacBook Pro (Retina, Mitte 
2012).

Der unten eingefügte Swift Quellcode sollen beim Start der App alle 
Bluetooth Devices in der Umgebung suchen und sich dann nach Möglichkeit 
mit meinem MacBook verbinden. Leider gibt es dazu von meinerseits noch 
einige Unklarheiten und Dinge die nicht Funktionieren:

1. Mein MacBook wird nicht gefunden. Es ist sichtbar und sollte BT 4.0 
unterstützen. In den Einstellungen vom iPhone kann ich es auch manuell 
suchen und finden.

2. (MARK 1)
Was macht die aufgeführte Methode scanForPeripherals wirklich? Sucht 
diese Funktion alle Geräte in der Nähe oder bricht sie die Suche nach 
einem Gerät ab?

3. (MARK 2)
Nach dem Scan Vorgang spring das Programm wie gewünscht in die Funktion:

centralManager(central: CBCentralManager, didDiscoverPeripheral 
peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: 
NSNumber)

Jedoch wird auch bei mehreren Geräten in der Umgebung immer nur eins 
angezeigt (nur mein MacBook nicht)? Deshalb Frage 1... Naja aber soweit 
so gut, auch mit nur irgendeinem anderen Gerät sollte ja zumindest ein 
Verbindungsaufbau erfolgen...

4. (MARK 3)
Die Methode connectPeripheral wird zwar ausgeführt, jedoch passiert 
nichts danach. Nach meinem Verständnis müsste doch eins der unten 
aufgeführten Ereignisse in jedem Fall aufgerufen werden oder nicht? 
Selbst bei einem gescheiterten Verbindungsversuch gehe ich davon aus, 
dass die Funktion:

func centralManager(central: CBCentralManager, 
didFailToConnectPeripheral peripheral: CBPeripheral, error: NSError?) 
{print("Failed")}

ausgeführt wird... leider passiert gar nichts...


Ziemlich viele Fragen, aber ich hoffe, ihr könnt mir trotzdem helfen...


Vielen Dank!



1
import UIKit
2
import CoreBluetooth
3
import Foundation
4
5
class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate  {
6
    
7
    override func viewDidLoad() {
8
        super.viewDidLoad()
9
        // Do any additional setup after loading the view, typically from a nib.
10
        manager = CBCentralManager(delegate: self, queue: nil);
11
12
    }
13
14
    override func didReceiveMemoryWarning() {
15
        super.didReceiveMemoryWarning()
16
        // Dispose of any resources that can be recreated.
17
    }
18
19
    var manager: CBCentralManager!
20
    
21
    
22
    func centralManagerDidUpdateState(central: CBCentralManager) {
23
    
24
        //Überprüfe ob Bluetooth verfügbar und an ist! 
25
        switch(central.state) {
26
        case .PoweredOn:
27
            print("Power onn!")
28
            //Bluetooth ist an und es soll nach Geräten gesucht werden!
29
            //MARK 1:
30
            manager.scanForPeripheralsWithServices(nil, options: nil)
31
        case .PoweredOff:
32
            print("Power off!")
33
        case .Resetting:
34
            print("Resetting!")
35
        case .Unauthorized:
36
            print("Unauthorized!")
37
        case .Unknown:
38
            print("Unknown!")
39
        case .Unsupported:
40
            print("Unsupported!")
41
        }
42
    }
43
    
44
    
45
    func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
46
        //Gebe die Gefundenen Peripherals aus!
47
        //MARK 2:
48
        print("\(peripheral)")
49
        //Verbinde mit dem gefundenen Gerät
50
        //MARK 3:
51
        manager.connectPeripheral(peripheral, options: nil)
52
        print("Connect")
53
    }
54
    
55
    
56
    func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) {
57
         print("Passt")
58
    }
59
    
60
    func centralManager(central: CBCentralManager, didFailToConnectPeripheral peripheral: CBPeripheral, error: NSError?) {
61
        print("Failed")
62
    }
63
    
64
    func centralManager(central: CBCentralManager, willRestoreState dict: [String : AnyObject]) {
65
        print("Restore")
66
    }
67
    
68
    func centralManager(central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: NSError?) {
69
        print("Disconnected")
70
    }
71
}

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Hallo Pascal,

Pascal S. schrieb:

> 1. Mein MacBook wird nicht gefunden. Es ist sichtbar und sollte BT 4.0
> unterstützen. In den Einstellungen vom iPhone kann ich es auch manuell
> suchen und finden.
>
> 2. (MARK 1)
> Was macht die aufgeführte Methode scanForPeripherals wirklich? Sucht
> diese Funktion alle Geräte in der Nähe oder bricht sie die Suche nach
> einem Gerät ab?

sie sucht nach Geräten, die period so genante Advertisings senden. Das 
tun in der Regel BT 4.0 Peripherals. Dein MacBook wird das nicht von 
alleine tun. Und das ist auch der Grund dafür, dass Du den nicht siehst.

mfg Torsten

von Test T. (passe)


Lesenswert?

Okay Vielen Dank erstmal für die Antwort!


Ich konnte bis jetzt schonmal einige Probleme beseitigen. Die Connect 
Funktion geht jetzt auch, nachdem ich die Peripherals (warum auch immer) 
zuvor in einer Property abgespeichert habe. Soweit so gut!

Besteht denn die Möglichkeit, auch nach allen Devices (auch ohne 
advertising) zu suchen?


Vielen Dank!

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Pascal S. schrieb:
> Besteht denn die Möglichkeit, auch nach allen Devices (auch ohne
> advertising) zu suchen?

Nein, wenn die nicht funken, kannst Du auch nichts empfangen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.