没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Android蓝牙开发
学习之前先了解两个基本概念:
1.RFCOMM协议:
一个基于欧洲电信标准协会ETSI07.10规程的串行线性仿真协议。此协议提供RS232控
制和状态信号,如基带上的损坏,CTS以及数据信号等,为上层业务(如传统的串行线缆应
用)提供了传送能力。
RFCOMM是一个简单传输协议,其目的是针对如何在两个不同设备上的应用之间保证
一条完整的通信路径,并在它们之间保持一通信段。
RFCOMM是为了兼容传统的串口应用,同时取代有线的通信方式,蓝牙协议栈需要提
供与有线串口一致的通信接口而开发出的协议。RFCOMM协议提供对基于L2CAP协议的串
口仿真,基于ETSI07.10。可支持在两个BT设备之间同时保持高达60路的通信连接。
RFCOMM只针对直接互连设备之间的连接,或者是设备与网络接入设备之间的互连。
通信两端设备必须兼容于RFCOMM协议,有两类设备:DTE (Data Terminal Endpoint,通
信终端,如PC,PRINTER)和DCE (Data Circuit Endpoint,通信段的一部分,如Modem)。
此两类设备不作区分。
2.MAC硬件地址
MAC(Medium/MediaAccess Control, 介质访问控制)MAC地址是烧录在
NetworkInterfaceCard(网卡,NIC)里的.MAC地址,也叫硬件地址,是由48比特长(6字节),16进制
的数字组成.0-23位叫做组织唯一标志符(organizationally unique,是识别LAN(局域网)节点
的标识.24-47位是由厂家自己分配。其中第40位是组播地址标志位。网卡的物理地址通常
是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的
是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。
Android平台提供的蓝牙API去实现蓝牙设备之间的通信,蓝牙设备之间的通信主要包
括了四个步骤:设置蓝牙设备、寻找局域网内可能或者匹配的设备、连接设备和设备之间
的数据传输。以下是建立蓝牙连接的所需要的一些基本类:
BluetoothAdapter类:代表了一个本地的蓝牙适配器。它是所有蓝牙交互的的入口点。
利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝
牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接。
BluetoothDevice类:代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者
获取远端蓝牙设备的名称、地址、种类和绑定状态(其信息是封装在BluetoothSocket中)。
BluetoothSocket类:代表了一个蓝牙套接字的接口(类似于TCP中的套接字),它是应
用程序通过输入、输出流与其他蓝牙设备通信的连接点。
BlueboothServerSocket类:代表打开服务连接来监听可能到来的连接请求(属于server
端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。当远端设
备发起连接连接请求的时候,并且已经连接到了的时候,BlueboothServerSocket类将会返回
一个BluetoothSocket。
BluetoothClass类:描述了一个蓝牙设备的一般特点和能力。它的只读属性集定义了设
备的主、次设备类和一些相关服务。然而,它并没有准确地描述所有该设备所支持的蓝牙
文件和服务,而是作为对设备种类来说的一个小小暗示。
要操作蓝牙,先要在 AndroidManifest.xml 里加入权限:
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"
/>
<uses-permissionandroid:name="android.permission.BLUETOOTH" />
Android 所有关于蓝牙开发的类都在 android.bluetooth 包下,只有 8 个类。常用的
四个类如下所示:
1. BluetoothAdapter
蓝牙适配器,直到我们建立 BluetoothSocket 连接之前,都要不断操作它。
BluetoothAdapter 里的方法很多,常用的有以下几个:
cancelDiscovery()取消发现,也就是说当我们正在搜索设备的时候调用这个方法将
不再继续搜索
disable()关闭蓝牙
enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户
是否打开,以下两行代码同样是打开蓝牙,但会提示用户:
Intentenabler = 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()开始搜索,这是搜索的第一步
2. BluetoothDevice
描述了一个蓝牙设备
createRfcommSocketToServiceRecord(UUIDuuid) 根 据 UUID 创 建 并 返 回一个
BluetoothSocket , 这 个 方 法 也 是 我 们 获 取 BluetoothDevice 的 目 的 — — 创 建
BluetoothSocket
这个类其他的方法,如 getAddress()、getName()等,同 BluetoothAdapter。
3. BluetoothServerSocket
如果去除了 Bluetooth 相信大家一定再熟悉不过了,既然是 Socket,方法就应该都差
不多,这个类一种只有三个方法:
两个重载的 accept(),accept(int timeout)
两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候 ,
直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行。
还有一点需要注意的是,这两个方法都返回一个 BluetoothSocket,最后的连接也是服务
器端与客户端的两个 BluetoothSocket 的连接
close()关闭
4. BluetoothSocket 是客户端,跟 BluetoothServerSocket 相对
一共 5 个方法,不出意外,都会用到
close()关闭
connect()连接
getInptuStream()获取输入流
getOutputStream()获取输出流
getRemoteDevice()获取远程设备
这里指的是获取 bluetoothSocket 指定连接的那个远程蓝牙设备
下面说说具体的编程实现
1.启动蓝牙功能:
首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,以后你就
可以使用该对象了。如果返回为空,则无法继续执行了。例如:
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
// Device does not support Bluetooth
}
其次,调用isEnabled()来查询当前蓝牙设备的状态,如果返回为false,则表示蓝牙设备
没有开启,接下来你需要封装一个ACTION_REQUEST_ENABLE请求到intent里面,调用
startActivityForResult()方法使能蓝牙设备,例如:
if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
2. 查找设备:
使用BluetoothAdapter类里的方法,你可以查找远端设备(大概十米以内)或者查询在
你手机上已经匹配(或者说绑定)的其他手机了。当然需要确定对方蓝牙设备已经开启或
者已经开启了“被发现使能”功能(对方设备是可以被发现的是你能够发起连接的前提条
件)。如果该设备是可以被发现的,会反馈回来一些对方的设备信息,比如名字、MAC地
址等,利用这些信息,你的设备就可以选择去向对方初始化一个连接。
如果你是第一次与该设备连接,那么一个配对的请求就会自动的显示给用户。当设备
配对好之后,他的一些基本信息(主要是名字和MAC)被保存下来并可以使用蓝牙的API
来读取。使用已知的MAC地址就可以对远端的蓝牙设备发起连接请求。
匹配好的设备和连接上的设备的不同点:匹配好只是说明对方设备发现了你的存在,
并拥有一个共同的识别码,并且可以连接。连接上:表示当前设备共享一个RFCOMM信道
并且两者之间可以交换数据。也就是是说蓝牙设备在建立RFCOMM信道之前,必须是已经
配对好了的。
3. 查询匹配好的设备:
在建立连接之前你必须先查询配对好了的蓝牙设备集(你周围的蓝牙设备可能不止一
个),以便你选取哪一个设备进行通信,例如你可以你可以查询所有配对的蓝牙设备,并
使用一个数组适配器将其打印显示出来:
剩余25页未读,继续阅读
资源评论
- huryandjava2015-07-03可用,非常感谢!
woshipimi
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于java+sqlserver实现的电子通讯录(带系统托盘)(源码+数据库+系统详细配置方法)
- layui修改1231231231243
- C# hidsharp库usbhid设备控制简单工程示例
- 基于java+swing+applet实现的家庭理财系统(含源码+数据库+答辩PPT)
- R语言机器学习指南PPT 44页
- 【java毕业设计】医院打卡挂号系统源码(ssm+jsp+mysql+说明文档+LW).zip
- 【java毕业设计】雅博书城在线系统源码(ssm+jsp+mysql+说明文档+LW).zip
- 基于spring+Sql server实现的题库及试卷管理系统模块的设计与开发(源码+数据库+毕业论文)
- 【java毕业设计】学生综合考评管理系统源码(ssm+jsp+mysql+说明文档+LW).zip
- 鸢尾花数据-数据集(文件)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功