手把手教你做蓝牙聊天应用(一)-设计方案

前言

通过“计算器”和“视频播放器”我们已经能够开始开发一些比较像样的应用了。

今天,我们将开始制作一个“蓝牙聊天”应用。这个应用其实很简单,没有炫酷的界面,就是一对一、通过蓝牙连接两台设备,让两个人互相发送信息。

可别觉得它太无聊、没有什么实用性,其实我们正是想通过它让你开始接触网络编程(蓝牙和wifi都是无线连接技术,它们的程序设计方法和思路非常的相似)。

另外,学会了使用蓝牙,就为大家打开了技术开发的另一扇大门-物联网,现在很多物联网硬件都需要使用蓝牙技术进行连接,真是一箭双雕。将这个技术掌握以后,就可以结合我们的另外一篇介绍蓝牙小车的文档,开发蓝牙小车的遥控器了。

这个应用是根据Google在Android SDK中提供的Bluetooth Chat应用改编的。Google的示例只有代码,没有解释说明,所以对很多初学者来说会有很多的疑问。这里将Google的示例程序进行了大范围的改造,并美化了界面,让它便于初学者学习,从原理知识到设计方案都会详细的讨论。希望大家通过这一章节的学习,对不同设备间的通信开发具有整体的认识,并将这里面使用到的技术,作为我们下一步开发的垫脚石。

本文针对的读者是:

  1. 对安卓开发有初步认识同学;
  2. 准备做物联网开发,但是对安卓(控制端)开发感到迷茫的小白;

在开始以前,假设各位已经做好了如下准备:

  • 一台开发用笔记本电脑,并搭建好了开发环境;
  • 两部安卓系统设备(手机或平板电脑);
  • 一根连接电脑和安卓设备的数据线(通常是micro usb数据线);
  • 一到两天时间;
  • 耐心与求知欲;

本文的代码,可以从安豆网示例代码中下载。



/*******************************************************************/

* 版权声明

* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。

/*******************************************************************/


第1节 设计方案

规划产品的时候,我们先要做加法,尽可能的把它可以拥有的功能挖掘出来;然后再做减法,把不实用、或者投入性价比不高的功能放一放,作出第一版产品;最后,再根据用户的反馈、加上上一版产品留下的遗憾,进行产品的升级。

这是一个循环发展、螺旋上升的过程。这样做能把有限的开发资源放到最重要的地方去,得到用户的反馈,尽可能设计出用户真正需要的产品。

1.1 可能的功能点

作为一个即时通讯的小应用,我们完全可以把它设计成“微信”或者“QQ”的样子,唯一的不同是,这个聊天应用是通过蓝牙技术进行的数据传输,而不是wifi。因此,我们可以暂时列出它可能具备的功能:

  1. 两台设备能互相连接;
  2. 连接后的设备可以传输数据,比如文字、图片、语音、音乐、甚至是实时视频;
  3. 双方发送的内容,能够展示出来;
  4. 可以编辑任何一方的个人信息,例如头像、昵称、个性描述等等,建立通信等双方可以查看相互的资料;
  5. 可以查看双方聊天的历史纪录;
  6. 可以搜索聊天的历史记录;
  7. 可以单独保存对方发送的图片、语音或者视频

    ……

可以添加的功能实在是太多了。

1.2 功能的筛选

从上面列出的明细可以看出,能够赋予这个聊天应用的功能实在是太多了,因此我们必须根据我们的能力和精力来进行筛选,做功能的减法。

  1. 设备的互联是必须的,实现聊天的基础就是建立在这个基础上的。
  2. 数据在设备之间的传输都是以二进制的形式进行的,能够传送文字、图片、语音、音乐、视频等等信息。
  3. 需要展示出双方聊天的内容,这样方便用户判断上下文。

以上3条是就是蓝牙聊天应用的核心功能,其它功能都是这2条基础功能的扩展,

  1. 个人资料,有的话当然很好,但是并不会影响两人通信功能的使用;
  2. 查看历史聊天记录,查看双方上一次建立连接的聊天记录当然是有一个有必要的功能,不过为了简化问题,我们还是暂时把这个功能放一放,留到下一版再加入吧;

至于其它功能,那就离的更远了。我们就暂时不去实现了。

1.3 蓝牙技术的性能考虑

