Wie zu erkennen, wenn ein BLE-Gerät nicht in Reichweite ist, nicht mehr?

Verwende ich eine LeScanCallback (kann nicht mit der neueren scan-Methoden, weil ich die Entwicklung für die api-18. Nicht, dass es darauf ankommt, da das android-5.0+ - apis bieten nicht diese Funktionalität entweder) zu erkennen, wenn eine in der Nähe BLE-Gerät erkannt wird:

private BluetoothAdapter.LeScanCallback bleCallback = new BluetoothAdapter.LeScanCallback() {

    @Override
    public void onLeScan(BluetoothDevice bluetoothDevice, int i, byte[] bytes) {
        discoveredDevices.add(bluetoothDevice);
    }
};

Ich bin nicht koppeln oder verbinden mit den Geräten, denn das ist nicht nötig, ich will einfach sehen, welche Geräte in der Nähe.

Ich versuche zu machen, ein Dienst, der alle 5 Minuten oder so, nennt einen webserver zu aktualisieren, welche Geräte in der Nähe in diesem moment.

Schwierige Teil ist, dass das android-Gerät bewegt, so dass ein bluetooth-Gerät in der Nähe ist, gerade jetzt, vielleicht nicht in 5 Minuten. In diesem Fall, die ich brauche, um es zu entfernen aus discoveredDevices.

Im Idealfall würde ich mag, um zu erhalten einen Rückruf, wenn ein bluetooth-Gerät in Reichweite vor, aber nicht mehr. Dieser Rückruf nicht vorhanden obwohl.

(Ich bin mir bewusst, dass der android.bluetooth.device.action.ACL_CONNECTED und android.bluetooth.device.action.ACL_DISCONNECTED Sendungen, aber diese sind wenn Sie die Verbindung zu einem bluetooth-Gerät, das ich nicht will.)

Option ist zu tun, einen frischen scan alle 5 Minuten, aber man kann nicht sagen, wenn alle Geräte in der Nähe entdeckt worden, so würden Sie zu tun haben, die eine zeitgesteuerte scan, z.B. scan für 5 Sekunden und dann schicken die gesammelten Daten an den webservice.

Das klingt schmutzig und riskant, weil man kann ja nie wissen, für sicher, dass alle Geräte in der Nähe entdeckt wurden, innerhalb der vorgegebenen Zeit, so würde ich sehr gerne vermeiden, tun Sie es so.

Gibt es einen anderen Weg, dies zu tun?


Bearbeiten

Einige Geräte ständig berichten die Entdeckung der nahe gelegenen bluetooth-Geräten, sogar dann, wenn Sie bereits entdeckt werden, bevor. Wenn diese Funktionalität wurde von universal konnte ich mein problem lösen, aber dieser ist gerätespezifisch.

Mein Handy den bluetooth-adapter zum Beispiel nur entdeckt Geräte in der Nähe einmal. Einige andere Geräte, die ich getestet habe, mit tun berichten kontinuierlich die gleichen Geräte in der Nähe, aber nicht alle Geräte haben, so kann ich nicht auf das verlassen, leider.

  • Nie-scan auf einer Schleife, und eine Frist setzen, auf Ihren scan. Ein Gerät, das zuvor verfügbar war, haben möglicherweise bewegt sich außerhalb des Bereichs aus-und Weiterbildung zu Scannen, entlädt sich der Akku.Der Benutzer muss manuell eine Verbindung herstellen...
  • Ich bin mir nicht sicher, ob ich verstehe, was du redest. Ich nicht Scannen möchte, mit einer Frist, so Frage ich nach anderen Möglichkeiten
  • ich hatte das entwickelt, was Sie benötigen, nicht die saubere Art und Weise vielleicht, aber nicht finden bessere Optionen. Es kann getan werden, wenn du ein paar scans und die entsprechenden Geräte-Listen, wenn man bedenkt, wenn Gerät 'a' liegt in der Nähe der ersten und zweiten scans, legen Sie es in die endgültige Liste wird an den server gesendet, verwerfen diejenigen, die nicht auf den Listen der beiden scans
  • das heißt, wenn Sie benötigen, senden Sie die Daten an server alle 5 Minuten, kann es 2 scans in 5 Minuten und eine Letzte Liste für die gängigen Geräte von den beiden, auf diese Weise können sehr präzise
  • Ich sehe nicht den Vorteil der Verwendung einer zweiten Liste. Wie auch immer, das erfordert noch einen scan mit einem festen Zeit-limit, no?
  • ja, Sie benötigen 2 scans zu erkennen, wenn ein ble-Gerät in Reichweite ist oder nicht, denn wenn das Gerät 'nicht in Reichweite' ist, dann gibt es keine Möglichkeit zu kommunizieren, wie auch immer... so Ironie in Kreisen mit nur einem scan
  • ich Verstand nicht, Ihre Bearbeitung, in der Frage, was ist der Sinn des Geräte melden sich in der Nähe von Geräten, die einmal oder ständig ? glaube nicht, dass reporting -einmalig oder fortlaufend - ohne Scannen...
  • Ich bin nicht der Kommunikation mit den Geräten, nur die Berichterstattung über die Anwesenheit von Ihnen. Was Sie tun, mit 2 scans kann getan werden, mit 1 scan, indem Sie einfach das löschen der Liste der Geräte in der Nähe nach jedem scan. Was ich meine "Berichterstattung" ist der Rückruf feuern, wenn ein Gerät geprüft wurde.
  • ok, ich spreche für die Berichterstattung über die Geräte, die in der Nähe sind für eine gewisse Zeit.., dass wenn man mit 1-scan ist nur das senden der device list auf dem server, mit 2 scans in der gleichen Dauer, wenn Sie ein paar Geräte außer Reichweite gebracht wird, brauchen Sie nicht einbezogen werden in das, was an den server gesendet wird..das ist ein Weg zu finden, Geräte nicht in Reichweite ist - von der mobilen Ende.. sonst kann der server herausfinden, durch den Vergleich von Daten, die es erhält

Schreibe einen Kommentar