基于Android Classic Bluetooth的蓝牙聊天软件

代码地址如下:
http://www.demodashi.com/demo/12133.html

BluetoothChat

基于Android Classic Bluetooth的蓝牙聊天软件,目前仅支持一对一实时通信、文件传输、好友添加、好友分组、好友在线状态更新等功能,其中消息发送支持文本、表情等方式。

前景

蓝牙技术作为一种小范围无线连接技术,能够在设备间实现方便快捷、灵活安全、低成本、低功耗的数据和语音通信,是目前实现无线个人局域网的主流技术之一。同时,蓝牙系统以自组式组网的方式工作,每个蓝牙设备都可以在网络中实现路由选择的功能,可以形成移动自组网络。蓝牙的特性在许多方面正好符合Ad Hoc和WPAN的概念,显示了其真正的潜力所在。而且,将蓝牙与其他网络相连接可带来更广泛的应用,例如接入互联网、PSTN或公众移动通信网,可以使用户应用更方便或给用户带来更大的实惠。

蓝牙聊天作为一款针对局域网范围内的聊天软件,在办公密集,想实现快速稳定实时通讯还是比较有实用价值的。目前蓝牙技术发展迅速,5.0传输速率已经达到2Mbps,传输级别达到无损级别,有效工作距离可达300米,在蓝牙组网方面技术也在进一步更新,相信要不了多久会有很成熟的方案出来,这样一来就可以实现多人在线实时聊天功能,打破只能一对多实时聊天的界限。

技术简介

1、蓝牙通信的主从关系
蓝牙技术规定每一对设备之间进行蓝牙通讯时,必须一个为主角色,另一为从角色,才能进行通信,通信时,必须由主端进行查找,发起配对,建链成功后,双方即可收发数据。理论上,一个蓝牙主端设备,可同时与7个蓝牙从端设备进行通讯。一个具备蓝牙通讯功能的设备, 可以在两个角色间切换,平时工作在从模式,等待其它主设备来连接,需要时,转换为主模式,向其它设备发起呼叫。一个蓝牙设备以主模式发起呼叫时,需要知道对方的蓝牙地址,配对密码等信息,配对完成后,可直接发起呼叫。

2、蓝牙的呼叫过程
蓝牙主端设备发起呼叫,首先是查找,找出周围处于可被查找的蓝牙设备。主端设备找到从端蓝牙设备后,与从端蓝牙设备进行配对,此时需要输入从端设备的PIN码,也有设备不需要输入PIN码。配对完成后,从端蓝牙设备会记录主端设备的信任信息,此时主端即可向从端设备发起呼叫,已配对的设备在下次呼叫时,不再需要重新配对。已配对的设备,做为从端的蓝牙设备也可以发起建链请求,但做数据通讯的蓝牙模块一般不发起呼叫。链路建立成功后,主从两端之间即可进行双向的数据或语音通讯。在通信状态下,主端和从端设备都可以发起断链,断开蓝牙链路。

3、蓝牙一对一的串口数据传输应用
蓝牙数据传输应用中,一对一串口数据通讯是最常见的应用之一,蓝牙设备在出厂前即提前设好两个蓝牙设备之间的配对信息,主端预存有从端设备的PIN码、地址等,两端设备加电即自动建链,透明串口传输,无需外围电路干预。一对一应用中从端设备可以设为两种类型,一是静默状态,即只能与指定的主端通信,不被别的蓝牙设备查找;二是开发状态,既可被指定主端查找,也可以被别的蓝牙设备查找建链。

功能概述

蓝牙聊天功能主要分为以下几个模块:消息模块、好友模块以及个人模块。

项目结构

项目结构

消息模块

支持一对一、一对多、多对多实时聊天,能传输文字、表情、图片、文件等。对方不在线时可支持离线消息发送,在对方在线时能及时推送过去。消息支持历史消息存储与查看。

好友模块

支持附近好友添加,好友删除,好友分组显示,好友上下线提醒,好友昵称及分组名称修改。

个人模块

展示个人信息,包含昵称、图像、加入时间等信息。

个人中心

该模块还未实现,目前实现功能主要有一对一实时聊天、能传输文字、表情、文件,支持好友添加、删除、分组。下文主要介绍已经实现的蓝牙通信流程。

操作流程

查找已配对设备(即好友列表)

代码实现:

private void findDevice(){
    // 获得已经保存的配对设备
    Set<BluetoothDevice> pairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
    if (pairedDevices.size() > 0) {
        mGroupFriendListData.clear();
        GroupInfo groupInfo = new GroupInfo();
        groupInfo.setGroupName(BluetoothAdapter.getDefaultAdapter().getName());
        List<FriendInfo> friendInfoList = new ArrayList<>();
        for (BluetoothDevice device : pairedDevices) {
            FriendInfo friendInfo = new FriendInfo();
            friendInfo.setIdentificationName(device.getName());
            friendInfo.setDeviceAddress(device.getAddress());
            friendInfo.setFriendNickName(device.getName());
            friendInfo.setOnline(false);
            friendInfo.setJoinTime(DateTime.getStringByFormat(new Date(), DateTime.DEFYMDHMS));
            friendInfo.setBluetoothDevice(device);
            friendInfoList.add(friendInfo);
        }
        groupInfo.setFriendList(friendInfoList);
        groupInfo.setOnlineNumber(0);
        mGroupFriendListData.add(groupInfo);
        mGroupFriendAdapter.setGroupInfoList(mGroupFriendListData);
    }
}

好友列表示例图:

好友列表

启用设备的可发现性

如果要让本地设备可以被其他设备发现,那么就要调用ACTION_REQUEST_DISCOVERABLE操作意图的startActivityForResult(Intent, int)方法。这个方法会向系统设置发出一个启用可发现模式的请求。默认情况下,设备的可发现模式会持续120秒。通过给Intent对象添加EXTRA_DISCOVERABLE_DURATION附加字段,可以定义不同持续时间。应用程序能够设置的最大持续时间是3600秒,0意味着设备始终是可发现的。任何小于0或大于3600秒的值都会自动的被设为120秒。例如,以下代码把持续时间设置为300秒:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值