Qt5.15藍(lán)牙開(kāi)發(fā)指南之典型用法

使用 Qt 藍(lán)牙 API 的典型用例是:

檢索有關(guān)本地藍(lán)牙設(shè)備的信息弧蝇。

掃描范圍內(nèi)的其他藍(lán)牙設(shè)備并檢索有關(guān)它們的信息碳褒。

使用 OBEX 對(duì)象推送配置文件 (OPP) 將文件推送到遠(yuǎn)程設(shè)備

使用串行端口配置文件 (SPP) 通過(guò) RFCOMM 通道連接到遠(yuǎn)程設(shè)備。

創(chuàng)建一個(gè)允許使用 SPP 的傳入連接的 RFCOMM 服務(wù)器看疗。

檢索有關(guān)低功耗藍(lán)牙設(shè)備的規(guī)范沙峻。

連接到低功耗藍(lán)牙設(shè)備。

從低功耗藍(lán)牙設(shè)備接收廣告两芳。

請(qǐng)注意摔寨,Android 和 Windows 不支持對(duì)象推送配置文件。

注意:部分 RFCOMM 功能不能由 Qt 在 Windows 上配置怖辆。服務(wù)的ServiceClassIds和ProtocolDescriptorList是自動(dòng)填充的是复。因此,使用這些字段的自定義值注冊(cè)服務(wù)可能不會(huì)在 Windows 上產(chǎn)生預(yù)期的結(jié)果竖螃。

注意:?Win32 后端不支持接收信號(hào)強(qiáng)度指示器 (RSSI) 以及藍(lán)牙 LE 設(shè)備宣傳的制造商特定數(shù)據(jù)淑廊。此外,只能找到之前已通過(guò) Windows 設(shè)置配對(duì)的設(shè)備特咆。

檢索本地設(shè)備信息

Qt 藍(lán)牙 API 有三個(gè)主要用途季惩。第一個(gè)是獲取本地和遠(yuǎn)程設(shè)備信息。檢索設(shè)備信息的第一步是檢查設(shè)備上的藍(lán)牙是否可用,并讀取本地設(shè)備地址和名稱(chēng)画拾。QBluetoothLocalDevice是提供所有這些信息的類(lèi)关摇。此外,您可以使用它來(lái)打開(kāi)/關(guān)閉藍(lán)牙碾阁、設(shè)置設(shè)備的可見(jiàn)性并確定當(dāng)前連接输虱。

QBluetoothLocalDevice?localDevice;QString?localDeviceName;//?Check?if?Bluetooth?is?available?on?this?deviceif?(localDevice.isValid())?{

????//?Turn?Bluetooth?on

????localDevice.powerOn();

????//?Read?local?device?name

????localDeviceName?=?localDevice.name();

????//?Make?it?visible?to?others

????localDevice.setHostMode(QBluetoothLocalDevice::HostDiscoverable);

????//?Get?connected?devices

????QList<QBluetoothAddress>?remotes;

????remotes?=?localDevice.connectedDevices();}

掃描藍(lán)牙設(shè)備

與QBluetoothLocalDevice類(lèi)似,API 提供QBluetoothDeviceInfo脂凶,它為遠(yuǎn)程設(shè)備提供類(lèi)似的信息宪睹。盡管您可以自己創(chuàng)建QBluetoothDeviceInfo對(duì)象并用數(shù)據(jù)填充它們,但更簡(jiǎn)單的方法是使用QBluetoothDeviceDiscoveryAgent開(kāi)始自動(dòng)搜索可連接范圍內(nèi)的可見(jiàn)藍(lán)牙設(shè)備蚕钦。

void?MyClass::startDeviceDiscovery(){

????//?Create?a?discovery?agent?and?connect?to?its?signals

????QBluetoothDeviceDiscoveryAgent?*discoveryAgent?=?new?QBluetoothDeviceDiscoveryAgent(this);

????connect(discoveryAgent,?SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),

????????????this,?SLOT(deviceDiscovered(QBluetoothDeviceInfo)));

