手把手教你Android手机与BLE终端通信--连接,发送和接收数据

本文详细介绍了如何使用Android手机与BLE(蓝牙低功耗)终端进行连接,以及在连接后如何发送和接收数据。作者强调了在处理长信息时避免丢包的方法,并提供了一个实现示例,包括连接回调、数据接收和发送的代码片段。此外,还分享了配套的apk文件和串口助手工具供读者实践。
摘要由CSDN通过智能技术生成

    如果你还没有看上一篇 手把手教你Android手机与BLE终端通信--搜索,你就先看看吧,因为这一篇要接着讲搜索到蓝牙后的连接,和连接后的发送和接收数据。


    评论里有很多人问如果一条信息特别长,怎么不丢包,或者怎么判断一个完整的信息发送完了呢。我写的时候连的串口是我们公司硬件工程师设计的,他定义好了信息的格式,什么字符开头,什么字符结尾,中间哪几位代表什么意思,我如果不能成功取到一对开头和结尾并且长度也符合我就会丢弃那点信息,取得的完整信息则会根据硬件工程师的文档取出app相应地方用到的相应信息,嗯,就是这样。如果你不知道一个串口发给你什么信息,那一定是你拿来玩的串口,工作中用到的都是定制的,不然连接串口干什么呢。

    我的基本实现就是所有蓝牙操作都写在BluetoothController中,他有消息要发送时发送到BLEService中,service再发广播提示MainActivity更新页面。好了,切入正题。。

    1,连接

    首先点击搜索到的蓝牙的listview,连接点击的那个蓝牙:

listview.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int index,
					long arg3) {
				BluetoothController.getInstance().connect(list.get(index));
			}
		});
connect方法仍然写在controller中,那个与蓝牙控制类。
/**
	 * 连接蓝牙设备
	 * 
	 * @param device
	 *            待连接的设备
	 */
	public void connect(EntityDevice device) {
		deviceAddress=device.getAddress();
		deviceName=device.getName();
		BluetoothDevice localBluetoothDevice = bleAdapter
				.getRemoteDevice(device.getAddress());
		if (bleGatt != null) {

			bleGatt.disconnect();
			bleGatt.close();
			bleGatt = null;
		}
		bleGatt = localBluetoothDevice.connectGatt(App.app, false,
				bleGattCallback);
	}
bleGatt是与蓝牙沟通的控制类,系统自带的BluetoothGatt类,它可以连接,断开某设备,或者获取服务,写数据。蓝牙有很多服务,但我们要找那个可读写的服务,下面会有查找服务。

你应该注意到bleGattCallback,BluetoothGattCallback,也是系统自带的类,是连接回调类,连接后出现什么情况怎么处理就在这里了。它有很多方法需要重写,我们只重写两三个。关于连接我们需要重写的是onConnectionStateChange(BluetoothGatt paramAnonymousBluetoothGatt, int oldStatus,int newStatus)&#

评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值