下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么实现一个BLE通信软件
本文源码/upload/information/20210522/379/526217.jpg具体实现/upload/information/20210522/379/526221.jpg/upload/information/20210522/379/526223.jpg2.扫描设备Widget::Widget(QWidget
*parent)
:
QWidget(parent)
,
ui(new
Ui::Widget)
{
ui->setupUi(this);
//创建搜索服务:https://doc.qt.io/qt-5/qbluetoothdevicediscoveryagent.html
discoveryAgent
=new
QBluetoothDeviceDiscoveryAgent(this);
//设置BLE的搜索时间
discoveryAgent->setLowEnergyDiscoveryTimeout(20000);
connect(discoveryAgent,SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),this,SLOT(addBlueToothDevicesToList(QBluetoothDeviceInfo)));//找到设备之后添加到列表显示出来
connect(discoveryAgent,
SIGNAL(finished()),
this,
SLOT(scanFinished()));
connect(discoveryAgent,
SIGNAL(canceled()),
this,
SLOT(scanCanceled()));
connect(this,
SIGNAL(returnAddress(QBluetoothDeviceInfo)),
this,
SLOT(createCtl(QBluetoothDeviceInfo)));
//开始进行设备搜索
discoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod);
}3.将扫描结果添加到QListWidget中//deviceDiscovered
signals
对应的槽函数
void
Widget::addBlueToothDevicesToList(const
QBluetoothDeviceInfo
&info)
{
if
(info.coreConfigurations()
&
QBluetoothDeviceInfo::LowEnergyCoreConfiguration)
//获取设备信息,并判断该设备是否为BLE设备
{
//格式化设备地址和设备名称
QString
label
=
QString("%1
%2").arg(info.address().toString()).arg(());
//检查设备是否已存在,避免重复添加
QList<QListWidgetItem
*>
items
=
ui->ctrBleList->findItems(label,
Qt::MatchExactly);
//不存在则添加至设备列表
if
(items.empty())
{
QListWidgetItem
*item
=
new
QListWidgetItem(label);
ui->ctrBleList->addItem(item);
devicesList.append(info);
}
}
}4.连接蓝牙,停止扫描void
Widget::on_btnConnectBle_clicked()
{
//确认选取了某一个蓝牙设备
if(!ui->ctrBleList->currentItem()->text().isEmpty())
{
//获取选择的地址
QString
bltAddress
=
ui->ctrBleList->currentItem()->text().left(17);
for
(int
i
=
0;
i<devicesList.count();
i++)
{
//地址对比
if(devicesList.at(i).address().toString().left(17)
==
bltAddress)
{
QBluetoothDeviceInfo
choosenDevice
=
devicesList.at(i);
//发送自定义signals==>执行slots:createCtl
emit
returnAddress(choosenDevice);
//停止搜索服务
discoveryAgent->stop();
break;
}
}
}
}5.获取特征void
Widget::searchCharacteristic()
{
if(m_bleServer)
{
QList<QLowEnergyCharacteristic>
list=m_bleServer->characteristics();
qDebug()<<"[xiaohage]list.count()="<<list.count();
//遍历characteristics
for(int
i=0;i<list.count();i++)
{
QLowEnergyCharacteristic
c=list.at(i);
/*如果QLowEnergyCharacteristic对象有效,则返回true,否则返回false*/
if(c.isValid())
{
//返回特征的属性。
//这些属性定义了特征的访问权限。
if(perties()
&
QLowEnergyCharacteristic::WriteNoResponse
||
perties()
&
QLowEnergyCharacteristic::Write)
{
ui->ctrSystemLogInfo->insertPlainText("\n具有写权限!");
m_writeCharacteristic
=
c;
//保存写权限特性
if(perties()
&
QLowEnergyCharacteristic::WriteNoResponse)
{
m_writeMode
=
QLowEnergyService::WriteWithoutResponse;
}
else
{
m_writeMode
=
QLowEnergyService::WriteWithResponse;
}
}
if(perties()
&
QLowEnergyCharacteristic::Read)
{
m_readCharacteristic
=
c;
//保存读权限特性
}
//描述符定义特征如何由特定客户端配置。
m_notificationDesc
=
c.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration);
//值为真
if(m_notificationDesc.isValid())
{
//写描述符
m_bleServer->writeDescriptor(m_notificationDesc,
QByteArray::fromHex("0100"));
ui->ctrSystemLogInfo->insertPlainText("\n写描述符!");
}
}
}
}
}6.发送数据void
Widget::SendMsg(QString
text)
{
QByteArray
array=text.toLocal8Bit();
m_bleServer->writeCharacteristic(m_writeCharacteristic,array,
m_writeMode);
}
void
Widget::on_btnSendData_clicked()
{
SendMsg("Hello
World");
}7.写入数据void
Widget::BleServiceCharacteristicRead(const
QLowEnergyCharacteristic
&c,const
QByteArray
&value)
{
Q_UNUSED(c)
ui->ctrSystemLogInfo->insertPlainText("\n当特征读取请求成功返回其值时:");
ui->ctrSystemLogInfo->insertPlainText(QString(value));
}8.断开连接Widget::~Widget()
{
if(!(m_BLEController->state()
==
QLowEnergyController::UnconnectedState))
m_BLEController->disconnectFromDevice();//从设备断开链接
delete
ui;
}界面布局/upload/infor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加快发展我国现代流通业的经济分析
- 轻医美面诊知识培训课件
- 修车养护知识培训课件
- 临床葡萄糖酸钙药物适应症、常规剂量、特殊人群用药、不良反应、禁忌症及注意事项
- 四川省眉山市东坡区眉山育英实验学校2024-2025学年高二上学期1月期末地理试题( 含答案)
- 消防知识内部培训课件
- 全国浙教版信息技术高中选修3新授课 第三节 网络中的信息载体、通信线路和连接设备 说课稿
- 二零二五年度分手协议情感恢复咨询服务汇编2篇
- 期末评估测试卷(一) (含答案)2024-2025学年数学冀教版八年级下册
- 河北省省级联测2024-2025学年高二(上)期末化学试卷(含答案)
- 举办活动的申请书范文
- 瑶医目诊图-望面诊病现用图解-目诊
- 2022年四级反射疗法师考试题库(含答案)
- 新《安全生产法》培训测试题
- 政务礼仪-PPT课件
- 特种涂料类型——耐核辐射涂料的研究
- 化工装置常用英语词汇对照
- 物资采购管理流程图
- 无牙颌解剖标志
- 标准《大跨径混凝土桥梁的试验方法》
- 格拉斯哥昏迷评分(GCS)--表格-改良自用
评论
0/150
提交评论