????//?Start?a?discovery

????discoveryAgent->start();

????//...}//?In?your?local?slot,?read?information?about?the?found?devicesvoid?MyClass::deviceDiscovered(const?QBluetoothDeviceInfo?&device){

????qDebug()?<<?"Found?new?device:"?<<?device.name()?<<?'('?<<?device.address().toString()?<<?')';}

將文件推送到遠(yuǎn)程設(shè)備

找到所需設(shè)備后亭病,Qt 藍(lán)牙提供了兩個(gè)主要用例。更簡(jiǎn)單的一種是通過(guò) Obex 對(duì)象推送配置文件 (OPP) 發(fā)送文件嘶居。顧名思義罪帖,此配置文件可以將文件從一臺(tái)設(shè)備推送到另一臺(tái)設(shè)備。目前無(wú)法拉取文件或?yàn)g覽遠(yuǎn)程文件系統(tǒng)邮屁。該配置文件不需要在交換數(shù)據(jù)之前將兩個(gè)設(shè)備配對(duì)整袁。要將文件推送到遠(yuǎn)程設(shè)備,請(qǐng)創(chuàng)建一個(gè)QBluetoothTransferRequest并要求QBluetoothTransferManager通過(guò)調(diào)用其put()函數(shù)來(lái)推送包含在請(qǐng)求中的文件佑吝。

//?Create?a?transfer?managerQBluetoothTransferManager?*transferManager?=?new?QBluetoothTransferManager(this);//?Create?the?transfer?request?and?file?to?be?sentQBluetoothAddress?remoteAddress("00:11:22:33:44:55:66");QBluetoothTransferRequest?request(remoteAddress);QFile?*file?=?new?QFile("testfile.txt");//?Ask?the?transfer?manager?to?send?itQBluetoothTransferReply?*reply?=?transferManager->put(request,?file);if?(reply->error()?==?QBluetoothTransferReply::NoError)?{

????//?Connect?to?the?reply's?signals?to?be?informed?about?the?status?and?do?cleanups?when?done

????QObject::connect(reply,?SIGNAL(finished(QBluetoothTransferReply*)),

?????????????????????this,?SLOT(transferFinished(QBluetoothTransferReply*)));

????QObject::connect(reply,?SIGNAL(error(QBluetoothTransferReply::TransferError)),

?????????????????????this,?SLOT(error(QBluetoothTransferReply::TransferError)));}?else?{

????qWarning()?<<?"Cannot?push?testfile.txt:"?<<?reply->errorString();}

在設(shè)備之間交換數(shù)據(jù)

在兩個(gè)啟用藍(lán)牙的設(shè)備之間進(jìn)行通信的更靈活的方法是創(chuàng)建一個(gè)虛擬串行端口連接并通過(guò)該連接自由交換數(shù)據(jù)坐昙。這可以通過(guò)串行端口配置文件 (SPP) 來(lái)完成。串行端口配置文件模擬通過(guò)藍(lán)牙傳輸協(xié)議 RFCOMM 的串行連接芋忿。

為了能夠接收傳入的 SPP 連接炸客,您需要使用QBluetoothServer監(jiān)聽(tīng)傳入的連接。

rfcommServer?=?new?QBluetoothServer(QBluetoothServiceInfo::RfcommProtocol,?this);connect(rfcommServer,?&QBluetoothServer::newConnection,

????????this,?QOverload<>::of(&ChatServer::clientConnected));bool?result?=?rfcommServer->listen(localAdapter);if?(!result)?{

????qWarning()?<<?"Cannot?bind?chat?server?to"?<<?localAdapter.toString();

????return;}

使用QBluetoothSocket從扮演客戶(hù)端角色的另一臺(tái)設(shè)備連接到此服務(wù)器:

void?ChatClient::startClient(const?QBluetoothServiceInfo?&remoteService){

????if?(socket)

????????return;

????//?Connect?to?service

????socket?=?new?QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);

????qDebug()?<<?"Create?socket";

