您好我正在尝试创建一个Android应用程序,它将连接到我想要发送数据的蓝色SMiRF蓝牙适配器。我已阅读开发人员页面并查看了多个不同的示例,但我目前在创建与套接字的连接时遇到问题。代码的蓝牙部分几乎是我能够找到的一个例子。当尝试连接到蓝牙适配器时,应用程序会关闭,因为有一些错误我无法正确处理。然而,我也尝试使用该应用程序只是为了连接到另一台PC,并且由于某种原因连接不会被正确建立,即使我在运行应用程序之前已经通过蓝牙设置与设备配对。我已经在下面发布了一些比较重要的代码,我认为我的问题可能就在哪里。任何帮助将非常感谢,如果我发布任何其他代码,请告诉我。
protected void connect(BluetoothDevice device) {
//BluetoothSocket socket = null;
try {
//Create a Socket connection: need the server's UUID number of registered
socket = device.createRfcommSocketToServiceRecord(UUID.fromString("a60f35f0-b93a-11de-8a39-08002009c666"));
socket.connect();
Log.d("EF-BTBee", ">>Client connectted");
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
outputStream.write(new byte[] { (byte) 0xa0, 0, 7, 16, 0, 4, 0 });
new Thread() {
public void run() {
while(true)
{
try {
Log.d("EF-BTBee", ">>Send data thread!");
OutputStream outputStream = socket.getOutputStream();
outputStream.write(new byte[] { (byte) 0xa2, 0, 7, 16, 0, 4, 0 });
} catch (IOException e) {
Log.e("EF-BTBee", "", e);
}
}
};
}.start();
} catch (IOException e) {
Log.e("EF-BTBee", "", e);
} finally {
if (socket != null) {
try {
Log.d("EF-BTBee", ">>Client Close");
socket.close();
finish();
return ;
} catch (IOException e) {
Log.e("EF-BTBee", "", e);
}
}
}
}`
我也尝试过使用
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
socket = (BluetoothSocket) m.invoke(device, 1);
而不仅仅是上面的“socket =”行,但仍然没有成功。
答案 0 :(得分:2)
如果设备已配对,则可以使用
if(device.getBondState()==device.BOND_BONDED){
Log.d(TAG,device.getName());
//BluetoothSocket mSocket=null;
try {
mSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e1) {
// TODO Auto-generated catch block
Log.d(TAG,"socket not created");
e1.printStackTrace();
}
try{
mSocket.connect();
}
catch(IOException e){
try {
mSocket.close();
Log.d(TAG,"Cannot connect");
} catch (IOException e1) {
Log.d(TAG,"Socket not closed");
e1.printStackTrace();
}
}
用于MY_UUID使用
private static final UUID MY_UUID = UUID.fromString("0000110E-0000-1000-8000-00805F9B34FB");
答案 1 :(得分:1)
终于找到了解决方法。不知道为什么必须这样做才能正常工作。
IOException: read failed, socket might closed - Bluetooth on Android 4.3
答案 2 :(得分:0)
假设(检查!)你正在使用的UUID确实是服务器UUID,你最好的 赌注是尝试不安全的蓝牙通信模式。有些设备简单 不支持安全模式。
要复制您的流,请替换createRfcommSocketToServiceRecord 使用createInsecureRfcommSocketToServiceRecord和“createRfcommSocket” “createInsecureRfcommSocket”。
或者更好的是:使用BTWiz封装此流程。 BTWiz还为蓝牙IO提供了一个简单的异步API。
最后 - 套接字创建&绝不能在UI线程上执行connect()离子。您的 代码在这里没有结论,但我怀疑你也需要解决这个问题。
Gilad Haimov
www.mobileedge.co.il