![]() |
Prüfen, ob Bluetooth aktiviert ist
Hallo zusammen,
ich möchte bei einer App für Android und iOS prüfen, ob der Bluetooth-Adapter (bzw. eigentlich BluetoothLE) aktiviert ist. Bisher habe ich nur auf Android getestet, zu iOS bin ich noch nicht vorgedrungen. Hier mein Problem auf Android: Warum brauche ich die Prüfung? Prüfe ich nicht selbst sondern versuche einfach bei deaktiviertem Bt-Adapter z.B. einen Scan zu starten, meldet sich zwar das Betriebssystem und fragt, ob ich Bt nun aktivieren möchte. Die App friert dabei jedoch ein und muss abgeschossen und neu gestartet werden. Ich habe 2 Dinge bei Embarcadero gefunden, die beide dasselbe beschreiben: ![]() und ![]() Sieht ja einfach aus, also umgesetzt:
Code:
Leider bekomme ich mit diesem Verfahren ein "Segmentation Fault(11)". Tolle "Lösung"... oder mache ich was falsch?
function TFormX.BluetoothEnabled:boolean;
begin //FUNKTIONIERT NICHT: //prüfen, ob Bt aktiviert ist: case BLEDev.GetCurrentAdapter.State of TBluetoothAdapterState.Off: result:=false; TBluetoothAdapterState.On: result:=true; TBluetoothAdapterState.Discovering: result:=true; end; end; Ich habe soeben auch noch diese Variante probiert:
Code:
Hier bekomme ich schon bei der Zuweisung "BT_Adapter:=..." albernerweise die Debugger-Exception "Bluetooth-Gerät nicht gefunden: nicht verbunden oder ausgeschaltet". Immerhin, kein Absturz an dieser Stelle sondern eine nutzbare Exception. Und während ich noch tippe, finde ich so schon selber eine funktionierende Lösung:
function TFormMiB2.BluetoothEnabled2:boolean;
var BT_Adapter: TBluetoothAdapter; begin //FUNKTIONIERT NICHT: BT_Adapter := TBluetoothManager.Current.CurrentAdapter; if BT_Adapter.State = TBluetoothAdapterState.Off then result:=false else result:=true; end;
Code:
Diese Lösung funktioniert unter Android und Windows 10.
function TFormX.BluetoothEnabled:boolean;
var BT_Adapter: TBluetoothAdapter; begin result:=true; try BT_Adapter := TBluetoothManager.Current.CurrentAdapter; except on e:EBluetoothAdapterException do begin result:=false; end; on exc:Exception do begin result:=false; end; end; if result then begin case BT_Adapter.State of TBluetoothAdapterState.Off: result:=false; TBluetoothAdapterState.On: result:=true; TBluetoothAdapterState.Discovering: result:=true; end; end; end; Dann fehlt jetzt nur noch eine Bestätigung dieser Lösung oder eine andere Lösung für iOS. Ich werde hier die Ergebnisse ergänzen, wenn ich soweit bin. Ich weiß allerdings nicht, wann ich das testen werde. Es könnte etwas dauern. Hat vielleicht schon jemand eine Lösung für iOS oder eine elegantere Lösung für Android/Windows? Danke schon vorab! |
AW: Prüfen, ob Bluetooth aktiviert ist
|
AW: Prüfen, ob Bluetooth aktiviert ist
Hallo Rollo,
vielen Dank! Vor allem der erste Link ist sehr interessant. Es geht allerdings um den ConnectionState, dazu müssten wir doch schon einen Schritt weiter sein, vermute ich. Ich experimentiere mal damit. Ich habe gerade gesehen, da schreibt der erste Mensch "XE8 already have a function for this in the BT manager". Dann sollte es die bei Tokyo ja auch geben. Meint er da meine bisherigen Versuche? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz