蓝牙那些事之通讯篇

讲到通讯,主要也就是BluetoothServerSocket和BluetoothSocket这两个类,其实和serversocket和socket用法都一样,在建立通讯时,需要建立两个socket,一个在客户端,一个在服务端。

服务端代码:

 1 //开启服务器端线程
 2         private class serverThread extends Thread{
 3             private BluetoothAdapter btadapter;
 4             public serverThread(BluetoothAdapter btadapter) {
 5                 super();
 6                 this.btadapter = btadapter;
 7             }
 8             @Override
 9             public void run() {
10                     try {
11                         System.out.println("===btadapter==="+btadapter);
12                         mServerSocket=btadapter.listenUsingRfcommWithServiceRecord("myblue", UUID.fromString(FLAG_BY_UUID));
13                         socket = mServerSocket.accept();
14                         System.out.println("服务器已开启了...");
15                     } catch (Exception e) {
16                         System.out.println("服务器连接失败...");
17                         e.printStackTrace();
18                 }
19             }
20         }    

和google api有点不同,也许他那个写的更严谨一些,可以及时释放资源

客户端:

 1 //开启客户端线程
 2     private class clientThread extends Thread{
 3         private BluetoothDevice de;
 4         public clientThread(BluetoothDevice de) {
 5             super();
 6             this.de = de;
 7         }
 8
 9         @Override
10         public void run() {
11             bluetoothadapter.cancelDiscovery();
12             try {
13                 socket=de.createRfcommSocketToServiceRecord(UUID.fromString("FLAG_BY_UUID"));
14                 System.out.println("============socket==="+socket+"====device======="+de);
15                 //连接设备
16                 System.out.println("======连接前======");
17                 socket.connect();
18                 System.out.println("======连接后======");
19                 handler.sendEmptyMessage(3);
20             } catch (Exception e) {
21                 e.printStackTrace();
22             }
23         }
24     }

UUID:00001101-0000-1000-8000-00805F9B34FB 这个uuid很关键,看到有些朋友写的uuid不同,导致出现不同的结果,但是关键在哪我也不是很清楚

当客户端与服务器端建立连接后,需要发送数据和接收数据,这里是通过流的实现数据的接收与发送

接收数据的线程:

 1  //读取数据
 2    private class readThread extends Thread {
 3     private Context con;
 4
 5     public readThread(Context con) {
 6         super();
 7         this.con = con;
 8     }
 9
10     public void run() {
11            byte[] buffer = new byte[124];
12            int bytes;
13            InputStream mmInStream = null;
14            try {
15                 mmInStream = socket.getInputStream();
16            } catch (IOException e1) {
17                 e1.printStackTrace();
18            }
19            while (true) {
20                try {
21                        if((bytes = mmInStream.read(buffer))>0){
22                         byte[] buf_data = new byte[bytes];
23                         for(int i=0; i<bytes; i++){
24                             buf_data[i] = buffer[i];
25                         }
26                         dd(con,buf_data);
27                       }
28                    } catch (IOException e) {
29                     try {
30                         mmInStream.close();
31                     } catch (IOException e1) {
32                         e1.printStackTrace();}
33                        break;
34                    }
35                }
36           }
37      }  

接收到的数据是byte,需要自己转换成相应的进制....

发送数据:

 1 //发送数据
 2    private void sendTextToOther(String msg){
 3        if (socket == null){
 4            Utils.getinstance().getStr(SearchBlueToothActivity.this, "请先连接设备");
 5            return;
 6        }
 7        try {
 8            OutputStream os = socket.getOutputStream();
 9            System.out.println("========发送的数据是============="+msg.getBytes());
10            os.write(msg.getBytes());
11        } catch (IOException e) {
12            e.printStackTrace();
13        }
14    }

ok,到这里已经可以实现两部设备的通讯了....

蓝牙那些事之通讯篇

时间: 2024-11-13 09:26:38

蓝牙那些事之通讯篇的相关文章

蓝牙那些事之状态监听

对于蓝牙状态的监听事件,此篇文章讲的是对于手机蓝牙的或者是设备自身蓝牙状态的监听,而并非是远程设备蓝牙状态的监听,当然如果要监听远程设备的蓝牙状态也不是没有办法,相对于监听自身蓝牙状态难度更大,资料页相对较少. 如果要监听本身蓝牙状态,还是要注册广播 1 //注册广播接收器(监听蓝牙状态的改变) 2 IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 3 4 filter.addAction(Bluetoot

系统也就那点事【基础篇】

