蓝牙开发《基础篇一》

最近项目中使用到蓝牙打印机,通过蓝牙连接蓝牙打印机进行打印功能。在此对蓝牙知识进行归纳输出一波,达到巩固之效果。

正文内容

  • 蓝牙的基本介绍
  • 蓝牙开发API的基本使用

什么是蓝牙?

也可以说是蓝牙技术。所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的。

蓝牙版本的介绍

蓝牙发展至今经历了8个版本的更新。1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2、5.0。当然5.0的蓝牙模块目前Google虽已发布,但是市场上还未见到5.0的蓝牙设备。那么我们就尽请期待5.0蓝牙设备的到来!

蓝牙有几种?

Android的蓝牙分为经典蓝牙低功耗蓝牙(Bluetooth Low Energy 缩写BLE)。那么在1.x~3.0之间的我们称之为传统蓝牙,4.x开始的蓝牙我们称之为低功耗蓝牙也就是蓝牙BLE,当然4.x版本的蓝牙也是向下兼容的。android手机必须系统版本4.3及以上才支持BLE API。

经典蓝牙和低功耗蓝牙两者之间有很大的区别

  • 经典蓝牙:顾名思义就是旧版的蓝牙,是Android4.2(API17)版本及以下所使用的蓝牙。

  • 低功耗蓝牙:也称BLE,是Android4.3(API18)版本及以上所使用的蓝牙,据说相对于经典蓝牙有许多的优势,Google为其提供了新的API。

什么时候选择使用经典蓝牙还是使用BLE蓝牙

  • BLE蓝牙:使用频率低、低功耗、输入数据量少、传输速度快等。
  • 经典蓝牙:传输大量数据、不考虑功耗、速度、耗电等。

现在主流是4.0BLE蓝牙

  • 蓝牙低功耗是使用频率低,传输少量数据的。所以功耗低,不适合传大量数据。但是有双模式,即普通模式* 和低功耗模式。普通模式和以前蓝牙(传统蓝牙)一样,可以快速传输较大数据,功耗大。
  • 低功耗蓝牙比传统蓝牙,传输速度更快,覆盖范围更广,安全性更高,延迟更短,耗电极低等等优点。
  • 传统的一般通过socket方式,而低功耗蓝牙是通过Gatt协议来实现。

使用蓝牙API,安卓程序能:

  • 扫描其他蓝牙设备

  • 为可配对蓝牙设备查询蓝牙适配器。

  • 建立RFCOMM通道

  • 通过服务搜索来连接其他设备。

  • 与其他设备进行数据传输。

  • 管理多个连接。

用蓝牙开发的目的?

蓝牙开发的目的并不是为了建立两个设备的配对。我们的重点应该放在两个设备的连接上,因为连接的过程可以看作两个设备通信的过程,建立了通信我们才可以传输数据。

怎样使用蓝牙API完成建立蓝牙连接?

一、建立蓝牙主要有四个步骤

  1. 打开蓝牙。

  2. 查找附近已配对或可用的设备。

  3. 连接设备。

  4. 设备间数据交换。

二、配对和连接是一回事?

配对是指两个设备之间首次建立连接后,系统会自动向用户显示的配对请求,当配对成功后,会自动存储已经配对的设备的信息。

连接就是使用设备存储的MAC地址,即客户端用向存储的MAC地址发起建立 RFCOMM通道的询问,服务端同意后两者的连接就建立起来了。而且利用远程设备的已知MAC地址可以随时向其发起连接(如果在范围内的话),而无需执行发现操作。所以我们可以得到这几个结论:

  • 配对了不一定连接着。

  • 连接一定要知道对方的蓝牙的MAC地址。

  • 配对只是第一次连接系统为确认安全所做的准备,因此大多数情况下只有一次。

三、所有蓝牙API都在android.bluetooth 包下。下面有一些类和接口的摘要,可能需要它们来建立蓝牙连接:

  • BluetoothAdapter

    代表本地蓝牙适配器(蓝牙无线电)。BluetoothAdapter是所有蓝牙交互的入口。使用这个你可以发现其他蓝牙设备,查询已配对的设备列表,使用一个已知的MAC地址来实例化一个BluetoothDevice,以及创建一个BluetoothServerSocket来为监听与其他设备的通信。

常用的方法有以下几个

    cancelDiscovery() 根据字面意思,是取消发现,也就是说当我们正在搜索设备的时候调用这个方法将不再继续搜索
    disable()关闭蓝牙
    enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户:
    Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enabler,reCode);//同startActivity(enabler);
    getAddress()获取本地蓝牙地址
    getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter
    getName()获取本地蓝牙名称
    getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备
    getState()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)
    isDiscovering()判断当前是否正在查找设备,是返回true
    isEnabled()判断蓝牙是否打开,已打开返回true,否则,返回false
    listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步
    startDiscovery()开始搜索,这是搜索的第一步
  • BluetoothDevice

    代表一个远程蓝牙设备,使用这个来请求一个与远程设备的BluetoothSocket连接,或者查询关于设备名称、地址、类和连接状态等设备信息。

