在安卓上使用Delphi XE7,我通过蓝牙经典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;我们还发现,phone CAT B15总是返回Sock.isConnected = False,即使连接了,因为这个函数似乎没有在他们的BT堆栈中实现……
我听说我可能需要捕获广播ACL_DISCONNECTED,但我没有找到一个解决方案,这是如何在火猴。
发布于 2015-02-27 21:03:26
解决方案: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;https://stackoverflow.com/questions/28738308
复制相似问题