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;