createRfcommSocket的反射问题

时间:2011-10-13 13:44:58

标签: java android reflection bluetooth

这很奇怪。我正在尝试在Droid X And​​roid 2.3.4上设置蓝牙SPP。我尝试打开一个rfcomm Socket包含了一些不同的方法,一个是反射(需要支持某些手机)

然而,随着Droid X的发生,一件奇怪的事情发生了。当我第一次连接到蓝牙设备时,我的应用程序会打开并首先尝试SPP:

Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
mmSocket = (BluetoothSocket) m.invoke(mmDevice, Integer.valueOf(1));

如果找不到方法,则尝试正常

mmSocket = mmDevice.createRfcommSocketToServiceRecord(SerialPortServiceClass_UUID);

这是第一次正常工作。但是如果我关闭我的程序,然后由于某种原因重新打开它,然后反射方法实际上找到了方法,尝试连接没有任何错误,但它实际上没有连接。

如果我关闭应用程序,请重新启动手机上的蓝牙适配器并再次尝试它将正常工作。

我对所发生的事情感到茫然,所以任何帮助都会受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我想出了一个我不满意的绑带式修复,但是一直工作直到找到根本原因或更好的解决方案。我只是创建一个共享首选项对象,其中包含要尝试的方法的“级别”。

级别标记为1-4,如果级别设置为数字< =当前级别,则如果尚未建立连接,则将尝试该方法。

if(level<=1){
success set level = 1
fail set level = 0
}

if(level<=2){
success set level = 2
fail set level = 0
}

...


if(level<=4){
success set level = 4
fail set level = 0
}