2017-11-28 5 views
0

Für die spezifische Anwendung muss ich das Android-Bluetooth-Scannen der LE-Geräte halten, aber ich finde, dass es sich selbst ohne Anmeldung in einigen Geräten stoppt. Mein Beispielcode ist wie folgt:Halten Sie das Android Bluetooth-Scannen, aber es stoppt selbst

mBluetoothLeScanner.startScan(null, mScanSettings, leScanCallback); 

Ich bin sicher, ich rufe nie

mBluetoothLeScanner.stopScan(leScanCallback) 

Damit versuche ich die „btsnoop_hci.log“ zu schauen. Ich finde, dass der Controller die Broadcast-Nachricht nicht an den Host in einer Zeitperiode gesendet hat, vielleicht 5 Minuten oder 10 Minuten mehr. In diesem Beispiel stoppt es bei 864,833537 Sekunden. Hat mir jemand geholfen, dieses Problem zu lösen?

+0

Ich finde, dass, wenn ich die Wi-Fi ganz ausschalten, und es scheint, auf Bluetooth-Scan zu funktionieren. Hat jemand schon mal mit dem BLE-Scannen und WLAN experimentiert? Wie kann ich verhindern, dass der BLE-Scan ohne Benachrichtigung abgebrochen wird? –

Antwort

0

Android 7.0 führte eine BLE-Scan-Zeitüberschreitung ein, bei der jeder Scan, der 30 Minuten oder länger ausgeführt wird, automatisch gestoppt wird und nur "opportunistisch" fortgesetzt wird, dh wenn ein anderer Prozess einen Scan durchführt, kann er auch die Ergebnisse liefern.

Sie können dies sehen, indem Sie Code einrichten, um einen Bluetooth LE-Scan zu starten und ihn unbegrenzt laufen zu lassen. Nach genau 30 Minuten, wird der Scanvorgang anhalten, und Sie werden in LogCat Einträge wie diese:

06-11 19:00:22.848 5123 5147 D BtGatt.ScanManager: clientIf set to scan opportunisticly: 6 
06-11 19:00:22.848 5123 5147 D BtGatt.ScanManager: configureRegularScanParams() - queue=1 
06-11 19:00:22.848 5123 5147 D BtGatt.ScanManager: configureRegularScanParams() - ScanSetting Scan mode=-1 mLastConfiguredScanSetting=2 
06-11 19:00:22.848 5123 5147 D BtGatt.ScanManager: configureRegularScanParams() - queue emtpy, scan stopped 06-11 19:00:22.849 5123 5147 D BtGatt.ScanManager: stop scan 

Sie den Code sehen können, dass dies in der AOSP Quelle hier tut:

Source code

Ein Workaround dafür ist, Scans nicht so lange laufen zu lassen. Sie können sie einfach anhalten und regelmäßig neu starten.

EDITED:

Check on this link

+0

Danke für Ihre Antwort. Ich kenne diese Einschränkung in Android 7.0. Aber ich finde dieses Problem in Android 6.0 Gerät. Und es stoppt in 5 Minuten oder 10 Minuten, so dass ich versuche, den Grund von btsnoop_hci.log herauszufinden. –

+0

Finde meine bearbeitete Antwort. –

+0

Ich dachte, es wäre die Lösung vor, so dass ich auch den gleichen Weg implementieren (Stop und Neustart alle 1 Minute. Es funktioniert immer noch nach einigen Minuten (ps. Keine Broadcast-Nachricht in der btsnoop_hci.log). Das ist das seltsamste Ding. –

Verwandte Themen