????socket->connectToService(remoteService);

????qDebug()?<<?"ConnectToService?done";

????connect(socket,?&QBluetoothSocket::readyRead,?this,?&ChatClient::readSocket);

????connect(socket,?&QBluetoothSocket::connected,?this,?QOverload<>::of(&ChatClient::connected));

????connect(socket,?&QBluetoothSocket::disconnected,?this,?&ChatClient::disconnected);

????connect(socket,?QOverload<QBluetoothSocket::SocketError>::of(&QBluetoothSocket::error),

????????????this,?&ChatClient::onSocketErrorOccurred);}

使用這種連接允許雙向交換任何形式的數(shù)據(jù)戈钢。它非常適合游戲或在兩個(gè)設(shè)備上的應(yīng)用程序的兩個(gè)實(shí)例之間同步狀態(tài)痹仙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市殉了,隨后出現(xiàn)的幾起案子开仰,更是在濱河造成了極大的恐慌,老刑警劉巖宣渗,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抖所,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡痕囱,警方通過(guò)查閱死者的電腦和手機(jī)田轧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鞍恢,“玉大人傻粘,你說(shuō)我怎么就攤上這事每窖。” “怎么了弦悉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵窒典,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我稽莉,道長(zhǎng)瀑志,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任污秆,我火速辦了婚禮劈猪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘良拼。我一直安慰自己战得,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布庸推。 她就那樣靜靜地躺著常侦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贬媒。 梳的紋絲不亂的頭發(fā)上聋亡,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音掖蛤,去河邊找鬼杀捻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚓庭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仅仆,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼器赞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了墓拜?” 一聲冷哼從身側(cè)響起港柜,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咳榜,沒(méi)想到半個(gè)月后夏醉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涌韩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年畔柔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臣樱。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靶擦,死狀恐怖腮考,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玄捕,我是刑警寧澤踩蔚,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站枚粘,受9級(jí)特大地震影響馅闽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜馍迄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一捞蛋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柬姚,春花似錦拟杉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至撕捍,卻和暖如春拿穴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忧风。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工默色, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狮腿。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓腿宰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親缘厢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吃度,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 最近項(xiàng)目使用藍(lán)牙,之前并沒(méi)有接觸贴硫,還是發(fā)現(xiàn)了很多坑椿每,查閱了很多資料,說(shuō)的迷迷糊糊英遭,今天特查看官方文檔间护。 說(shuō)下遇到的...
    King9527閱讀 1,800評(píng)論 0 1
  • 一、前言: 普通藍(lán)牙設(shè)備官方文檔 Android 平臺(tái)包含藍(lán)牙網(wǎng)絡(luò)堆棧支持挖诸,憑借此支持汁尺,設(shè)備能以無(wú)線方式與其他藍(lán)牙...
    因?yàn)槲业男?/span>閱讀 8,727評(píng)論 1 9
  • 前言 在眾多的消費(fèi)電子類(lèi)產(chǎn)品中,藍(lán)牙作為一種簡(jiǎn)易的通訊方式税灌,因此功耗小均函、體積小亿虽、成本低等優(yōu)勢(shì),被廣泛的應(yīng)用于耳機(jī)苞也、...
    心若冰清_閱讀 2,469評(píng)論 0 10
  • 聲明 普通藍(lán)牙設(shè)備官方文檔 Android 平臺(tái)包含藍(lán)牙網(wǎng)絡(luò)堆棧支持洛勉,憑借此支持,設(shè)備能以無(wú)線方式與其他藍(lán)牙設(shè)備交...
    bug喵喵閱讀 647評(píng)論 0 0
  • 普通藍(lán)牙設(shè)備官方文檔 Android 平臺(tái)包含藍(lán)牙網(wǎng)絡(luò)堆棧支持如迟,憑借此支持收毫,設(shè)備能以無(wú)線方式與其他藍(lán)牙設(shè)備交換數(shù)據(jù)...
    sydMobile閱讀 69,549評(píng)論 5 43