Wie neu zu starten BluetoothLeScanner?

Ich bin verbindenden Android-Gerät auf iOS mit BluetoothLeScanner auf Android-Seite. Es funktioniert alles perfekt für die erste Zeit.

Die Sache ist die, dass, nachdem ich eine Verbindung zu einem der gefundenen iOS-Geräten, die ich beenden Sie den scan (stopScan(scanCallback)), um Energie zu sparen.

Wenn später zuvor verbundenen Gerät aus irgendeinem Grund die Verbindung trennt, habe ich wieder den scan starten wieder... aber es scheint nach dem "Neustart" scan funktioniert nicht mehr - es tut nicht entdecken noch mehr Geräte... nicht sicher, warum, aber ich bin gezwungen, die app starten.

Irgendwelche Ideen, wie man dieses Problem beheben?

Ich bin auch mit ScanFilter zum filtern von Geräten mittels UUID und verwenden ScanSettings.SCAN_MODE_BALANCED für scan-Modus.

Hier ist der code:

private void startScanner() {
    BluetoothManager bluetoothManager = (BluetoothManager) activity.getSystemService(activity.BLUETOOTH_SERVICE);
    BluetoothAdapter adapter = bluetoothManager.getAdapter();
    scanner = adapter.getBluetoothLeScanner();
    ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_BALANCED).build();
    scanner.startScan(scanFilters(), settings, scanCallback);
    System.out.println("Scanner started");
}

private List<ScanFilter> scanFilters() {
    ScanFilter filter = new ScanFilter.Builder().setServiceUuid(THE_BT_UUID).build();
    List<ScanFilter> list = new ArrayList<ScanFilter>(1);
    list.add(filter);
    return list;
}



private final ScanCallback scanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        BluetoothDevice device = result.getDevice();
        if (device != null) {
            callback.foundRemoteDevice(BluetoothCentral.this, device);
        }
    }
}


public void connectToDevice(BluetoothDevice device) {
    if (gatt == null) {
        gatt = device.connectGatt(activity, false, gattCallback);
        scanner.stopScan(scanCallback);
    }
}


private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        System.out.println("onConnectionStateChange; status: " + status + ", state: " + newState);

        switch (newState) {
            case BluetoothProfile.STATE_CONNECTED:
                System.out.println("STATE_CONNECTED");
                if (!startedServiceDiscovery) {
                    gatt.discoverServices();
                    startedServiceDiscovery = true;
                }
                break;
            case BluetoothProfile.STATE_DISCONNECTED:
                callback.didDisconnectFromDevice(BluetoothCentral.this, gatt.getDevice());
                gatt = null;
                startScanner();
                break;
            default:
                System.out.println("STATE_OTHER");
        }

    }
}

Beachten Sie, dass ich aufhören scanner direkt nach connectGatt Anruf und starten Sie es erneut, wenn ich BluetoothProfile.STATE_DISCONNECTED Rückruf.

  • Zeigen Sie Ihren code für das stoppen und starten der scan, was Android-Gerät Sie gerade arbeiten!!
  • Hi @AndroidGeek, fügte ich code auf meine Frage. Das Gerät ich arbeite, ist eigentlich Sony SmartWatch 3. Jede Hilfe würde geschätzt werden.
  • Code scheint ok zu mir haben Sie versuchen, hinzufügen von Protokollen in onScanResult Methode. um zu überprüfen, ob Gerät wird immer erkannt, aber etwas anderes nicht. Eine weitere Sache, die ich sehe, wenn ich den Scanvorgang neu zu starten, es braucht Zeit, um das Gerät erkannt, beim Vergleich von Erster scan.
  • Danke das eigentlich alles funktioniert 🙂 ... ich hatte einen Fehler in der Zeile "gatt = null;" ... problem war, dass ich die Einstellung lokale variable auf null nicht von der Instanz einer... nachdem ich geändert, diese Zeile zu "BluetoothCentral.diese.gatt = null;" die Dinge funktionieren. Danke für den log Tipp, ich entfernt, dass man vor einiger Zeit, weil es wurde wieder so viele Ergebnisse.
  • Das ist Schön:) es passiert. Auch ich war über um Ihnen zu sagen, dass Ihr code Stil falsch ist, brauchen Sie nicht zu überprüfen, ob es null war oder nicht? Richtig!!!!
InformationsquelleAutor Matej Ukmar | 2015-03-06
Schreibe einen Kommentar