Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services (https://www.delphipraxis.net/201976-tbluetoothle-discoverservices-erkennt-unter-android-manchmal-keine-services.html)

philipp.hofmann 15. Sep 2019 17:49

TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Hi,

ich habe das Problem, dass
TBluetoothLE.DiscoverServices()
bei einem verbundenen Geräte keine Services erkennt. Ich kann die Suche auch wiederholen, das hilft leider nicht. Es scheint mir bisher nur unter Android ein Problem zu sein. Hat da jemand eine Idee?

Grüße, Philipp

TurboMagic 15. Sep 2019 19:07

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Welche Delphi version? 10.3.0, 10.3.1 oder 10.3.2?
Welches Android?
Finden ggf. andere Apps die BLE können diesen Dienst?
Werden andere BLE Dienste von der Komponente gefunden?

philipp.hofmann 15. Sep 2019 21:27

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Delphi 10.3.2, sowohl bei einem Samsung S4-Tab (Android 9.0, dort aber selten) als auch bei einem Amazon Fire HD 10 (basiert auf Android 5.1, dort passiert es häufiger).
Ich habe es jetzt auch mal mit dem BLE-Scanner-Projekt ausprobiert, um meine Fehler auszuschließen.

Dort kommt er in folgendem Aufruf für DiscoverServices mit false zurück und das deutlich schneller als die in der Android-BLE-Implementierung definierten 15 Sekunden:
TThread.CreateAnonymousThread(procedure begin
if not BluetoothLE1.DiscoveredDevices[ListBox1.ItemIndex].DiscoverServices then
TThread.Synchronize(nil, procedure begin
Listbox2.Items.Add('- Discover services not allow');
Listbox1.Enabled := True;
end);
end).Start;

Mal passiert es, mal nicht, jetzt bin ich gerade wieder im Modus, es funktioniert auf beiden Devices.
Ich kann keine Gesetzmässigkeit nach dem Motto Android-Device neu gestartet oder BLE-Device neu gestartet erkennen.
Sobald er es einmal geschafft hat, geht es auch reproduzierbar.

Ich habe jetzt mal log-Ausgaben dazugepackt, auch in die Android BLE-Implementierung (System.Android.Bluetooth.pas) um vielleicht besser zu verstehen, was da schief geht. Noch habe ich nicht so richtig die Idee, v.a. weil es nicht reproduzierbar ist, aber so oft schief geht, dass es dem Enduser nicht zumutbar ist.

knaeuel 16. Sep 2019 11:21

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Möglicherweise ist das noch dasselbe Problem, wie mit 10.2 vor etwa einem Jahr. Für mich hats damals funktioniert, wenn ich einfach nur die BLE-Komponente einmal disabled hab.

in etwa so:
- BLE ist unsere TBluetoothLE-Komponente
Code:
BLE.enabled:=true
Geräte_suchen
if Gerät_gefunden then
begin
  Services_suchen
  if services_nicht_gefunden then
  begin
    BLE.Enabled:=false;
    und nochmal von vorn
  end
end
else
begin
  BLE.enabled:=false;
  und nochmal von vorn
end
vielleicht hilfts ja immer noch

philipp.hofmann 16. Sep 2019 18:16

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Danke, hört sich einfach an, probiere ich aus und poste dann das Ergebnis.

knaeuel 26. Sep 2019 14:42

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Problem gelöst?

TurboMagic 27. Sep 2019 19:42

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Ich glaube nicht, aber ist es in QP erfasst?
(sorry, habe nicht den ganzen Thread nochmal nach dieser Info abgesucht)
Falls noch nicht erfasst umgehend erfassen!
Lt. Roadmap soll ja im in Entwicklung befindlichen 10.3.3 das AppThethering
verbessert werden, evtl. könnten in dem Rahmen auch andere Fioxes zu BLE einfließen?

philipp.hofmann 28. Okt 2019 10:49

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Hi,

Ich habe einen anderen Workaround für das Problem gefunden.
Zwischen
res:=bleDevice.Connect();
und
res:=bleDevice.DiscoverServices();
muss für Android bei langsamen Tablets (oder Tablets mit Android <6.0, kann den echten Grund nicht wirklich benennen) ein
Sleep(1000)
eingetragen werden und dann findet er auch stabil Services. Es reicht auch nicht aus, nach einer Pause ein zweites DiscoverServices nachzuschießen, es musste bei mir zwingend vor dem ersten sein, damit es funktioniert. Mit dem Workaround kann ich gut leben.

Grüße, Philipp

TurboMagic 28. Okt 2019 21:35

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Wurde das Problem schon in QP erfasst? Falls nein bitte tun und falls ja den Workaround von heute als Kommentar oder als Textänderung hinzufügen, damit wir das in Zukunft mal "out of the box" gefixed bekommen.

AuronTLG 21. Jan 2020 08:37

AW: TBluetoothLE: DiscoverServices() erkennt unter Android manchmal keine Services
 
Zitat:

Wie ich weiter oben schon schrieb, damit schlage ich mich auch manchmal rum. Eine Besserung hat mein Workaround aus
https://www.delphipraxis.net/201976-...-services.html
gebracht. Du kannst ja mal ausprobieren, ob es auch bei dir hilft.
Basierend auf diesem Thread mache ich mal hier weiter:

Ich habe das Ganze mal so ausprobiert, wie hier beschrieben mit einem Connect -> Sleep(1000) -> DiscoverServices, hat aber leider nicht geholfen.
Das Problem ist bei mir auch anders:

Es ist nicht so, dass das DiscoverServices nichts findet, sondern dass es direkt false zurückliefert.
Auf meinem S10 mit Android 10 schlägt das DiscoverServices jedes Mal auf diese Weise fehl in meiner App. Die Demo "BLEScanner" findet die Services jedoch jedesmal, obwohl der Code praktisch 1 zu 1 identisch ist.

Nachtrag:

Ich hab das Demoprojekt "BLEScanner" nahtlos als Form in meine App eingefügt, woraufhin damit haargenau dasselbe Problem auftritt. Es muss also irgendwas mit der App sein, was das Problem verursacht...

Nachtrag 2:

Demoprojekt "BLEScanner" mit 10.3.3 und brandneuer SDK kompiliert funktioniert ebenfalls nicht mehr mit dem S10. Mit dem S9+ weiterhin problemlos. Was ein Schwachsinn...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz