Android蓝牙开发的一点总结
2019独角兽企业重金招聘Python工程师标准>>>
蓝牙的开发和使用中,主要过程为:
(1)本机蓝牙设备的开启
(2)扫描周边可用蓝牙设别
(3)配对设备
(4)连接设备创建RFCOMM信道进行数据通信
1.添加权限
在android开发之前需要添加Bluetooth和BluetoothAdmin两个权限,这样才能对蓝牙进行操作。
2.开启本地蓝牙
在搜索蓝牙设备之前,需要先查看本机是否支持蓝牙,然后打开本地的蓝牙设备,并将蓝牙设备处于可见的状态,便于别个设备可以搜索到本地蓝牙。
Intent mIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(mIntent, 1);
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivityForResult(intent, 1);
这几行代码允许本地蓝牙设备能在300s内被搜索到。
3.获取本地蓝牙适配器
BluetoothAdapter代表的是本地的蓝牙适配器设备,通过此类可让用户执行基本的蓝牙任务。例如设备的搜索,蓝牙设备的配对等相关的操作。为了取得本地蓝牙适配器,需要调用静态方法getDefaultAdapter()来获得本地蓝牙适配器,拥有蓝牙适配器后,用户可以通过搜索获得一系列BluetothDevice对象。
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mBluetoothAdapter.startDiscovery();来开启设备的搜索
蓝牙的搜索是一个异步的过程,不需要考虑线程被阻塞的问题。搜索的过程大约有12s,这时需要紧接着注册一个BroadcastReceiver对象来接收查找到的蓝牙设备信息,这些信息中包含了其mac地址,IP和蓝牙设备名等其他一些相关信息。
private class BluetoothReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(action))
{
BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(IsLock(bluetoothDevice))
{
bluelist.add(bluetoothDevice.getName());//保存蓝牙设备的名字
listdevice.add(bluetoothDevice);//保存蓝牙设备
}
showDevices();
}
}
}
注册完成后,需要使用代码结束注册
//结束注册
protected void onDestroy()
{
//蓝牙协议中需要关闭广播,减少能耗
unregisterReceiver(blueReceiver);
super.onDestroy();
}
搜索到的蓝牙设备信息保存在一个listview中
private void showDevices() {
blueadapter = new ArrayAdapter(BluetoothActivity.this, android.R.layout.simple_list_item_1, bluelist);
bluelistView.setAdapter(blueadapter);
}
4.通信的建立
Android中的蓝牙和Socket套接字是紧密相连的,蓝牙端的监听接口和TCP的端口类似,都是使用socket和serversocket类。在服务器端,serversocket创建一个监听服务监听端口,接受客户端的连接申请,客户端则不断向指定地址和端口发送连接请求,连接成功后,创建RFCOMM信道来进行通信,双方都是用过getInputSream和getOutputStream来打开I/O流,从而获得输入输出流。
一个蓝牙设备既可以做客户端也可以做服务端。运行机制和JAVA中的serversocket和socket是一样的。和其它移动蓝牙设备进行连接时,手机端可以作为客户端,移动蓝牙端作为服务端,手机端向服务端进行连接请求,通过不同的UUID,和服务端建立起相应的连接。通信属于异步,需要另外开启线程来运行。
客户端:
private class BlueConnectThread extends Thread
{
public BlueConnectThread(BluetoothDevice device)
{
try
{
//根据UUID创建蓝牙socket
socket = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {}
}
public void run()
{
mBluetoothAdapter.cancelDiscovery();
try
{
socket.connect();
Blueout = socket.getOutputStream();
Bluein = socket.getInputStream();
blueReader = new BufferedReader(new InputStreamReader(Bluein));
} catch (Exception e){}
}
}
当socket建立好后,mBluetoothAdapter.cancelDiscovery();避免在不断的搜索过程中消耗过多资源。通过建立好的socket获得输入输出流,实现数据的交互。
建立连接所使用的UUID是通用唯一识别码:Universally Unique Identifier,是一种软件构建的标准。蓝牙通信中不同的通信操作会对应不同的UUID。比如蓝牙的数据通信的UUID就是
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
将字符串转换成UUID对象。
转载于:https://my.oschina.net/u/2408219/blog/474654
Android蓝牙开发的一点总结相关推荐
- Android蓝牙开发系列文章-蓝牙设备类型知多少?
在写<Android蓝牙开发系列文章-蓝牙音箱连接>时,计划细化出一篇讲解蓝牙设备类型的文章,现在它来了~ 阅读其他内容,可以点击<Android蓝牙开发系列文章-策划篇>,或 ...
- Android蓝牙开发 — 经典蓝牙BLE蓝牙
一,前期基础知识储备 1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI): 支持移动电话.笔记本电脑.无线耳机等设备之间进行信息的交换: Android支持的蓝牙协议栈:Bl ...
- Android 蓝牙开发(扫描设备、绑定、解绑)Kotlin版
Kotlin版 蓝牙开发 (扫描设备.绑定.解绑) 前言 运行效果图 正文 ① 配置项目 ② 布局和样式 ③ 编码 1. 通知栏样式修改 2. 蓝牙设备列表适配器编写 3. 权限请求 4. 初始化蓝牙 ...
- Android - 蓝牙开发
文章目录 科普 SIG 类型 制式 选择 逻辑链路控制适配协议 (L2CAP) L2CAP的功能 蓝牙框架和 RFCOMM 协议 蓝牙安全 白名单机制 编程 蓝牙权限 Classic Bluetoot ...
- Android蓝牙开发系列文章-扫不到蓝牙设备,你的姿势对了吗?
在写<Android蓝牙开发系列文章-蓝牙音箱连接>时,计划细化出两篇文章,分别是: 关于蓝牙设备类型分类的,这个已经完成了,阅读请点击<Android蓝牙开发系列文章-蓝牙设备类型 ...
- Android 蓝牙开发,申请打开蓝牙
申请打开蓝牙 <!-- 蓝牙权限 --> <uses-permission android:name="android.permission.BLUETOOTH" ...
- android蓝牙聊天设备,Android蓝牙开发——实现蓝牙聊天
最近课上刚好需要做一个课程设计关于蓝牙的就挑选了个蓝牙聊天室,其实关键还是在于对蓝牙API的了解 一.蓝牙API 与蓝牙开发主要的相关类是以下四个 BluetoothAdapter 字面上则理解为蓝牙 ...
- Android蓝牙开发(一)之打开蓝牙和设备搜索
Android蓝牙开发系列目录: https://blog.csdn.net/huangliniqng/article/details/82185635 一.判断是否系统是否支持蓝牙 在使用蓝牙之前, ...
- Android蓝牙开发系列文章-蓝牙mesh(一)
在<Android蓝牙开发系列文章-策划篇>中我们对蓝牙专题的内容进行整体规划,现在让我们一点点揭开他的面纱~ 本文是关于蓝牙mesh的首篇文章,由好友CSDN博主yk150915提供,在 ...
- Android 蓝牙开发(扫描设备、绑定、解绑)
Android 蓝牙开发(扫描设备.绑定.解绑) 前言 效果图 一.配置项目 二.布局和样式 三.编码 四.源码 前言 公司最近给我丢了一个蓝牙开发的项目,不了解怎么办呢,那当然是从最基础的开始了,所 ...
最新文章
- Swift - final关键字的介绍,以及使用场景
- 【NOIP2017】逛公园【最短路DAG】【dp】【拓扑排序】
- sql中in与php数组,格式化SQL“IN”子句的PHP数组
- 任晶磊:如何看待程序员在 GitHub 发起抗议互联网公司实行 996 工作制网站?
- html5表单修改颜色,在css中更改输入搜索表单的背景色
- java 调用wget_通过命令行执行WGET下载会更快,而通过Java代码执行时会更慢
- 有关Select 语句查询.四
- 虚拟机怎么启动共享文件服务器,VMware虚拟机中ubuntu启用本地文件共享的设置方法...
- Appium连接手机
- 铁通计算机网络,【计算机网络技术】常见宽带错误代码及处理办法(使用移动宽带【铁通】、部分电信宽带故障、联通宽带故...
- 硬件物料清单bom检查小技巧
- 微信小程序入门踩坑记(妥妥的干货,新手快快看过来)
- raise ImportError(“html5lib not found, please install it“) ImportError: html5lib not found
- JavaScript常用关键字
- Head First 设计模式 —— 13. 代理 (Proxy) 模式
- 读书笔记2014第4本:程序员修炼之道-从小工到专家(第一章)
- 电子商务行业RFID仓库管理系统,智慧仓库管理RFID平台-新导智能
- Golang: unsafe包的使用
- 【临时重发】2017年复旦自主命题专业课:《软件工程专业基础综合》考试大纲...
- spark 相关性分析_SparkML之相关性分析
热门文章
- 从零基础入门Tensorflow2.0 ----六、30 kaggle 10 monkeys 基础模型搭建与训练
- 从零基础入门Tensorflow2.0 ----五、19. feature_column , keras_to_estimator
- 狂神说Redis笔记三
- 基于boost库的搜索引擎项目
- JavaWeb练习项目--JEE商城
- mysql gtid 错误_MySQL 5.6 GTID常见错误解决一例
- js php后端 安全,前端JS RSA加密,PHP后端解密实现密码安全传输
- 优品景象 进销存系统推荐_初步了解WMS(仓库管理系统)
- 计算机应用及发展,计算机应用及发展趋势.docx
- php 字符串中 数组变量,PHP返回变量或数组的字符串表示:var_export()