不知道为什么总是有人不会装系统,我就稍微整理一下:(实战性很强)[本次更新了工具]我敢保证:只要你认真看了你就会了! 网上很多人也在教别人重装系统,可是总是点到即止,还有就是以一总最理想的方式来讲述...试问,有几个人总是这么理想的完成整个过程呢?在装的过程中遇到问题又该咋办呢?————学习一下吧,这个是我当初大一时候录的,当时知识可能有限,如有什么不足的还望海涵... 先简单了解一下:(不要求懂,只要大概了解一下[当时自我研究自我总结的,如果有其他方法可以说的]) 重装系统的几种方法: 标清观

移动前端工作的那些事---前端制作篇之meta标签篇

移动端前端制作有些地方不同于互联网,这篇主要讨论的是meta标签.meta标签位于head标签之间.是主要辅助HTML结构层的.meta标签不管在互联网前端还是在移动端都起了很重要的作用.这里只讨论移动端. 附上代码进行说明: <!DOCTYPE html><!--HTML5 doctype--> <html> <head> <title>xxx</title> <meta http-equiv="Content-ty

聊聊测试管理的那些事之管事篇

管理:管人+管事. 说到管理,其实就是团队,没有团队,就谈不上管理.个人理解,对个人而言,更多应该是计划,而非管理.做管理的时间并不长,或者说很短,可能很多地方理解的有问题.写这篇文章也是为了能更多的与大家交流,也是记录下在目前这个阶段我的理解.(本文均以在创业型公司工作为背景),全篇分为管事篇跟管人篇. 管事篇 一.测试的工作流程. 关于这个点,其实网络上一搜一大堆,大体都差不多,需求分析,测试计划,设计测试用例,评审用例,执行测试,缺陷管理,定版,发布.但是,我认为作为一个测试leader,

你所不知道的html5与html中的那些事第三篇

文章简介: 关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后,所有的工作都可以达到真正的云方式呢?这一系列的问题你是否已经想明白了呢? 本系列文章将为您一一解答你所不知道的关于html5与html中的那些事;具体会包括如:html5新的理念与想法,html5的新标签的用意与具体开发中场景应用,html5与css3的感情经历(用法搭配),包括html5的父亲html的一些

移动前端工作的那些事---前端制作篇之框架篇

为了更好的提升用户体验,移动端逐渐出了许多的移动端的框架,比如Sencha Touch.JQTouch.Jquery-moblie.jqMobi等等.这些框架都有优缺点,不同的框架应用在不同的项目中.现简单阐述一下各框架的优缺点: 一.Sencha Touch框架是一个重量级的框架.它上手较难,代码复杂,并且需要较强的程序基础才能学习,最开始的时候因为一个项目,想使用Sencha Touch框架,后来工期实在太紧张,根本没时间学习它并使用.所以最后转投其他框架.这个框架兼容性很高,运行起来的速度

搜索引擎和知识图谱那些事 (上).基础篇

这是一篇基础性文章,主要介绍搜索引擎和知识图谱的一些原理.发展经历和应用等知识.希望文章对你有所帮助~如果有错误或不足之处,还请海涵.(参考资料见后) 一. 搜索引擎 (一).搜索引擎的四个时代 根据张俊林大神的<这就是搜索引擎>这本书中描述(推荐大家阅读),搜索引擎从采取的技术划分为4个时代: 1.史前时代:分类目录的一代 这个时代成为"导航时代",Yahoo和国内hao123是这个时代的代表.通过人工搜集整理,把属于各个类别的高质量网站或网页分类,用户通过分级目录来查找

Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

1.同步动态扫描 多个数码管的显示采用的是同步动态扫描方法,同步动态扫描指的是:行信号和列信号同步扫描,是一种并行操作. 2.数码管驱动电路实现思路      如果要求数码管显示我们想要的数字,首先需要写一个数据接收模块,这个模块接收数据之后需要做什么样的处理呢?这时候我们会想到两个数码管,其中一个显示十位数字,另一个显示各位数字,即把这个数据的十位传给其中一个数码管,各位数字传给另一个数码管来显示.这样我们就会明确了:数据接收模块需要将接收的数据进行拆分,分别输出其十位数据与个位上的数据 程序

Verilog HDL那些事_建模篇笔记(实验三:按键消抖)

实验三:按键消抖 首先将按键消抖功能分成了两个模块,电平检查模块和10ms延迟模块.电平检测模块用来检测按键信号的变化(是否被按下),10ms延迟模块用来稳定电平检查模块的输入,进而稳定按键信号,防止其抖动而产生的信号跳变而影响输出. 设计思路:     1.当电平检测模块检查到按键被按下(输入由高电平变为低电平),则拉高H2L_Sig电平,然后拉低. 2.10ms延迟模块,检测到H2L_Sig高电平,则对其进行10ms过滤,拉高输出. 3.当按键被释放,电平检测模块会拉高L2H_Sig电平,然