蓝牙连接失败“java.io.IOException:读取失败,套接字可能关闭或
发布时间:2020-12-14 05:10:55 所属栏目:Java 来源:网络整理
导读:我正在尝试通过安装在Nexus 5中的应用程序连接设备.我想在 android中制作一个像 rainbow contacts的应用程序.在我的应用程序中,我的目标是通过蓝牙连接到另一个设备,并传送一组联系人或文件. 我跟着 this question,但提到的解决办法对我来说没有办法 Here是
我正在尝试通过安装在Nexus 5中的应用程序连接设备.我想在
android中制作一个像
rainbow contacts的应用程序.在我的应用程序中,我的目标是通过蓝牙连接到另一个设备,并传送一组联系人或文件.
我跟着 this question,但提到的解决办法对我来说没有办法 Here是我的完整代码. 这是我的应用程序的代码段,我试图获取套接字并进行连接. 我能够通过配对设备对话框,但是当我尝试配对时,会出现错误 //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(),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. 那么我做错了什么?任何帮助将不胜感激 解决方法
在BluetoothConnector.java的构造函数中,会传递一个uuidCandidates列表.
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")); } } 你是否通过了null? 如果是,则尝试为要连接的蓝牙设备调用device.fetchUuidsWithSdp(),并在接收器中接收BluetoothDevice.ACTION_UUID意图.因为这将获取设备支持的uuids列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 【SpringBoot】15. Spring Boot核心注解
- java – 使用Kotlin的Hibernate:@ManyToOne(fetch = Fetch
- 深入分析JAVA Vector和Stack的具体用法
- Spring oxm入门实例
- java – Hibernate – 不能在where子句中使用UserType执行查
- java – 当我遍历List时,哪种方法最有效?
- java 8u31插件导致签名的小程序加载慢得多
- java – 为什么HotSpots编译日志时间与ManagementFactory.g
- Spring getServletContext方法:取ServletContext上下文
- java – 如何编写一个接受int变量并返回最大值的方法?