我正在尝试使用我的设备控制免提链接。以下工作正常:
UUID HFP_UUID_GET_HF = UUID.fromString("0000111E-0000-1000-8000-00805F9B34FB");
BluetoothSocket aBluetoothSocket = mDevice
.createRfcommSocketToServiceRecord(HFP_UUID_GET_HF);
我得到了一个可以阅读的插座。没问题。但是,我也想监听传入连接并获取该套接字。我试过这个:
UUID HFP_UUID = UUID.fromString("0000111F-0000-1000-8000-00805F9B34FB");
UUID HFP_UUID_GET_HF = UUID.fromString("0000111E-0000-1000-8000-00805F9B34FB");
BluetoothServerSocket tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("HFP", HFP_UUID);
BluetoothSocket aBluetoothSocket = tmp.accept();
然而,即使两个设备连接,我也永远不会得到套接字。顺便说一句,如果我在这第二个代码块中使用以111E开头的UUID,我得到一个服务发现错误,这是有道理的 - 我知道我的设备正在使用uuid 111F而另一个设备使用UUID 111E。
之前有没有人遇到过这个问题?我需要能够完全控制从该rfcomm频道上的电话发送的所有数据。我不能用反射;即。
Class<?>[] args = new Class[] { int.class };
int HFP_CHANNEL = 10;
Method listenOn = BluetoothAdapter.class.getDeclaredMethod("listenUsingRfcommOn", args);
BluetoothServerSocket my_server = (BluetoothServerSocket) (listenOn.invoke(mBluetoothAdapter,
new Object[] { HFP_CHANNEL }));
BluetoothSocket m_BluetoothSocket = my_server.accept();
因为这也会引发io错误 - 已经在使用的频道,除非有人知道关闭免提系统服务的方法。 Afaik是bluetoothd的一部分(我m using Android 4.1 here) and I need that to remain running (I
我不确定我是否可以关闭它)