首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XE7识别蓝牙断开

XE7识别蓝牙断开
EN

Stack Overflow用户
提问于 2015-02-26 17:10:32
回答 1查看 907关注 0票数 1

在安卓上使用Delphi XE7,我通过蓝牙经典SPP设备连接。

我有一台JBluetoothSocket

代码语言:javascript
复制
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流,因为套接字出现故障。因此,我想在连接失败后立即重新连接。

我试着跟随,但它不起作用:

代码语言:javascript
复制
if Sock.isConnected then
begin
  TryReconnect;
end;

我们还发现,phone CAT B15总是返回Sock.isConnected = False,即使连接了,因为这个函数似乎没有在他们的BT堆栈中实现……

我听说我可能需要捕获广播ACL_DISCONNECTED,但我没有找到一个解决方案,这是如何在火猴。

EN

回答 1

Stack Overflow用户

发布于 2015-02-27 21:03:26

解决方案:https://code.google.com/p/delphi-android-broadcast-receiver-component/

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28738308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档