这很奇怪。我正在尝试在Droid X Android 2.3.4上设置蓝牙SPP。我在尝试打开rfcomm套接字时包含了一些不同的方法,其中一个是反射(需要支持某些电话)
然而,在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-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
}