AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob Bluetooth aktiviert ist

Ein Thema von knaeuel · begonnen am 29. Jun 2018 · letzter Beitrag vom 29. Jun 2018
Antwort Antwort
knaeuel

Registriert seit: 2. Jul 2007
110 Beiträge
 
Delphi 10.3 Rio
 
#1

Prüfen, ob Bluetooth aktiviert ist

  Alt 29. Jun 2018, 11:28
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:
https://community.embarcadero.com/an...-in-delphi-xe7
und
https://community.embarcadero.com/an...one-or-android

Sieht ja einfach aus, also umgesetzt:
Code:
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;
Leider bekomme ich mit diesem Verfahren ein "Segmentation Fault(11)". Tolle "Lösung"... oder mache ich was falsch?

Ich habe soeben auch noch diese Variante probiert:
Code:
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;
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:
Code:
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;
Diese Lösung funktioniert unter Android und Windows 10.

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!
Wolfgang
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.898 Beiträge
 
Delphi 12 Athens
 
#2

AW: Prüfen, ob Bluetooth aktiviert ist

  Alt 29. Jun 2018, 12:07
Hilft dir das ?
https://community.embarcadero.com/an...enable-adapter
http://docwiki.embarcadero.com/Libra...onnectionState

Rolf
  Mit Zitat antworten Zitat
knaeuel

Registriert seit: 2. Jul 2007
110 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Prüfen, ob Bluetooth aktiviert ist

  Alt 29. Jun 2018, 12:19
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?
Wolfgang

Geändert von knaeuel (29. Jun 2018 um 12:26 Uhr) Grund: Ergänzung
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr.
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