【淘号系统源码】【源码精灵大佬】【漫画源码plist】android源码蓝牙

来源:命令模式源码分析

1.Android开发之蓝牙(Bluetooth)
2.android bluedroid是源牙淘号系统源码什么设备
3.如何使用android原生BLE蓝牙进行操作?
4.Android 蓝牙开发(一)
5.Android蓝牙开发——实现蓝牙聊天
6.Android 蓝牙开发(三)-蓝牙的详细介绍

android源码蓝牙

Android开发之蓝牙(Bluetooth)

        在上一篇中有介绍了Wifi与网络连接处理

        Android开发之WiFi与网络连接处理

下面,来继续说说Android中蓝牙的基本使用。

        Bluetooth是目前使用的最广泛的无线通讯协议之一,主要针对短距离设备通讯(米),常用于连接耳机、鼠标和移动通讯设备等。

        值得一提的是:

        android4.2新增了部分新功能,但是对于Bluetooth熟悉的人或许开始头疼了,那就是Android4.2引入了一个新的蓝牙协议栈针BLE。谷歌和Broadcom之间的合作,开发新的蓝牙协议栈,取代了基于堆栈的Bluez。因此市场上出现了老设备的兼容问题,很多蓝牙设备在android4.2手机上不能正常使用。

        BluetoothAdapter简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象。

        first:we need permission

        要操作蓝牙,先要在AndroidManifest.xml里加入权限

        **下面来看看如何使用蓝牙。 **↓↓↓

****

        Demo已就绪:

        返回值:如果设备具备蓝牙功能,返回BluetoothAdapter 实例;否则,返回null对象。

        打开蓝牙设备的方式:

        1.直接调用函数enable()去打开蓝牙设备 ;

        2.系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。

        注意:1.如果蓝牙已经开启,不会弹出该Activity界面。2.在目前大多数Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关 ,状态会随着飞行模式的状态而发生改变。

        1. 搜索蓝牙设备

        使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备

        startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进行对其他蓝牙设备的搜索,该过程会持续秒。该方法调用后,搜索过程实际上是在一个System Service中进行的,所以可以调用cancelDiscovery()方法来停止搜索(该方法可以在未执行discovery请求时调用)。

        系统开始搜索蓝牙设备

        ^( * ï¿£(oo)ï¿£ ) ^ 系统会发送以下三个广播:

        2.扫描设备

        3.定义广播接收器接收搜索结果

        4.注册广播

        获取附近的蓝牙设备

        第一步建立连接:首先Android sdk(2.0以上版本)支持的蓝牙连接是通过BluetoothSocket建立连接,服务端BluetoothServerSocket和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接。

        (这里的服务端和客户端是相对来说的)

        两个蓝牙设备之间的连接,则必须实现服务端与客户端的机制。

        当两个设备在同一个RFCOMM channel下分别拥有一个连接的BluetoothSocket,这两个设备才可以说是建立了连接。

        服务端设备与客户端设备获取BluetoothSocket的途径是不同的。

        1,服务端设备是通过accepted一个incoming connection来获取的,

        2,客户端设备则是通过打开一个到服务端的RFCOMM channel来获取的。

        服务端

        通过调用BluetoothAdapter的listenUsingRfcommWithServiceRecord(String, UUID)方法来获取BluetoothServerSocket(UUID用于客户端与服务端之间的配对)

        客户端

        调用BluetoothService的createRfcommSocketToServiceRecord(UUID)方法获取BluetoothSocket(该UUID应该同于服务端的UUID)。

        调用BluetoothSocket的connect()方法(该方法为block方法),如果UUID同服务端的UUID匹配,并且连接被服务端accept,则connect()方法返回。

        数据传递,通过以上操作,就已经建立的BluetoothSocket连接了,数据传递无非是通过流的形式

        获取流

        该类就是关于远程蓝牙设备的一个描述。通过它可以和本地蓝牙设备---BluetoothAdapter连接通信。

        好多东西我也不知道怎么描述,下面给出Demo:

        刚好有刚学习的小伙伴问我ListView怎么用,那我就用ListView。

        源码:

        RairDemo

        GitHub: /Rairmmd/android-demo

        Coding: /s?__biz=MzU5NzA2NjQzMg==&mid=&idx=1&sn=9db9adfbbcc&scene=#wechat_redirect

