XE7 распознает отключение Bluetooth

С помощью Delphi XE7 на Android я подключаюсь через Bluetooth Classic SPP-устройство.

у меня есть JBluetoothSocket

var
  Sock: JBluetoothSocket;
  uid: JUUID; // UUID for SPP traffic
  targetMAC: string; // remote MAC address of the selected
  remoteDevice: JBluetoothDevice;
  Adapter: JBluetoothAdapter; // Local BLUETOOTH adapter
begin
  Adapter := TJBluetoothAdapter.JavaClass.getDefaultAdapter;
  targetMAC := ....;
  remoteDevice := Adapter.getRemoteDevice(stringtojstring(targetMAC));
  uid := TJUUID.JavaClass.fromString(stringtojstring('00001101-0000-1000-8000-00805F9B34FB'));
  Sock := remoteDevice.createInsecureRfcommSocketToServiceRecord(uid);
end;

Как только устройство BlueTooth будет перезапущено, JBluetoothSocket Поток больше не может быть прочитан, потому что сокет не удалось. Поэтому я хочу восстановить соединение, как только соединение не удалось.

Я попытался следовать, но это не работает:

if Sock.isConnected then
begin
  TryReconnect;
end;

Также выяснилось, что телефон CAT B15 всегда возвращается Sock.isConnected = False, даже если подключен, так как эта функция, кажется, не реализована в их стеке BT...

Я слышал, что мне, вероятно, нужно поймать трансляцию ACL_DISCONNECTED, но я не нахожу решение, как это сделать в Firemonkey.

1 ответ

Решение: https://code.google.com/p/delphi-android-broadcast-receiver-component/

procedure TMeasurementForm.OnBroadcastReceive(Context: JContext; Intent: JIntent);
begin
  // TODO: Check which event it is? (ACL_DISCONNECTED)
  Close;
end;

var
   bcr: TBroadcastReceiver;-
begin
  bcr := TBroadcastReceiver.Create(Self);
  bcr.RegisterReceive;
  bcr.Add('android.bluetooth.device.action.ACL_DISCONNECTED'); // constant android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECTED
  bcr.OnReceive := OnBroadcastReceive;
end;
Другие вопросы по тегам