用蓝牙(或者wifi)传输数据,都是传输的二进制数据。文字、图片、语音、音乐、实时视频等内容本质上都是二进制数据,只是它们的格式不太一样而已。所以理论上讲,传输这几类信息都是可以的。

不过任何无线传输技术,在单位时间内传输的数据量和传输的距离都是有限制的。对传输要求比较高的应该算实时视频内容了,每一秒要达到24帧,所以对传输速度的要求可想而知了。那么蓝牙的传输速度能达到吗?

不同的数据类型,对传输的要求是不同的,传输什么样的数据比较合适呢?现阶段,我们把问题简化一下,就让它传送简单的字符串吧。

二进制数据流作为任何数据的载体,是最为基础的,而字符串可以看成是一种具有特殊结构的二进制数据。所以,为了开发简单,第一步先假设只传输文字内容。

到目前为止,实现整个功能都不会有技术上的障碍了。

1.4 现阶段的功能

根据上面的讨论,我们确定蓝牙聊天应用的具体功能:

  1. 能够所搜周围打开了蓝牙功能的设备,把搜索的结果展示出来;
  2. 发现可连接设备后,点击某个搜索的结果,能够主动连接对方;
  3. 能够被周围的其它蓝牙设备搜索到;
  4. 当收到其它设备发出的连接请求以后,能够接受对方的请求,建立连接;
  5. 连接的过程中,可以取消连接,连接成功后,能够断开连接;
  6. 当两个设备建立连接以后,就可以以二进制数据的形式传输数据,数据的内容就是简单的文字;
  7. 双方发送的内容,能够分别展示出来,但是不保存以前曾有过的聊天记录;
  8. 聊天的记录列表中,不能删除展示的信息;
  9. 当设备之间已经相连,就不能和别的设备建立连接了,彼此之间,一次只能连接一个设备;

1.5 功能条件的假设

我们确定了蓝牙聊天应用的功能,还需要给出一些功能设计的基本假设。

  1. 当两台蓝牙设备已经相连的时候,如果其中一台设备的蓝牙功能被用户手动关闭了,我们的应用需要做怎样的处理?对于此,为了简化第一版应用的开发,就简单的假设蓝牙功能一旦打开后,应用运行的过程中,蓝牙功能就不会被关闭了。
  2. 程序的主界面退出后,是否可以继续在后台接收对方发送过来的数据?就像微信那样,只要应用没有退出而且有网络,就能一直接收朋友发来的信息?现阶段还是从简化问题的角度出发,我们就假设一旦程序的主界面退出,就不需要在后台继续接收数据了。

1.6 关于遗憾

对于那些没有在这个阶段加入的功能,期待以后加入吧。

对于那些为了简化开发难度、减少开发时间而采用的简单设计,期待在下一版程序中优化和完善吧。

时间: 2024-08-05 08:03:46

手把手教你做蓝牙聊天应用(一)-设计方案的相关文章

手把手教你做蓝牙聊天应用(五)-界面使用ConnectionManager

第5节 界面使用ConnectionManager ConnectionManager已经设计完成了,它的价值需要在ChatActivity中体现出来. 5.1 监听ConnectionManager 实现对ConnectionManager各个状态的监听,当ConnectionManager的状态有变化.收到发送的数据时,需要让ChatActivity知道,它才能将各种变化反应到用户界面上. 5.1.1 创建监听器 ConnectionManager定义了ConnectionListener接

手把手教你做蓝牙聊天应用(六)-界面优化

第6节 应用的美化与完善 现在,我们还可以为聊天应用加上多国语言的支持和关于界面,把使用到的颜色和尺寸定义到资源文件当中,这样一来,安豆的蓝牙聊天应用就算是比较完整的完成了. 这两部分在以前"计算器"章节中,已经介绍过了,大家就自己动手吧. 这一节,我们将重点介绍聊天文字的背景图片是如何制作的. 6.1 9Patch图片的原理 观察一下安卓系统中需要经常用到的图片,可以发现: 很多要使用透明效果的地方在转角处: 很多图片不同的地方只在靠近边缘的地方,内部区域几乎都是一样的: 为此安卓系

手把手教你做蓝牙聊天应用(三)-获取要连接的设备

