【移动应用开发技术】Android中怎么实现一个BLE通信软件_第1页
【移动应用开发技术】Android中怎么实现一个BLE通信软件_第2页
【移动应用开发技术】Android中怎么实现一个BLE通信软件_第3页
【移动应用开发技术】Android中怎么实现一个BLE通信软件_第4页
【移动应用开发技术】Android中怎么实现一个BLE通信软件_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论