Ich benutze einen LeScanCallback (kann nicht die neueren Scan-Methoden verwenden, weil ich für api 18 entwickle. Nicht dass es wichtig ist, da die Android 5.0+ Apis diese Funktionalität auch nicht bieten) um zu erkennen, wenn ein nahegelegenes BLE-Gerät ist festgestellt:Wie erkennt man, wenn ein BLE-Gerät nicht mehr in Reichweite ist?
private BluetoothAdapter.LeScanCallback bleCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(BluetoothDevice bluetoothDevice, int i, byte[] bytes) {
discoveredDevices.add(bluetoothDevice);
}
};
mir nicht Paarung oder mit den Geräten verbinden, weil das nicht erforderlich ist, ich will einfach sehen, welche Geräte in der Nähe sind.
Ich versuche, einen Dienst zu machen, der alle 5 Minuten einen Webserver aufruft, um zu aktualisieren, welche Geräte gerade in der Nähe sind.
Tricky Teil ist, dass das Android-Gerät wird sich bewegen, so dass ein Bluetooth-Gerät, das in der Nähe ist jetzt, möglicherweise nicht in 5 Minuten sein. In diesem Fall muss ich es aus discoveredDevices
entfernen.
Im Idealfall möchte ich einen Rückruf erhalten, wenn ein Bluetooth-Gerät in Reichweite war, aber nicht mehr. Dieser Rückruf existiert jedoch nicht.
(ich bin mir bewusst, die android.bluetooth.device.action.ACL_CONNECTED
und android.bluetooth.device.action.ACL_DISCONNECTED
Sendungen, aber die sind für, wenn Sie zu einem Bluetooth-Gerät anschließen, das will ich nicht.)
Eine Option ist eine neue Scan zu tun alle 5 Minuten, aber Sie können nicht feststellen, wenn alle in der Nähe befindlichen Geräte entdeckt wurden, so dass Sie einen zeitgesteuerten Scan, z Scannen Sie für 5 Sekunden und senden Sie die gesammelten Daten an den Webservice.
Das klingt dreckig und riskant, weil man nie sicher sein kann, dass alle Geräte in der Nähe innerhalb der vorgegebenen Zeit entdeckt wurden, also würde ich es gerne vermeiden, es so zu tun.
Gibt es eine andere Möglichkeit, dies zu tun?
bearbeiten
Einige Geräte kontinuierlich Entdeckung in der Nähe Bluetooth-Geräte melden, auch wenn sie bereits vor entdeckt wurden. Wenn diese Funktionalität universell wäre, könnte ich mein Problem lösen, dies ist jedoch gerätespezifisch.
Der Bluetooth-Adapter meines Telefons findet zum Beispiel nur in der Nähe befindliche Geräte. Einige andere Geräte, mit denen ich getestet habe, melden ständig dieselben Geräte in der Nähe, aber nicht alle Geräte, daher kann ich mich leider nicht darauf verlassen.
Scannen Sie nie in einer Schleife, und legen Sie ein Zeitlimit für Ihren Scan fest. Ein Gerät, das zuvor verfügbar war, kann sich außerhalb des zulässigen Bereichs befinden, und das Scannen wird fortgesetzt. Der Benutzer muss sich manuell verbinden ... –
@GopiKrishna Ich bin mir nicht sicher, ob ich verstehe, wovon Sie sprechen.Ich möchte nicht mit einem Zeitlimit scannen, also frage ich nach anderen Optionen –
Ich hatte entwickelt, was Sie benötigen, nicht die sauberste Art vielleicht, aber nicht bessere Möglichkeiten finden. Es kann durchgeführt werden, wenn Sie Scans und entsprechende Gerätelisten paaren und berücksichtigen, ob das Gerät "a" in der Nähe des ersten und zweiten Scans ist. Fügen Sie es in die endgültige Liste ein, die an den Server gesendet wird von beiden Scans – user2450263