Android蓝牙——自定义通讯框架FreeBlue
来源:互联网 发布:python股票交易策略 编辑:程序博客网 时间:2024/06/04 19:52
刚学Android时,自己写过一个基于蓝牙的五子棋联机对战APP。
分享地址:https://github.com/fcp12138/BlueChess
界面如下:
以上都是扯淡 = =
最近我重写了原来里面的蓝牙通讯逻辑,将整个逻辑通讯层进行优化封装起来,以备以后再次利用。重写构思的框架结构如下
地址分享在https://github.com/fcp12138/FreeBlue
蓝牙基础
蓝牙是一种10米内信息通讯的技术。一般分为一个服务端和一个客户端。程序执行上,
1、先服务端启动后等待连接
2、客户端根据已匹配的设备地址中,选择正在等待的服务器地址。
3、获得连接的接口,从中就可以获得数据流
服务端建立核心代码
// 要建立一个ServerSocket对象,需要使用adapter.listenUsingRfcommWithServiceRecord方法 serverSocket = bluetoothAdapter.listenUsingRfcommWithServiceRecord("myServerSocket", uuid); socket = serverSocket.accept(10000);//超时限10s //获得通道 outputStream = socket.getOutputStream(); inputStream = socket.getInputStream();
服务端建立连接
//远程蓝牙设备 BluetoothDevice bluetoothDevice = bluetoothAdapter.getRemoteDevice(address); socket = bluetoothDevice.createRfcommSocketToServiceRecord(uuid); socket.connect(); //获得通道 outputStream = socket.getOutputStream(); inputStream = socket.getInputStream();
使用这个框架
这个框架还是挺简单的,旨在分享自己的思路
在获得连接设备的地址(通过获取默认蓝牙适配器得到所有已配陪的设备)的基础上。创建BlueBuilder
public BlueBuilder(BlueCreator mBlueCreator,BlueData<T> blueData) { this.mBlueData = blueData; this.mBlueCreator = mBlueCreator; }
构造方法中,前者通过是BlueToothClient还是BlueToothServer来创建客户端还是服务端。第二个参数是要传输的类型,目前写了字符型和文件型。
之后添加必要的监听器并执行mBlueBuilder.create();
等待创建完成的回调就行。
/** * 初始化蓝牙连接 */ private void initView() { //判别类型 Intent intent = getIntent(); mBlueData = new BlueStringData();//字符通讯 if (intent.getExtras().getInt("type") == CREATE_CLIENT) { String address = intent.getExtras().getString(ADDRESS); mBlueBuilder = new BlueBuilder<String>(new BlueToothClient(address),mBlueData);//创建客户端 } else if (intent.getExtras().getInt("type") == CREATE_SERVER) { mBlueBuilder = new BlueBuilder<String>(new BlueToothServer(),mBlueData);//创建服务端 mBlueBuilder.enableBlueTooth(); } else { finish(); return; } mBlueBuilder.setOnCreateListener(new OnCreateListener() { @Override public void onCreateSuccess() { mBlueBuilder.receive(); mBlueBuilder.launchQueue(); Toast.makeText(LinkActivity.this,"onCreateSuccess",Toast.LENGTH_SHORT).show(); ((BlueStringData)(mBlueData)).setDataListener(LinkActivity.this); } @Override public void onCreateFail(Exception cause) { Toast.makeText(LinkActivity.this,"onCreateFail",Toast.LENGTH_SHORT).show(); finish(); } }); mBlueBuilder.create(); }
发送数据只需执行mBlueBuilder.send(str);
即可。其他例子demo中有。
发送数据实际是放入到PriorityBlockingQueue中等待执行发送,等排在第一个时就执行正真的发送操作。具体的发送和接受操作,交由BlueData类来执行。
0 0
- Android蓝牙——自定义通讯框架FreeBlue
- Android蓝牙通讯(三)————蓝牙通讯的实现
- Android蓝牙聊天,蓝牙通讯
- android蓝牙通讯
- Android蓝牙通讯
- android蓝牙通讯
- android蓝牙通讯
- Android蓝牙通讯模块
- Android蓝牙通讯
- Android蓝牙串口通讯
- Android蓝牙通讯(一)————蓝牙功能的相关权限
- Android蓝牙通讯(二)————蓝牙的相关操作
- Android蓝牙开发教程(三)——蓝牙设备相互通讯
- 蓝牙开发经验小结——蓝牙通讯
- Android 与蓝牙串口通讯
- 智能家居-Android蓝牙通讯2
- android蓝牙之间互相通讯
- Android BLE蓝牙通讯学习
- nginx+tomcat+memcached搭建服务器集群及负载均衡
- 虚拟机上rad hat网络相关设置
- Java直接通过Jacob调用AutoCAD接口
- 那些著名或非著名的iOS面试题-前编
- JSTL 格式化时间戳
- Android蓝牙——自定义通讯框架FreeBlue
- 去除datalist的下拉图标
- Java按行读取正在被动态写入的大文件实例--使用BufferedInputStream(2)
- Android 解决ListView嵌套GridView、GridView显示不正常的方法
- musql数据库定期跑批操作数据库,不必java后台写定时方法去操作。
- Swift ☞ 数组常用方法
- swift 3.0变化点
- [iOS 自动打包]shell脚本使用-ipa_build 脚本使用
- 字典的基础操作