Android蓝牙开发——实现蓝牙聊天

        与蓝牙开发主要的相关类是以下四个

        知道对应API后就可以进行对应的蓝牙开发,这里以获取蓝牙设备为例子

        }

        搜索设备的回调则需要通过注册广播的形式来获取

        定义广播

        之后就可以进行个人的一些操作

        要实现蓝牙聊天则涉及到蓝牙之间的传输通信,前面也说到了,这里肯定就是用到BluetoothServerSocket以及BluetoothSocket。

        蓝牙传输通信相当于服务器端与客户端之间的通信,只不过不同是这里每一个蓝牙设备本身自己既充当服务器端也充当客户端,大致的关系就是

        注意,这些连接都是阻塞式的,都要放在线程里去执行。

        可以看到,当BluetoothServerSocket监听到有设备连接的时候,就会调用dataTransfer开启一个数据传输。

        需要一个ConnectThread来发起

        之后建立连接之后就会调用dataTransfer来进行数据传输,同样也需要一个线程来维护数据传输

        蓝牙聊天则是基于上面三个线程来进行实现,同样,对于蓝牙文件间的传输也是同个道理,通过输入输出流来进行处理。之后的操作就比较容易处理了

        蓝牙聊天

        Android 蓝牙开发基本流程

Android 蓝牙开发(三)-蓝牙的详细介绍

        前面的两篇文章,主要是在 Android 官网关于蓝牙介绍的基础上加上自己的理解完成的。主要针对的是 Android 开发中的一些 API 的使用。

        第一篇文章 Android 蓝牙开发(一) 主要是介绍了普通的蓝牙在 Android 开发中的运用。

        第二篇文章 Android 蓝牙开发(二) 主要是介绍了低功耗蓝牙的开发。

        这篇文章主要介绍的是蓝牙的历史和一些关于蓝牙的通用知识,还有广播包的知识。要想彻底了解蓝牙开发,这些基础的知识也是需要的,就像网络协议一样,这些都是基础的内容。我们的 API 的调用都是以这个为基础的,了解这些,开发过程中遇到问题,才可以知道什么怎么一回事。

        下篇文章主要讲的就是实际开发中的一些坑。

        蓝牙其实就是一种近距离无线通信技术。

        从下到上分别为:控制器(Controller)-->主机(host)-->应用(Application)

        详细介绍各个层的含义:

        BLE 应用可以分为两大类:基于非连接的和基于连接的

        意思就是外设和周边设备不发生连接,主要靠扫描到的广播来获取信息。发送广播的一方叫做 broadcaster 监听广播的一方叫做 oberver 在 GAP 层有对应的角色定义。

        网络拓扑图:

        这种方式就是广播设备不断的向外发送广播(含有特定的信息),然后观察者接受到广播按照两者之间约定好的协议进行解析拿到有用的信息。例如:iBeacon,通过这种设备我们可以实现室内定位。

        其实这些设备的角色可以即使广播者又是观察者。接收到广播后作出了处理,然后又发送广播。这样就形成了双向的网络,类似于因特网,这就是蓝牙 Mesh 组网。

        广播数据包格式:

        每个广播数据包由 byte 组成。分为有效数据和无效数据两部分。

        例子:

        这里是扫描的数据包(转换成了 进制,两个代表一个字节),第一个字节是 表示后面的两个字节是数据部分,然后第二个字节是 表示了数据的类型。后面一个字节就是真正的数据了。这个广播数据单元就分析完了。下面就是另一个数据单元了。依次类推,关于数据类型的解释,官网有。

        这是数据类型对应的含义表。

        网络拓扑图:

        一个中心设备可连接多个外设,但是一个外设只能连接一个中心(外设连接成功后就会停止对外广播,别人就发现不了它了)。其中一个中心设备的连接外设的数量也是有限的。

        链接: /s?__biz=MzU5NzA2NjQzMg==&mid=&idx=1&sn=fd7ebceafeb4cf&scene=#wechat_redirect

文章所属分类:休闲频道,点击进入>>