我通过
注册了服务BluetoothServerSocket bs = BluetoothAdapter.getDefaultAdapter().listenUsingInsecureRfcommWithServiceRecord("someName" , UUID.fromString(myUuid) );
我的问题是,是否有任何编程方式来确定此服务正在使用哪个频道?
============================另一种解决方案================= =======
:
感谢您的anserw @ Skaard-Solo,但如果我使用反射创建套接字,那么我无法为此提供uuid。
我做了一些研究,并编写了一些可以从BluetoothServerSocket获取通道的简单功能。
public int getChannel(BluetoothServerSocket bsSocket){
Field[] f = bsSocket.getClass().getDeclaredFields();
int channel = -1;
for (Field field : f) {
if(field.getName().equals("mChannel")){
field.setAccessible(true);
try {
channel = field.getInt(bsSocket);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
field.setAccessible(false);
}
}
return channel;
}
答案 0 :(得分:1)
否(AFAIK),这可能是一个问题。 Android选择在套接字打开期间免费的频道。
如果你真的需要知道频道,你可以通过反射创建一个rfcomm套接字,并将频道作为参数传递(一种黑客,listenUsingRfcommOn
在Android中是@hide):
BluetoothServerSocket tmp = null;
Method m;
m = mAdapter.getClass().getMethod("listenUsingRfcommOn", new Class[] { int.class });
tmp = (BluetoothServerSocket) m.invoke(mAdapter, BLUETOOTH_CHANNEL);
Check also this link,处理此问题;)