createRfcommSocketToServiceRecord(UUIDuuid)根据UUID创建并返回一个BluetoothSocket。
getState() 蓝牙状态这里要说一下,只有在 BluetoothAdapter.STATE_ON 状态下才可以监听,具体可以看andrid api。
createRfcommSocketToServiceRecord方法也是我们获取BluetoothDevice的目的——创建BluetoothSocket。
这个类其他的方法,如getAddress(),getName(),同BluetoothAdapter
  • BluetoothSocket

    代表一个蓝牙socket的接口(和TCP Socket类似)。这是一个连接点,它允许一个应用与其他蓝牙设备通过InputStream和OutputStream交换数据。

跟BluetoothServerSocket相对,是客户端一共5个方法,不出意外,都会用到:

close(),关闭  
connect()连接 
 getInptuStream()获取输入流  
getOutputStream()获取输出流  
getRemoteDevice()获取远程设备,这里指的是获取bluetoothSocket指定连接的那个远程蓝牙设备
  • BluetoothServerSocket

    代表一个开放的服务器socket,它监听接受的请求(与TCP ServerSocket类似)。为了连接两台Android设备,一个设备必须使用这个类开启一个服务器socket。当一个远程蓝牙设备开始一个和该设备的连接请求,BluetoothServerSocket将会返回一个已连接的BluetoothSocket,接受该连接。

  • BluetoothClass

    描述一个蓝牙设备的基本特性和性能。这是一个只读的属性集合,它定义了设备的主要和次要的设备类以及它的服务。但是,它没有描述所有的蓝牙配置和设备支持的服务,它只是暗示了设备的类型。

  • BluetoothProfile

    一个表示蓝牙配置文件的接口。一个Bluetooth profile是一个基于蓝牙的通信无线接口定义。一个例子是Hands-Free profile。更多的讨论请见Working with Profiles。

  • BluetoothHeadset

    提供对移动手机使用的蓝牙耳机的支持。它包含了Headset and Hands-Free (v1.5)配置文件。

  • BluetoothA2dp

    定义高品质的音频如何通过蓝牙连接从一个设备传输到另一个设备。”A2DP“是Advanced Audio Distribution Profile的缩写。

  • BluetoothHealth

    表示一个Health Device Profile代理,它控制蓝牙服务。

  • BluetoothHealthCallback

    一个抽象类,你可以使用它来实现BluetoothHealth的回调函数。你必须扩展这个类并实现回调函数方法来接收应用程序的注册状态改变以及蓝牙串口状态的更新。

  • BluetoothHealthAppConfiguration

    表示一个应用程序配置,Bluetooth Health第三方应用程序注册和一个远程Bluetooth Health设备通信。

  • BluetoothProfile.ServiceListener

    一个接口,当BluetoothProfile IPC客户端从服务器上建立连接或断开连接时,它负责通知它们(也就是,运行在特性配置的内部服务)。

四、蓝牙所需要的权限

  • 为了在你的应用中使用蓝牙特性,你需要至少声明一种蓝牙权限:BLUETOOTH 和BLUETOOTH_ADMIN。
  • 为了执行任何蓝牙通信,例如请求一个连接、接受一个连接以及传输数据,你必须请求BLUETOOTH 权限。
  • 为了初始化设备查找或控制蓝牙设置,你必须请求BLUETOOTH_ADMIN权限。大多数应用需要这个权限,仅仅是为了可以发现本地蓝牙设备。这个权限授权的其他功能不应该被使用,除非该应用是一个“强大的控制器”,来通过用户请求修改蓝牙设置。注意:如果你使用BLUETOOTH_ADMIN权限,那么必须拥有BLUETOOTH权限。

在你的应用程序清单文件中声明蓝牙权限。例如:

<manifest ... >
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permissionandroid:name="android.permission.BLUETOOTH" />
...
</manifest>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • Guide to BluetoothSecurity原文 本出版物可免费从以下网址获得:https://doi.o...
    公子小水阅读 7,933评论 0 6
  • 最近项目使用蓝牙,之前并没有接触,还是发现了很多坑,查阅了很多资料,说的迷迷糊糊,今天特查看官方文档。 说下遇到的...
    King9527阅读 1,790评论 0 1
  • 蓝牙简介 蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离...
    Chefil阅读 2,035评论 2 19
  • 公司的项目最近需要用到蓝牙开发的相关内容,因此特地查阅了Google官方文档的内容并进行二次整理,希望能对需要学习...
    Chuckiefan阅读 32,431评论 44 123
  • 【內經原文】 其味甘,其類土,其畜牛,其榖稷,其應四時上為鎮星,是以知病之在肉也,其音...
    大军的简书阅读 116评论 0 2