
如果打算建议两个蓝牙设备之间的连接,则必须实现服务器端与客户端的机制。当两个设备在同一个RFCOMM channel下分别拥有一个连接的BluetoothSocket,这两个设备才可以说是建立了连接。
服务器设备与客户端设备获取BluetoothSocket的途径是不同的。服务器设备是通过accepted一个incoming connection来获取的,而客户端设备则是通过打开一个到服务器的RFCOMMchannel来获取的。
通过调用BluetoothAdapter的listenUsingRfcommWithServiceRecord(String, UUID) 方法来获取
BluetoothServerSocket(UUID用于客户端与服务器端之间的配对)调用BluetoothServerSocket的 accept() 方法监听连接请求,如果收到请求,则返回一个BluetoothSocket实例。
如果不想在accept其他的连接,则调用BluetoothServerSocket的 close() 方法释放资源(调用该方法后,之前获得的BluetoothSocket实例并没有close。但由于RFCOMM一个时刻只允许在一条channel中有一个连接,则一般在accept一个连接后,便close掉BluetoothServerSocket)
通过搜索得到服务器端的BluetoothService,调用BluetoothService的listenUsingRfcommWithServiceRecord(String, UUID)方法获取BluetoothSocket(该UUID应该同于服务器端的UUID)。
调用BluetoothSocket的 connect() 方法(该方法为block方法),如果UUID同服务器端的UUID匹配,并且连接被服务器端accept,则 connect() 方法返回。
在上一篇中有介绍了Wifi与网络连接处理
Android开发之WiFi与网络连接处理
下面,来继续说说Android中蓝牙的基本使用。
Bluetooth是目前使用的最广泛的无线通讯协议之一,主要针对短距离设备通讯(10米),常用于连接耳机、鼠标和移动通讯设备等。
值得一提的是:
android42新增了部分新功能,但是对于Bluetooth熟悉的人或许开始头疼了,那就是Android42引入了一个新的蓝牙协议栈针BLE。谷歌和Broadcom之间的合作,开发新的蓝牙协议栈,取代了基于堆栈的Bluez。因此市场上出现了老设备的兼容问题,很多蓝牙设备在android42手机上不能正常使用。
BluetoothAdapter简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象。
first:we need permission
要 *** 作蓝牙,先要在AndroidManifestxml里加入权限
下面来看看如何使用蓝牙。 ↓↓↓
Demo已就绪:
返回值:如果设备具备蓝牙功能,返回BluetoothAdapter 实例;否则,返回null对象。
打开蓝牙设备的方式:
1直接调用函数enable()去打开蓝牙设备 ;
2系统API去打开蓝牙设备,该方式会d出一个对话框样式的Activity供用户选择是否打开蓝牙设备。
注意: 1如果蓝牙已经开启,不会d出该Activity界面。2在目前大多数Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关 ,状态会随着飞行模式的状态而发生改变。
1 搜索蓝牙设备
使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备
startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进行对其他蓝牙设备的搜索,该过程会持续12秒。该方法调用后,搜索过程实际上是在一个System Service中进行的,所以可以调用cancelDiscovery()方法来停止搜索(该方法可以在未执行discovery请求时调用)。
系统开始搜索蓝牙设备
^(  ̄(oo) ̄ ) ^ 系统会发送以下三个广播:
2扫描设备
3定义广播接收器接收搜索结果
4注册广播
获取附近的蓝牙设备
第一步建立连接:首先Android sdk(20以上版本)支持的蓝牙连接是通过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: >Android 蓝牙编程的基本步骤:
1获取蓝牙适配器BluetoothAdapter blueadapter=BluetoothAdaptergetDefaultAdapter();
如果BluetoothAdapter 为null,说明android手机没有蓝牙模块。
判断蓝牙模块是否开启,blueadapterisEnabled() true表示已经开启,false表示蓝牙并没启用。
2启动配置蓝牙可见模式,即进入可配对模式Intent in=new Intent(BluetoothAdapterACTION_REQUEST_DISCOVERABLE);
inputExtra(BluetoothAdapterEXTRA_DISCOVERABLE_DURATION, 200);
startActivity(in); ,200就表示200秒。
3获取蓝牙适配器中已经配对的设备Set<BluetoothDevice> device=blueadaptergetBondedDevices();
4还需要在androidManifestxml中声明蓝牙的权限
<uses-permission android:name="androidpermissionBLUETOOTH" />
<uses-permission android:name="androidpermissionBLUETOOTH_ADMIN" />
接下来就是根据自己的需求对BluetoothAdapter 的 *** 作了。
蓝牙50室内定位技术也是依托于蓝牙定位的,其定位原理就是我们熟知的蓝牙定位原理,是基于RSSI定位原理来计算的,成本和定位精度上都是要高于40/42版本的。目前,为满足日益增长的室内服务机器人、移动精准营销、应急求援等室内深层次定位需求,SKYLAB推出一系列蓝牙50室内定位产品,其中有蓝牙50模块、蓝牙50蓝牙Beacon、蓝牙50工卡及蓝牙50网关助力室内位置服务升级。
根据定位端的不同,SKYLAB蓝牙室内定位方案分为终端侧定位和网络侧定位。
蓝牙终端侧定位是由终端设备(如嵌入SDK软件包的智能手机)和蓝牙Beacon组成,在需要定位的区域内部署蓝牙Beacon,一般至少需要铺设3个蓝牙Beacon信标,定位算法要求至少知道三个点的RSSI值才能准确地计算定位。
蓝牙网络侧室内定位由蓝牙终端(如可穿戴蓝牙设备、蓝牙手环等)、蓝牙网关,无线局域网及后端数据服务器构成。在需要定位的区域内部署蓝牙网关,当手持蓝牙终端设备如蓝牙手环的用户进入蓝牙网关的蓝牙信号覆盖范围内,蓝牙网关就能感应到蓝牙手环的广播信号,然后测算出蓝牙手环的RSSI值,通过串口传输给网关内的WiFi模块,蓝牙网关再经过WiFi网络传送到后端数据服务器,通过服务器内置的定位算法测算出蓝牙手环的具体位置,后端服务器则可以通过网络把位置信息发给用户。
蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,利用"蓝牙"技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手机等移动通信终端设备之间的通信,也能够成功地简化以上这些设备与因特网Internet之间的通信,从而使这些现代通信设备与因特网之间的数据传输变得更加迅速高效,为无线通信拓宽道路。说得通俗一点,就是蓝牙技术使得现代一些轻易携带的移动通信设备和电脑设备,不必借助电缆就能联网,并且能够实现无线上因特网,其实际应用范围还可以拓展到各种家电产品、消费电子产品和汽车等信息家电,组成一个巨大的无线通信网络。 "蓝牙"技术属于一种短距离、低成本的无线连接技术,是一种能够实现语音和数据无线传输的开放性方案,蓝牙技术产品是采用低能耗无线电通信技术来实现语音、数据和视频传输的,其传输速率最高为每秒1Mb/s,以时分方式进行全双工通信,通信距离为10米左右,配置功率放大器可以使通信距离进一步增加。蓝牙产品采用的是跳频技术,能够抗信号衰落;采用快跳频和短分组技术,能够有效地减少同频干扰,提高通信的安全性;采用前向纠错编码技术,以便在远距离通信时减少随机噪声的干扰;采用24GHz的ISM (即工业、科学、医学)频段,以省去申请专用许可证的麻烦;采用FM调制方式,使设备变得更为简单可靠;"蓝牙"技术产品一个跳频频率发送一个同步分组,每组一个分组占用一个时隙,也可以增至5个时隙;"蓝牙"技术支持一个异步数据通道,或者3个并发的同步语音通道,或者一个同时传送异步数据和同步语音的通道。"蓝牙"的每一个话音通道支持 64kb/s的同步话音,异步通道支持的最大速率为721Kbps、反向应答速率为576Kbps的非对称连接,或者4326kb/s的对称连接。
蓝牙技术产品与因特网Internet之间的通信,使得家庭和办公室的设备不需要电缆也能够实现互通互联,大大提高办公和通信效率。
设备类型
由于目前市面上有的蓝牙适配器基本上为USB接口的,而且USB接口具有即插即用的特点,如果从接口来区分的话,蓝牙适配器的的类型也就一种:即蓝牙USB适配器。当然除了蓝牙USB适配器外,还有蓝牙耳机、蓝牙麦克等等。
传速速率
“蓝牙”(Bluetooth),是一种采用了全球通用的短距离无线连接技术,使用与微波相同的24GHz附近免付费、免申请的无线电频段。为避免此频段电子装置众多而造成的相互干扰,因而以一千六百次高难度跳频以及加密保密技术,传输速率在432Kbps到721Kbps不等。蓝牙规范中广为应用的成熟版本为11,带宽约1Mbps,而也有的版本达2Mbps。
总线类型
总线类型可分为ISA总线、PCI总线和USB总线。ISA总线以16位传送数据,标称速度能够达到10M。PCI总线以32位传送数据,速度较快。目前市面上大多是10M和100M的PCI总线。随着USB接口的逐渐普及,现有的蓝牙适配器基本上都为USB总线的。
USB总线即Universal Serial Bus,通用串行总线,是IBM、Intel、Microsoft、Compaq、NEC等几大世界著名厂商联合制订的一种新型串行接口,它已成为电脑与外调设备(如:键盘,磁带机,打印机,可写入光盘机等)之间标准的接口。该接口不但负载能力好,而且易用性也好,具有“即插即用”的功能,最多可串接127个外设,支持即时声音播放及影像压缩。
支持协议
支持协议主要指的是蓝牙协议层,包括逻辑链路控制和适配协议(L2CAP)、无线射频通信(RFCOMM)和业务搜索协议(SDP)。L2CAP提供分割和重组业务。RFCOMM是用于传统串行端口应用的电缆替换协议。业务搜索协议(SDP)包括一个客户/服务器架构,负责侦测或通报其它蓝牙设备。
灵敏度
在保证达到所要求的误比特率的条件下,接收所需要的最小输入功率。接收灵敏度一般用dBm来表示,它是以lmW光功率为基础的绝对功率,或写为
其中,Pmin指在给定误比特率的条件下,接收机能接收的最小平均功率。例如,在给定的误比特率为10的负9次方时,接收机能接收的最小平均功率为InW(即10的负9次方W),接收机灵敏度为-60dBm。
工作距离
蓝牙是无线网络传输技术的一种,本来就是要求在短距离内传输信号的。与红外技术相比,蓝牙无需对准就能传输数据,传输距离小于10米(红外的传输距离在几米以内)。而在信号放大器的帮助下,通讯距离甚至可达100米左右。
频谱带宽
蓝牙适配器采用了全球通用的短距离无线连接技术,使用与微波、遥控器以及有些民用无线通讯器材相同的24GHz附近免付费、免申请的无线电频段,为避免此频段电子装置众多而造成的相互干扰,因而以一千六百次高难度跳频以及加密保密技术。
*** 作系统
*** 作系统是指什么 *** 作系统支持蓝牙设备的使用,现有的WINDOWS系列的 *** 作系统均支持,当然现在的一些共享 *** 作系统如LINUX,FreeBSD,MAC等也可支持蓝牙。另外要注意微软对蓝牙技术不是很支持,所以它的一系列 *** 作系统中均没有内置蓝牙驱动。在使用之前一定要自己安装。
LED显示
LED就是light emitting diode (发光二极管)的英文缩写,简称LED。LED显示屏(LED panel)通过一定的控制方式,用于显示文字、文本、图形、图像、动画、行情等各种信息以及电视、录像信号。LED显示就是指在蓝牙产品中有无LED显示屏。
蓝牙适配器
蓝牙(Bluetooth)是无线网络传输技术的一种,原本是用来取代红外的。与红外技术相比,蓝牙无需对准就能传输数据,传输距离小于10米(红外的传输距离在几米以内)。而在信号放大器的帮助下,通讯距离甚至可达100米左右()。蓝牙技术非常适合耗电量低的数码设备相互分享数据,如手机、掌上电脑等。而且,蓝牙设备之间还能传送声音,如蓝牙耳机。蓝牙规范中广为应用的成熟版本为11,带宽约1Mbps(USB11接口的带宽为12Mbps,USB20接口的带宽为480Mbps,局域网带宽为10Mbps/100Mbps/1000Mbps,火线IEEE1394带宽为400Mbps。所以说,蓝牙非常适合于传送小文件(10MB以下的、铃声、电子书、文稿等等),方便与速度兼得。蓝牙规范的最新版本为12。
。
蓝牙适配器就是为了各种数码产品能适用蓝牙设备的接口转换器
不同的蓝牙适配器参数以下附件:
1按芯片分类
芯片类型 芯片数量 产地 优点/缺点
CSR 单集成芯片 英国 成本较低, 会存在一定兼容性问题
ISSC 双芯片内置 台湾 成本教高,存在市场较早,参数较为稳定
2按地址码分类
地址码 类型 产地 优点/缺点
⑴全球唯一 BQTF(Bluetooth Qualification Test Facility) 日本,认证由 TELEC 实施,美国由FCC实施 全球唯一对应通信编码,在同一环境使用同一产品时,两者不会因通信协议码相同而产生冲突
⑵复制地址码 BQTF(Bluetooth Qualification Test Facility) 日本,认证由 TELEC 实施,美国由FCC实施 该编码也是通过认证,但为多个设备使用一个编码 在同一环境使用同一产品时,两者会因通信协议码相同而产生冲突
另:现在市场上宣称100M距离的,基本都没有最多也就30-40(实际距离),所以买蓝牙适配器也不要贪图距离远,因为毕竟对于有传输速度要求的也不会要蓝牙啦!~~~
等等!~还有:
就是蓝牙适配器的天线,有分印刷天线和陶瓷电容天线(问:哪个好)踢!~~当然陶瓷的好啦,印刷的除了成本低,通讯质量没保障!~~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)