createRfcommSocketToServiceRecord有效,但listenUsingRfcommWithServiceRecord没有

时间:2014-02-04 17:08:52

标签: android bluetooth

我正在尝试使用我的设备控制免提链接。以下工作正常:

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我不确定我是否可以关闭它)

0 个答案:

没有答案