android 蓝牙4.0怎么通过setcharacteristicnotification来接收信息

android 蓝牙4.0怎么通过setcharacteristicnotification来接收信息,第1张

最近接了一个新项目,但是对于蓝牙BLE并不大了解。。。这个问题卡我我很久。。一直不知道是哪里错了。onCharacteristicChanged这个方法一直不回调

我的项目需要连接一个蓝牙40的设备,用Android BLE 我这边设置了扫描到蓝牙有一个服务,三个特征,分别是 indicate,write,read。我在链接设备后。然后订阅indicate的 characteristic

mBluetoothLeServicesetCharacteristicNotification(mNotifyCharacteristic, true);

mBluetoothLeServicejava

public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enabled) {

if (mBluetoothAdapter == null || mBluetoothGatt == null) {

Logw(TAG, "BluetoothAdapter not initialized");

return;

}

与蓝牙开发主要的相关类是以下四个

知道对应API后就可以进行对应的蓝牙开发,这里以获取蓝牙设备为例子

}

搜索设备的回调则需要通过注册广播的形式来获取

定义广播

之后就可以进行个人的一些 *** 作

要实现蓝牙聊天则涉及到蓝牙之间的传输通信,前面也说到了,这里肯定就是用到BluetoothServerSocket以及BluetoothSocket。

蓝牙传输通信相当于服务器端与客户端之间的通信,只不过不同是这里每一个蓝牙设备本身自己 既充当服务器端也充当客户端 ,大致的关系就是

注意,这些连接都是阻塞式的,都要放在线程里去执行。

可以看到,当BluetoothServerSocket监听到有设备连接的时候,就会调用dataTransfer开启一个数据传输。

需要一个ConnectThread来发起

之后建立连接之后就会调用dataTransfer来进行数据传输,同样也需要一个线程来维护数据传输

蓝牙聊天则是基于上面三个线程来进行实现,同样,对于蓝牙文件间的传输也是同个道理,通过输入输出流来进行处理。之后的 *** 作就比较容易处理了

蓝牙聊天

Android 蓝牙开发基本流程

首先,要 *** 作蓝牙,先要在AndroidManifestxml里加入权限

<uses-permissionandroid:name="androidpermissionBLUETOOTH_ADMIN" />

<uses-permissionandroid:name="androidpermissionBLUETOOTH" />

然后,看下api,Android所有关于蓝牙开发的类都在androidbluetooth包下,如下图,只有8个类

而我们需要用到了就只有几个而已:

1BluetoothAdapter 顾名思义,蓝牙适配器,直到我们建立bluetoothSocket连接之前,都要不断 *** 作它BluetoothAdapter里的方法很多,常用的有以下几个:cancelDiscovery() 根据字面意思,是取消发现,也就是说当我们正在搜索设备的时候调用这个方法将不再继续搜索disable()关闭蓝牙enable()打开蓝牙,这个方法打开蓝牙不会d出提示,更多的时候我们需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户:Intemtenabler=new Intent(BluetoothAdapterACTION_REQUEST_ENABLE);

startActivityForResult(enabler,reCode);//同startActivity(enabler);

getAddress()获取本地蓝牙地址getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdaptergetName()获取本地蓝牙名称getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备getState()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)isDiscovering()判断当前是否正在查找设备,是返回trueisEnabled()判断蓝牙是否打开,已打开返回true,否则,返回falselistenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步startDiscovery()开始搜索,这是搜索的第一步2BluetoothDevice看名字就知道,这个类描述了一个蓝牙设备createRfcommSocketToServiceRecord(UUIDuuid)根据UUID创建并返回一个BluetoothSocket这个方法也是我们获取BluetoothDevice的目的——创建BluetoothSocket

这个类其他的方法,如getAddress(),getName(),同BluetoothAdapter

3BluetoothServerSocket如果去除了Bluetooth相信大家一定再熟悉不过了,既然是Socket,方法就应该都差不多,这个类一种只有三个方法

两个重载的accept(),accept(inttimeout)两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行!

还有一点需要注意的是,这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接

close()这个就不用说了吧,翻译一下——关闭!4BluetoothSocket,跟BluetoothServerSocket相对,是客户端一共5个方法,不出意外,都会用到

close(),关闭connect()连接getInptuStream()获取输入流getOutputStream()获取输出流getRemoteDevice()获取远程设备,这里指的是获取bluetoothSocket指定连接的那个远程蓝牙设备

以上就是关于android 蓝牙4.0怎么通过setcharacteristicnotification来接收信息全部的内容,包括:android 蓝牙4.0怎么通过setcharacteristicnotification来接收信息、Android蓝牙开发——实现蓝牙聊天、Android蓝牙怎么检测连接状态等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9397545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存