蓝牙连接失败“java.io.IOException:读取失败,套接字可能关闭或超时,读取 ret:-1" [英] Bluetooth Connection failed "java.io.IOException: read failed, socket might closed or timeout, read ret: -1"
问题描述
我正在尝试通过安装在 Nexus 5 中的应用程序连接设备.我想制作一个类似 彩虹联系人在安卓中.在我的应用程序中,我的目标是通过蓝牙连接到另一台设备并传输一组联系人或文件.我关注了这个问题,但是那里提到的解决方法对我不起作用这里是我的完整代码.这是我尝试获取套接字并建立连接的应用程序中的代码片段.
I am trying to connect devices through my app installed in Nexus 5.I want to make an app like rainbow contacts in android. In my app I aim to connect to another device through Bluetooth and transfer set of contacts or files. I followed this question, but the workaround mentioned there is not working for me Here is my full code. This is the code snippet from my application where I have tried to get the socket and make connections.
我能够通过配对设备对话框,但是当我尝试配对时出现错误
//to create socket
if (secure) {
bluetoothSocket = device.createRfcommSocketToServiceRecord(uuid);
} else {
bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
}
//connection establishment
try {
bluetoothSocket.connect();
success = true;
break;
} catch (IOException e) {
//try the fallback
try {
Class<?> clazz = tmp.getRemoteDevice().getClass();
Class<?>[] paramTypes = new Class<?>[] {Integer.TYPE};
Method m = clazz.getMethod("createRfcommSocket", paramTypes);
Object[] params = new Object[] {Integer.valueOf(1)};
bluetoothSocket = (BluetoothSocket) m.invoke(tmp.getRemoteDevice(), params);
Thread.sleep(500);
bluetoothSocket.connect();
success = true;
break;
} catch (FallbackException e1) {
Log.w("BT", "Could not initialize FallbackBluetoothSocket classes.", e);
} catch (InterruptedException e1) {
Log.w("BT", e1.getMessage(), e1);
} catch (IOException e1) {
Log.w("BT", "Fallback failed. Cancelling.", e1);
}
}
我收到的错误
09-06 13:44:57.247 27860-27860/com.example.gauravdubey.myapplication I/BT﹕ Attempting to connect to Protocol: 00001101-0000-1000-8000-00805f9b34fb
09-06 13:44:57.247 27860-27860/com.example.gauravdubey.myapplication W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback
09-06 13:44:57.247 27860-27860/com.example.gauravdubey.myapplication D/BluetoothSocket﹕ connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[56]}
09-06 13:44:58.667 27860-27860/com.example.gauravdubey.myapplication W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback
09-06 13:44:58.667 27860-27860/com.example.gauravdubey.myapplication D/BluetoothSocket﹕ connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[59]}
09-06 13:45:03.267 27860-27860/com.example.gauravdubey.myapplication W/BT﹕ Fallback failed. Cancelling.
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:505)
at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:482)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:324)
at com.example.gauravdubey.myapplication.BluetoothConnector$FallbackBluetoothSocket.connect(BluetoothConnector.java:198)
at com.example.gauravdubey.myapplication.BluetoothConnector.connect(BluetoothConnector.java:62)
at com.example.gauravdubey.myapplication.ConnectThread.run(ConnectThread.java:101)
at com.example.gauravdubey.myapplication.MainActivity$1.onItemClick(MainActivity.java:288)
at android.widget.AdapterView.performItemClick(AdapterView.java:299)
at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2911)
at android.widget.AbsListView$3.run(AbsListView.java:3645)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
09-06 13:45:03.267 27860-27860/com.example.gauravdubey.myapplication V/connectThread﹕ Could not connect to device: B0:D0:9C:8B:A4:47
09-06 13:45:03.267 27860-27860/com.example.gauravdubey.myapplication I/Choreographer﹕ Skipped 361 frames! The application may be doing too much work on its main thread.
那我做错了什么?任何帮助将不胜感激
So what i am doing wrong ? any help would be appreciated
推荐答案
在BluetoothConnector.java的构造函数中,传入了一个uuidCandidates列表.
In the constructor of BluetoothConnector.java, a list of uuidCandidates is passed.
public BluetoothConnector(BluetoothDevice device, boolean secure, BluetoothAdapter adapter,
List<UUID> uuidCandidates)
{
this.device = device;
this.secure = secure;
this.adapter = adapter;
this.uuidCandidates = uuidCandidates;
if (this.uuidCandidates == null || this.uuidCandidates.isEmpty()) {
this.uuidCandidates = new ArrayList<UUID>();
this.uuidCandidates.add(UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66"));
}
}
你把它传给空了吗?
如果是,则尝试为您要连接的蓝牙设备调用 device.fetchUuidsWithSdp()
并在接收器中接收 BluetoothDevice.ACTION_UUID
意图.因为这将获取设备支持的 uuid 列表.
If yes,then try calling device.fetchUuidsWithSdp()
for the Bluetooth device you want to connect and receive BluetoothDevice.ACTION_UUID
intent in your receiver.As this will fetch a list of uuids supported for the device.
这篇关于蓝牙连接失败“java.io.IOException:读取失败,套接字可能关闭或超时,读取 ret:-1"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!