Android 中的蓝牙模块

原创 2016年06月02日 11:26:29

Android中的蓝牙模块

首先我们需要了解蓝牙的基本通讯顺序
1.搜素蓝牙
2.将搜索到的蓝牙,进行绑定
3.通讯

打开蓝牙

Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
activity.startActivity(intent);

蓝牙的搜索 :

BluetoothAdapter mAdapter=BluetoothAdapter.getDefaultAdapter();
mAdapter.startDiscovery();

这里搜索到的结果,是以广播的形式返回的。所以我们可以监听相应的广播

// 开始查找
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
// 结束查找
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
// 查找设备
filter.addAction(BluetoothDevice.ACTION_FOUND);

广播里面相应代码
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
//开始搜索
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
.equals(action)) {
//搜索结束
} else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//每搜索到一个蓝牙设备,会得到一个BluetoothDevice对象,
}

与某个蓝牙设备进行绑定
device.createBond();

绑定完成后,相关的响应也是以广播的形式反馈
// 绑定状态
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);

广播内接受的数据
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
BluetoothDevice remoteDevice = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//绑定时,如果有设备正在绑定,会返回一个对象,否则会返回一个null
if (remoteDevice == null) {
return;
}
int status = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, 0);
if (status == BluetoothDevice.BOND_BONDED) {
//已经绑定成功
} else if (status == BluetoothDevice.BOND_BONDING) {
//绑定中
} else if (status == BluetoothDevice.BOND_NONE) {
//绑定失败
}
}
}

可以在BluetoothAdapter里面得到已经绑定过的所有设备,返回一个set集合
Set<BluetoothDevice> bondedDevices = mAapter.getBondedDevices();

得到这个set集合后,可以通过BluetoothDevice来进行数据的通信,uuid = 00001101-0000-1000-8000-00805F9B34FB,是一个固定格式
BluetoothSocket tmp =device.createRfcommSocketToServiceRecord(UUID)

返回的是一个客户端的socket对象,之后的通讯,与tcp类似。另外,通信时,需要把蓝牙的扫描关掉、
· mAdapter.cancelDiscovery();
·

下面为通信时的简单代码
public void run() {
// Cancel discovery because it will slow down the connection
mAdapter.cancelDiscovery();
try {
// Connect the device through the socket. This will block
// until it succeeds or throws an exception
mmSocket.connect();
} catch (Exception connectException) {
// Unable to connect; close the socket and get out
try {
mmSocket.close();
} catch (IOException closeException) { }
return;
}
// Do work to manage the connection (in a separate thread)
manageConnectedSocket(mmSocket);
}

manageConnectedSocket()函数,就可以根据需求,拿到OutputStream和InputStream进行数据的传递了

private void manageConnectedSocket(BluetoothSocket mmSocket) {
mmSocket.getInputStream();
mmSocket.getOutputStream();
}

Android Bluetooth模块学习笔记

一、蓝牙基础知识 1.蓝牙( Bluetooth )是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。蓝牙基于设备低成本的收发器芯片,传输距离近、低功耗。   2....
  • qq_15062527
  • qq_15062527
  • 2016年04月23日 11:24
  • 2200

Android4.42-Settings源码分析之蓝牙模块Bluetooth(上)

继上一篇  Android系统源码剖析(一)---Settings 接着来介绍一下设置中某个模块的源码,本文依旧是基于Android4.42源码进行分析,分析一下蓝牙模块的实现。建议大致看一下关于...
  • zrf1335348191
  • zrf1335348191
  • 2016年03月22日 17:13
  • 17124

谈谈蓝牙4.0(BLE)模块与安卓的数据交互

开发蓝牙4.0也快两个月了,给我的感受还是颇多的。 我开发的是与TI的蓝牙模块CC2540交互的安卓端蓝牙软件,对于安卓都不是很熟悉的我,是一个不小的挑战。 废话不多说,直接谈项目...
  • zzy131250
  • zzy131250
  • 2015年07月03日 22:03
  • 3759

android设备终端与蓝牙模块(HC-06)的通讯编程思路

蓝牙模块(HC-06): 在这个项目中,手机端作为客户端,去连接到蓝牙模块上。而接受蓝牙模块发过来的信息的时候,是没有必要再创建服务器端的,我们只要一个不断监听对方消息的循环就行...
  • u012556077
  • u012556077
  • 2015年12月12日 15:02
  • 995

android 与 蓝牙模块 hc06通信app 开发要点

最近做学校的硬件综合训练,实验箱上有一个带温湿度传感器的hc06蓝牙模块,于是准备用蓝牙与android端app通信,实时更新温湿度信息。本次开发由我全部负责移动端代码,还是压力比较大的。 因为蓝牙模...
  • u014646686
  • u014646686
  • 2015年07月16日 23:16
  • 2337

Android系统 蓝牙模块

接着来介绍一下设置中某个模块的源码,本文依旧是基于Android4.42源码进行分析,分析一下蓝牙模块的实现。建议大致看一下关于Settings的剖析。 ZERO,蓝牙模块的fragme...
  • qeqeqe236
  • qeqeqe236
  • 2017年03月16日 16:40
  • 508

android 连接蓝牙模块教程附源码

由于最近项目需要连接蓝牙,类似于智能手环连接蓝牙模块,网上找了些教程,有一些零零散散的程序,自己于是也写了一个能用,然后我发现谷歌有一个蓝牙的sample,一对比突然发现自己写的好low,不严谨。于是...
  • sinat_28676875
  • sinat_28676875
  • 2016年09月07日 19:04
  • 2899

【Android开发 蓝牙通信】手机蓝牙与下位机HC-05蓝牙模块通信系统

【周记-Android移动端开发】手机蓝牙与下位机HC-05蓝牙模块通信系统 很久没有写博客了,计划一直都有,但总是被这样或者那样的事情给耽搁了,在此写下文字监督自己:不论长短,每周至少一篇!本文...
  • dengpeng0419
  • dengpeng0419
  • 2016年10月22日 13:06
  • 4318

STC89C52单片机通过HC-06蓝牙模块与Android手机通信

STC89C52单片机通过HC-06蓝牙模块与Android手机通信
  • itas109
  • itas109
  • 2013年05月23日 09:02
  • 18120

Android 平台上蓝牙开发的关于 UUID 设置的注意事项

由于Android蓝牙的通信都需要用到UUID,如果由手机发起搜索,当搜索到电脑的蓝牙时,能够得到蓝牙的地址(address),但通信时需要得到BluetoothSocket,而BluetoothSo...
  • Buaaroid
  • Buaaroid
  • 2014年09月18日 14:54
  • 9438
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 中的蓝牙模块
举报原因:
原因补充:

(最多只允许输入30个字)