下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個BLE通信軟件
本文源碼/upload/information/20210522/379/526217.jpg具體實現(xiàn)/upload/information/20210522/379/526221.jpg/upload/information/20210522/379/526223.jpg2.掃描設(shè)備Widget::Widget(QWidget
*parent)
:
QWidget(parent)
,
ui(new
Ui::Widget)
{
ui->setupUi(this);
//創(chuàng)建搜索服務(wù):https://doc.qt.io/qt-5/qbluetoothdevicediscoveryagent.html
discoveryAgent
=new
QBluetoothDeviceDiscoveryAgent(this);
//設(shè)置BLE的搜索時間
discoveryAgent->setLowEnergyDiscoveryTimeout(20000);
connect(discoveryAgent,SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),this,SLOT(addBlueToothDevicesToList(QBluetoothDeviceInfo)));//找到設(shè)備之后添加到列表顯示出來
connect(discoveryAgent,
SIGNAL(finished()),
this,
SLOT(scanFinished()));
connect(discoveryAgent,
SIGNAL(canceled()),
this,
SLOT(scanCanceled()));
connect(this,
SIGNAL(returnAddress(QBluetoothDeviceInfo)),
this,
SLOT(createCtl(QBluetoothDeviceInfo)));
//開始進行設(shè)備搜索
discoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod);
}3.將掃描結(jié)果添加到QListWidget中//deviceDiscovered
signals
對應(yīng)的槽函數(shù)
void
Widget::addBlueToothDevicesToList(const
QBluetoothDeviceInfo
&info)
{
if
(info.coreConfigurations()
&
QBluetoothDeviceInfo::LowEnergyCoreConfiguration)
//獲取設(shè)備信息,并判斷該設(shè)備是否為BLE設(shè)備
{
//格式化設(shè)備地址和設(shè)備名稱
QString
label
=
QString("%1
%2").arg(info.address().toString()).arg(());
//檢查設(shè)備是否已存在,避免重復添加
QList<QListWidgetItem
*>
items
=
ui->ctrBleList->findItems(label,
Qt::MatchExactly);
//不存在則添加至設(shè)備列表
if
(items.empty())
{
QListWidgetItem
*item
=
new
QListWidgetItem(label);
ui->ctrBleList->addItem(item);
devicesList.append(info);
}
}
}4.連接藍牙,停止掃描void
Widget::on_btnConnectBle_clicked()
{
//確認選取了某一個藍牙設(shè)備
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);
//發(fā)送自定義signals==>執(zhí)行slots:createCtl
emit
returnAddress(choosenDevice);
//停止搜索服務(wù)
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())
{
//返回特征的屬性。
//這些屬性定義了特征的訪問權(quán)限。
if(perties()
&
QLowEnergyCharacteristic::WriteNoResponse
||
perties()
&
QLowEnergyCharacteristic::Write)
{
ui->ctrSystemLogInfo->insertPlainText("\n具有寫權(quán)限!");
m_writeCharacteristic
=
c;
//保存寫權(quán)限特性
if(perties()
&
QLowEnergyCharacteristic::WriteNoResponse)
{
m_writeMode
=
QLowEnergyService::WriteWithoutResponse;
}
else
{
m_writeMode
=
QLowEnergyService::WriteWithResponse;
}
}
if(perties()
&
QLowEnergyCharacteristic::Read)
{
m_readCharacteristic
=
c;
//保存讀權(quán)限特性
}
//描述符定義特征如何由特定客戶端配置。
m_notificationDesc
=
c.descriptor(QBluetoothUuid::ClientCharacteristicConfiguration);
//值為真
if(m_notificationDesc.isValid())
{
//寫描述符
m_bleServer->writeDescriptor(m_notificationDesc,
QByteArray::fromHex("0100"));
ui->ctrSystemLogInfo->insertPlainText("\n寫描述符!");
}
}
}
}
}6.發(fā)送數(shù)據(jù)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.寫入數(shù)據(jù)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();//從設(shè)備斷開鏈接
delete
ui;
}界面布局/upload/infor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 促銷禮品購買合同
- 汽車配件采購合同案例
- 保險代理服務(wù)合同協(xié)議
- 購房合同范例格式
- 稻谷購銷合同格式
- 假期校園守護合同
- 投訴房市買賣合同糾紛
- 標準房屋買賣合同空表
- 電子產(chǎn)品維修服務(wù)合同模板
- 電子信息行業(yè)智能化電子產(chǎn)品與解決方案
- 心律失常PPT醫(yī)學課件
- 陜西省咸陽市秦都區(qū)2023-2024學年八年級上學期1月期末考試語文試題
- 校園眼鏡店 項目招商引資方案
- 高中語文統(tǒng)編版(部編版)必修 上冊第二單元4《喜看稻菽千重浪》《心有一團火 溫暖中人心》《“探界者”鐘揚》群文閱讀
- 生物制藥行業(yè)的經(jīng)營管理制度
- HACCP計劃年度評審報告
- 中職語文教案:高爾基(節(jié)選)教案
- 駕駛服務(wù)外包投標方案(完整版)
- 大學課件-機電傳動控制(完整)
- 2023-2024學年山東省德州市九年級上學期期末化學質(zhì)量檢測試題(含答案)
- 童年試題附答案
評論
0/150
提交評論