第3节 获取要连接的设备 这一节我们开始设计蓝牙聊天应用的界面.根据之前的规划,连接管理将放在单独的ConnectionManager模块当中,所以每当要使用连接功能的时候,我们就暂时把它空着,等到ConnectionManager开发完成之后再加进来. 这里我们将完成下面的界面设计, 3.1 主界面 主界面是一个独立的Activity-ChatActivity,它要实现三个主要功能, 当蓝牙没有开启或者设备不能被发现的时候,请求用户打开对应的功能: 下方有输入框输入要发送的文字内容,点击按钮后

手把手教你做蓝牙聊天应用(二)-设计方案

第2节 设计方案 功能确定后,就要开始围绕功能进行功能的验证.界面设计的规划.以及程序结构的规划了. 2.1 技术验证 选定了现阶段要完成的核心功能后,我们首先需要对它们做技术上的验证,看看用什么样的方法能实现它们.在进行技术验证的同时,也能让我们发现很多我们在头脑风暴阶段没有意识到的现实问题. 现在的手机和移动设备已经把蓝牙作为了标准配置,它常常用到与周边小设备的数据连接上,例如蓝牙自拍杆,蓝牙音箱,蓝牙键盘,运动手环等等,可以看出这都是一些不需要太大数据量传输而需要保持长时间数据通信的设备.

手把手教你做蓝牙聊天应用(四)-蓝牙连接模块

第4节 蓝牙连接模块 蓝牙连接的管理模块需要为ChatActivity提供于连接相关的所有功能,要设计的方便使用,并尽量隐藏连接的细节. 4.1 对外接口 我们首先来看看ConnectionManager需要向Chat Activity提供哪些接口. 监听.当应用运行起来后,聊天应用需要启动对其它蓝牙设备的监听,迎接随时可能到来的连接请求.所以ConnectionManager需要提供启动监听-startListen()和停止监听-stopListen()的两个接口: 主动连接.应用搜索到可连接

手把手教你做蓝牙小车(二)

第5节 BTChat 本节开始介绍Arduino蓝牙模块,配合Android应用,实现一个蓝牙聊天应用. 5.1 什么是蓝牙 简单说就是一种不同设备之间点对点通讯的技术. 有大篇大篇的蓝牙各种协议,各种规范... 本课程只讲用到的内容,不展开更多内容了. 5.2 SDP Service Discovery Protocol,简称SDP,是允许设备发现其他设备所支持服务的协议. 蓝牙协议给每个服务分配一个UUID,用来区分各种服务. SDP的UUID是00001101-0000-1000-8000

手把手教你做蓝牙小车(一)

第1节 选择Arduino开发板 1.1 Arduino是什么 对Arduino,官方有一堆解释. 作为一个软件程序猿,在我眼里,Arduino是学习"可怕硬件"的一个便捷通道.它把复杂的硬件名称,属性给我们隐藏起来,只需要一些简单的软件知识,就可以学习硬件开发. 1.2 怎么选择Arduino开发板 1.2.1 官方版本还是兼容版本 Arduino是开源项目,硬件结构,软件设计都开源. 所以不存在盗版的问题. 官方版质量肯定是杠杠的,但价格也贵. 两者价格数字差不多,一个卖人民币,一

手把手教你做蓝牙小车(三)

第6节 马达 要说蓝牙小车哪个模块最重要,多数人一定会以为是马达. 之前说过,为了防止开发板被电流击穿,控制马达时要增加一块扩展板. 所以,控制马达,只对扩展板编程,而不需要对马达编程. 此外,扩展板厂家会提供通过扩展板控制马达的代码. 综上,对开发人员来说,马达,只要确认存在就可以了. 6.1 扩展板 Arduino开发板只提供了一些基础.通用的接口,针对一些常见的特殊功能,Arduino专门为其推出了扩展板. 6.1.1 官方扩展板 Arduino官方目前总共推出了5款扩展板. 分别是 Ar

手把手教你做Android聊天机器人

我相信大家应该知道有款应用叫小黄鸡吧! 如果不知道,那你见过那种可以秒回复的聊天应用么? 如果仍然没看到!那你总见过可以迅速回复你的微信公共账吧! 如果仍然....亲出门左拐 好,不多说. 首先大家都应该了解程序,程序就是由人为的设定搭建起来的一套系统, 这里的机器人也是,简单的原理就是当你输入关键字后,通过一套算法, 在数据库中找到与之最为匹配的内容在返回给你.这个已经有人实现,我们这节教程就用别人 已经实现好的东西去做一??个应用来玩耍~~ (当然如果你非要想知道如何去做,给我留言.看情况我