`
试问天下
  • 浏览: 15296 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Android蓝牙

 
阅读更多
用Android 开发一个应用,其中想使用蓝牙来做数据交换。

先查了一下资料,感觉还算简单,于是就开始了一整天的痛苦历程。



基本上用discover之类的能够很快的发现对方的蓝牙设备,但是在

建立socket的时候,就出了一堆问题。刚开始,服务端用



adapter.listenUsingRfcommWithServiceRecord



加上某个UUID来监听,同时获得serverSocket,客户端用



serverDevice.createRfcommSocketToServiceRecord



来获取socket,然后就在 socket.connect的时候,出了很多

奇怪的错误。



最开始是 Service discovery failed ,

然后是 connection refused,

然后是  File descriptor in bad state



总之搜索了一下,确实千奇百怪的错误都有。后来看到有人用




Method m = serverDevice.getClass().getMethod( "createRfcommSocket", new Class[]{int.class});

BluetoothSocket socket = (BluetoothSocket) m.invoke( serverDevice, Integer.valueOf( 1));



据说能解决,尝试了一下,也是有时成功有时失败,极不稳定。


再后来,仔细考虑了一下,其实 createRfcommSocket 这个方法,指定连接的是 1号端口,
而服务端则还是用UUID来启动服务,至于其绑定了哪个端口,其实是不可知的。
最开始客户端用 createRfcommSocketToServiceRecord 这个方法,其实是利用UUID去找到
相应的服务,只不过不知道是不是我的UUID的问题,导致它找不到,所以报 service discovery failed这个错。
而直接用反射的方法去访问 1号端口,如果凑巧服务端也是在1号端口监听,那就没问题。如果不是,
并且没有服务在监听,就会报connection refused这个错。如果有别的服务在监听,然后又不理解
我的这个协议,就会报 File descriptor in bad state  这个错。


想明白了,解决起来也就容易。办法是在启动服务的时候,也用反射


Method listenMethod = btClass.getMethod("listenUsingRfcommOn", new Class[]{int.class});
BluetoothServerSocket returnValue = ( BluetoothServerSocket) listenMethod.invoke(btAdapter, new Object[]{ 29});


我在服务器和客户端都用29端口,然后就稳定下来了。
花了一整天的时间,真是无语。
分享到:
评论

相关推荐

    Android 蓝牙开发,蓝牙连打印机

    首先,理解Android蓝牙API是基础。Android提供了BluetoothAdapter类,它是系统蓝牙服务的主要接口,用于查找、配对和管理蓝牙设备。开发者需要通过BluetoothAdapter.getDefaultAdapter()获取系统的默认蓝牙适配器,...

    Android蓝牙广播通信

    Android提供了一个名为BluetoothAdapter的类,它是Android蓝牙功能的主要入口点。通过这个类,我们可以检查蓝牙是否开启,扫描附近的蓝牙设备,并建立连接。当我们要监听蓝牙设备的状态变化时,就需要用到广播通信。...

    android 蓝牙SPP传输demo

    本示例是一个Android蓝牙SPP传输的Demo,它展示了如何在Android应用中实现与蓝牙设备的数据交换。以下是关于这个主题的详细知识: 1. **蓝牙SPP介绍**: - SPP是蓝牙核心规格的一部分,模仿了串口通信,使得不同...

    Android蓝牙连接设备demo

    "Android蓝牙连接设备demo"是一个示例项目,它演示了如何使用Android SDK来实现BLE 4.0及更高版本的蓝牙设备连接和通信功能。下面我们将深入探讨这个demo涉及的关键知识点。 1. **BLE 4.0与Android支持**:BLE 4.0...

    android蓝牙聊天源代码

    "android蓝牙聊天源代码"项目提供了一个很好的实例,帮助开发者了解如何在Android应用程序中实现蓝牙聊天功能。以下将详细介绍这个项目的相关知识点: 1. **Android Bluetooth API**: Android提供了`...

    Android蓝牙开发客户端代码

    首先,我们需要理解蓝牙技术的基本概念,然后我们将详细讨论Android蓝牙开发客户端的实现步骤。 蓝牙是一种短距离无线通信技术,允许电子设备之间进行数据交换。在Android中,蓝牙功能主要通过`BluetoothAdapter`、...

    Android蓝牙打印支持图片和文字打印

    首先,我们要理解Android蓝牙打印的基本原理。Android系统提供了一个名为`BluetoothAdapter`的类,用于处理蓝牙连接和通信。通过这个类,我们可以发现可用的蓝牙设备,建立与打印机的连接,并发送数据。要启用蓝牙...

    Android蓝牙设备之间通过UUID通信

    通过分析和运行这些代码,可以更直观地理解Android蓝牙通信的工作原理。 需要注意的是,由于蓝牙通信涉及到权限问题,记得在AndroidManifest.xml中添加`<uses-permission android:name="android.permission....

    android蓝牙封装代码

    android蓝牙封装代码

    Android蓝牙,配对,搜索,连接,通信,断开的Demo

    本项目"Android蓝牙,配对,搜索,连接,通信,断开的Demo"是一个使用Kotlin编写的Android应用示例,它涵盖了蓝牙功能的基本操作,包括设备的搜索、配对、取消配对、连接、数据传输以及断开连接等核心环节。...

    android蓝牙间传输demo

    "android蓝牙间传输demo"是一个示例项目,它展示了如何在Android设备之间通过蓝牙进行数据交换。这个项目的重点在于理解和实现Android Bluetooth API,这将涵盖蓝牙的配对、连接、数据发送与接收等关键步骤。 首先...

    android蓝牙开发步骤.pdf

    Android 蓝牙开发步骤详解 Android 蓝牙开发步骤是一个复杂的过程,它涉及到硬件、Linux 内核、库、框架和应用程序等多个方面。在本文中,我们将详细介绍 Android 蓝牙开发的步骤,从硬件到应用程序的所有方面。 ...

    Android 蓝牙BLE全面解析以及智能车锁开发实例

    Android 蓝牙BLE全面解析以及智能车锁开发实例一、蓝牙BLE产生背景——蓝牙的发展历程 二、蓝牙BLE的基本概念 三、蓝牙BLE的架构介绍 1. 蓝牙BLE架构概览 2. 简述BLE如何发送数据包 2.1 广播方式 2.2 连接方式 四、...

    安卓wifi蓝牙相关-android蓝牙hid协议开发实现手机连接蓝牙鼠标键盘扫描枪.rar

    本文将深入探讨Android蓝牙HID协议开发的相关知识点,并提供实现手机连接蓝牙外设的基础步骤。 首先,理解蓝牙HID协议至关重要。蓝牙HID是Bluetooth SIG(蓝牙特别兴趣小组)定义的一种标准,主要用于无线连接输入...

    android 蓝牙数据传输DEMO

    通过理解并实践这个DEMO,开发者可以掌握Android蓝牙通信的基本流程,为进一步开发蓝牙应用打下坚实的基础。需要注意的是,实际应用中可能需要根据设备特性、蓝牙版本和用户需求进行优化和扩展。

    android蓝牙通信(分为客户端,服务端)

    在Android平台上进行蓝牙通信是一项常见的...总的来说,构建Android蓝牙通信系统涉及多个步骤,包括设备发现、连接建立、数据传输和错误处理。通过客户端和服务端的协同工作,可以在Android设备间实现可靠的蓝牙通信。

    Android蓝牙开发(搜索,配对,连接,数据互传)

    以下是对"Android蓝牙开发(搜索,配对,连接,数据互传)"这个主题的详细解析。 首先,我们需要理解Android蓝牙的基础知识。Android系统支持蓝牙2.1以上的版本,包括经典蓝牙(Bluetooth Classic)和低功耗蓝牙...

    Android 蓝牙串口调试助手源码(保证正确)

    通过阅读和理解这个项目中的源码,开发者可以深入学习Android蓝牙通信的实现,并将其应用于自己的物联网项目中。对于希望扩展或定制蓝牙功能的Android开发者来说,这是一个宝贵的资源。同时,通过`README.md`文件,...

    Android 蓝牙map协议连接流程图(上层),将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更

    Android 蓝牙map协议连接流程图(上层),将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更清楚数据收发走向,代码流程更加形象生动,能够很快的熟悉Android 蓝牙源码,利于后面问题处理和BUG解决

    Android蓝牙开发,实现发送信息,接收消息demo

    首先,我们需要理解Android蓝牙的基础知识。Android系统支持蓝牙低功耗(Bluetooth Low Energy, BLE)和经典蓝牙(Bluetooth Classic),但这里主要讨论的是经典蓝牙,因为它是用于设备间双向通信的传统方式。 1. **...

Global site tag (gtag.js) - Google Analytics