【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個BLE通信軟件_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個BLE通信軟件_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個BLE通信軟件_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個BLE通信軟件_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么實現(xiàn)一個BLE通信軟件_第5頁
免費預覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論