国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

OpenHarmony BLE藍牙連接

系統 OpenHarmony
這里將介紹如何通過OpenHarmony提供的@ohos.bluetooth (藍牙接口)打開當前設備的藍牙,關閉藍牙,以及連接BLE藍牙設備。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

OpenHarmony BLE藍牙設備連接

1、簡介

OpenHarmony藍牙模塊提供了基礎的傳統藍牙能力以及BLE的掃描、廣播等功能,這里將介紹如何通過OpenHarmony提供的@ohos.bluetooth (藍牙接口)打開當前設備的藍牙,關閉藍牙,以及連接BLE藍牙設備。

2、設備與環境

  • 設備:九聯s905l3a機頂盒、開鴻智谷學生卡BLE藍牙設備
  • 系統:OpenHarmony 3.2 beta2
  • SDK:9

演示視頻:??OpenHarmony BLE藍牙設備連接??

3、邏輯流程

OpenHarmony BLE藍牙連接-開源基礎軟件社區

首先機頂盒在開始的時候獲取藍牙相關權限,然后通過OpenHarmony提供的藍牙接口打開藍牙,接著訂閱發現BLE設備發現事件,然后通過OpenHarmony提供的藍牙接口開啟BLE設備掃描,當發現到了BLE藍牙設備后,進行上報,BLE設備發現事件觸發,獲取到來自BLE設備的廣播信息包,然后進行BLE藍牙連接。

4、實現過程

(1)獲取藍牙相關權限

在使用藍牙接口之前,首先要讓設備獲取一下權限:

  • ohos.permission.USE_BLUETOOTH // 允許應用查看藍牙的配置。
  • ohos.permission.DISCOVER_BLUETOOTH // 允許應用配置本地藍牙,查找遠端設備且與之配對連接。
  • ohos.permission.LOCATION // 允許應用獲取設備位置信息。
  • ohos.permission.MANAGE_BLUETOOTH // 允許應用配對藍牙設備,并對設備的電話簿或消息進行訪問。

打開DevEco Studio 3.1.0.200,創建新的Stage項目,在項目中的module.json文件中添加相關權限:

"requestPermissions": [
{
"name": "ohos.permission.USE_BLUETOOTH",
"reason": "$string:grant_use_bluetooth",
"usedScene": {
"abilities": [
"MainAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.DISCOVER_BLUETOOTH",
"reason": "$string:grant_discovery_bluetooth",
"usedScene": {
"abilities": [
"MainAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.LOCATION",
"reason": "$string:grant_location",
"usedScene": {
"abilities": [
"MainAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.MANAGE_BLUETOOTH",
"reason": "$string:grant_manage_bluetooth",
"usedScene": {
"abilities": [
"MainAbility"
],
"when": "inuse"
}
}
]

(2)打開設備的藍牙

首先,通過調用 bluetooth.getState() 藍牙接口來獲取當前設備藍牙是否打開,并設置藍牙開關的標識位 isOn。

async aboutToAppear() {
// 等待獲取藍牙權限
await globalThis.abilityContext.requestPermissionsFromUser(['ohos.permission.USE_BLUETOOTH', 'ohos.permission.DISCOVER_BLUETOOTH', 'ohos.permission.LOCATION', 'ohos.permission.MANAGE_BLUETOOTH'])
logger.info(TAG, `獲取權限 grantPermission,requestPermissionsFromUser,PermissionRequestResult`)
// 獲取藍牙狀態
let state = bluetooth.getState()
// 判斷當前設備藍牙是否打開
if (state === bluetooth.BluetoothState.STATE_ON) {
this.isOn = true
}
if (state === bluetooth.BluetoothState.STATE_OFF) {
this.isOn = false
}
}

如果當前設備藍牙未打開,則通過調用 bluetooth.enableBluetooth() 藍牙接口來打開藍牙。

// 打開藍牙函數
initBluetooth() {
this.enable = bluetooth.enableBluetooth()
// 判斷藍牙是否成功打開
if(this.enable==true){
prompt.showToast({
message: 'Open bluetooth ' + this.enable,
duration: 2000,
});
}
}

(3)注冊發現BLE設備監聽器

在設備打開藍牙之后,通過調用 bluetooth.BLE.on('BLEDeviceFind') 藍牙接口來訂閱BLE設備發現上報事件。該接口參數如下:

OpenHarmony BLE藍牙連接-開源基礎軟件社區

通過注冊發現BLE設備監聽器,可以得到發現設備的集合,BLE設備的廣播包、地址、信號強度rssi,在這里發現獲取連接BLE設備名字的接口 getDeviceName 無法成功調用,所以自己通過解析廣播包來獲取設備名字。

// 訂閱BLE設備發現上報事件
// 獲取到的data包括BLE設備的廣播包、地址、信號強度rssi
bluetooth.BLE.on('BLEDeviceFind', (data) => {
logger.info(TAG, `enter on bluetoothBLEDeviceFind`)
logger.info("rgytl 開始掃描設備地址! 1")
if (data !== null && data.length > 0) {
logger.info("rgytl 開始掃描設備地址! 2")
if (this.discoveryBleList.indexOf(data[0]) === -1) {
// 把發現的設備地址存入列表
this.discoveryBleList.push(data[0].deviceId)
logger.info("rgytl ---- discoveryBleList = "+JSON.stringify(this.discoveryBleList))
// 讀取廣播包,解析廣播包,得到設備名字,并存入設備列表
var i = 0;
var x = data[0].data[i]
var y = data[0].data[i + 1]
while(y!=0x09 && i+x+2<data[0].data.byteLength){
i = i+x+1
x = data[0].data[i]
y = data[0].data[i+1]
}

let arr = data[0].data.slice(i+2,i+x+1)

var BLEName = ""
for(let j=0;j<arr.byteLength;j++){
BLEName+=String.fromCharCode(arr[j])
}
logger.info("rgytl ---- discoveryBleList = "+BLEName)
// 把通過廣播包解析的BLE設備名字存入設備名字列表
this.BleInfo.push(BLEName)
// 把發現的BLE設備信號存入設備信號強度列表
this.BleRssi.push(data[0].rssi)
logger.info("rgytl ---- discoveryBleList = "+data[0].rssi)
}
logger.info(TAG, `開啟掃描 discoveryBleList = ${JSON.stringify(this.discoveryBleList)}`)
}
})

(4)開啟BLE設備掃描

在完成訂閱BLE設備發現上報事件后,通過調用 bluetooth.BLE.startBLEScan 接口去開啟BLE設備掃描,通過該接口,可以對掃描BLE設備進行過濾,可以過濾的參數有:BLE設備的地址、名字、以及服務的UUID等。

OpenHarmony BLE藍牙連接-開源基礎軟件社區

在這里,我設置只掃描包含我BLE設備名字的BLE設備,這樣子就不會說掃描到一大堆其他的BLE設備,影響使用,只需要開啟一次掃描和訂閱一次BLE設備發現上報事件就可以了,使用的時候只要沒有關閉,就不需要重復調用。

// 設置藍牙BLE掃描模式(根據名字掃描)
bluetooth.BLE.startBLEScan(
[{
deviceId: null,
name: "ble slave test",
serviceUuid: null
}],
{
interval: 0,
dutyMode: bluetooth.ScanDuty.SCAN_MODE_LOW_POWER,
matchMode: bluetooth.MatchMode.MATCH_MODE_AGGRESSIVE,
}
)

(5)連接BLE設備

在掃描到BLE設備之后,可以通過 on(‘BLEConnectionStateChange’) 來訂閱獲取BLE設備的連接狀態變化事件,在使用該接口之前,要先通過 bluetooth.BLE.createGattClientDevice('XX:XX:XX:XX:XX:XX') 接口創建一個可使用的GattClientDevice實例。

OpenHarmony BLE藍牙連接-開源基礎軟件社區

// 訂閱BEL狀態變化
if(this.BleOnflag){
// 只創建一個GattClient對象
this.BleOnflag = false
this.BLEDevice = bluetooth.BLE.createGattClientDevice(item);
// 訂閱獲取BLE設備的連接狀態變化事件
this.BLEDevice.on('BLEConnectionStateChange', (data) => {
console.log('bluetooth connectState state changed');
let connectState = data.state;
// 根據不通的連接狀態,提示不同的信息
if(JSON.stringify(connectState) == 0){
logger.info(`connectState = ${JSON.stringify(connectState)},斷開連接`)
prompt.showToast({
message: '斷開連接',
duration: 2000,
});
} else if(JSON.stringify(connectState) == 2){
logger.info(`connectState = ${JSON.stringify(connectState)},連接成功`)
prompt.showToast({
message: '連接成功',
duration: 2000,
});
} else if(JSON.stringify(connectState) == 1){
logger.info(`connectState = ${JSON.stringify(connectState)},正在連接`)
} else {
logger.info(`connectState = ${JSON.stringify(connectState)},正在斷連`)
}
logger.info(`connectState = ${JSON.stringify(connectState)}`);
})
}

在前面通過 bluetooth.BLE.createGattClientDevice(item) 創建一個GattClientDevice實例 BLEDevice 后,我們可以通過該實例去調用 connect() 方法連接BLE設備。注意,GattClientDevice實例 只需要創建一個就可以。

OpenHarmony BLE藍牙連接-開源基礎軟件社區

// 連接藍牙
let BLEConnect = this.BLEDevice.connect()
// 如果連接成功,則把BLE設備存入連接成功列表
if(BLEConnect){
this.deviceBleList.push(item)
}

(6)結尾處理

當不連接BLE設備的時候,要記得關閉BLE設備掃描,取消訂閱設備發現事件。

取消BLE設備連接,通過之前創建的GattClientDevice實例 BLEDevice 調用 disconnect() 方法斷開連接BLE設備。

Button("斷開")
.alignSelf(ItemAlign.Center)
.onClick(() => {
AlertDialog.show({
title: $r('app.string.disconnect'),
message: '此操作將會斷開該設備的連接',
primaryButton: {
value: $r('app.string.cancel'),
action: () => {
}
},
secondaryButton: {
value: $r('app.string.confirm'),
action: () => {
// 斷開連接BLE設備
let BLEdisConnect = this.BLEDevice.disconnect()
if(BLEdisConnect){
logger.info(`connectState BLEdisConnect = ${JSON.stringify(BLEdisConnect)},斷開連接`)
// 移出BLE設備連接列表
this.deviceBleList.pop(item)
}
}
}
})
})

在斷開連接、關閉藍牙之后,可以通過 off(‘connectStateChange’) 取消訂閱BLE連接狀態變化事件、bluetooth.BLE.stopBLEScan 停止BLE掃描、以及 bluetooth.BLE.off(‘BLEDeviceFind’) 取消訂閱BLE設備發現上報事件,最后通過 bluetooth.disableBluetooth() 關閉藍牙。

.onChange((isOn: boolean) => {
if (isOn) {
this.isOn = true
this.initBluetooth()
} else {
this.isOn = false
bluetooth.BLE.off('BLEDeviceFind',()=>{
logger.info("rgytl 取消BLE設備發現訂閱!")
})
bluetooth.BLE.stopBLEScan()
this.disable = bluetooth.disableBluetooth()
this.discoveryList = []
this.BleInfo = []
this.BleRssi = []
if(this.disable==true){
prompt.showToast({
message: 'Close bluetooth ' + this.disable,
duration: 2000,
});
}
}
})
5、參考文檔

??OpenAtom OpenHarmony 藍牙??

??應用權限列表??

??OpenHarmony Gitee 藍牙??

文章相關附件可以點擊下面的原文鏈接前往下載

 ??https://ost.51cto.com/resource/2700??

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-11-17 15:26:06

低功耗藍牙鴻蒙

2023-03-08 21:30:33

2015-09-22 11:04:24

藍牙4.0開發

2022-01-25 16:54:14

BLE操作系統鴻蒙

2022-06-07 10:40:05

藍牙鴻蒙

2021-10-30 07:55:00

BLE 藍牙開發

2015-02-27 16:03:26

Android源碼Bluetooth_4BLE藍牙通信

2023-09-19 15:58:13

Zigbee藍牙

2023-10-08 15:19:40

2022-09-06 15:25:22

Wifi設備開發

2022-01-12 14:45:26

鴻蒙HarmonyOS應用

2021-12-28 16:06:15

鴻蒙HarmonyOS應用

2010-01-08 15:35:30

Ubuntu連接

2021-03-16 16:07:37

物聯網藍牙連接IoT

2010-02-07 13:31:49

Ubuntu連接

2021-11-12 23:44:28

Windows 10Windows微軟

2023-09-20 11:46:54

藍牙物聯網IOT

2022-08-12 19:13:07

etswifi連接操作

2020-06-22 10:21:44

物聯網藍牙技術

2022-05-18 14:21:18

漏洞藍牙低功耗藍牙
點贊
收藏

51CTO技術棧公眾號

久久激情av| 午夜精品免费视频| heyzo高清中文字幕在线| 亚洲新声在线观看| 人妖一区二区三区| 久久www免费人成精品| 国产精品123区| 美女网站色免费| 欧美色播在线播放| 98色花堂精品视频在线观看| 欧美丰满少妇xxxxx| 日韩理论电影院| 视频一区二区三区在线观看| 成人av资源在线观看| 国产九九热视频| 在线成人av网站| 欧美日韩黄色| 成人永久免费| www.性欧美| 青青草在线免费视频| 亚洲女成人图区| 精品日本12videosex| 一区二区成人国产精品| 自拍偷自拍亚洲精品播放| 蜜桃av在线免费观看| 欧美精品激情视频| 性欧美videos另类喷潮| 日韩肉感妇bbwbbwbbw| 91精品国产综合久久久久久漫画| 精品一区二区三区中文字幕在线 | 亚洲精品偷拍| 成熟了的熟妇毛茸茸| 色综合久久久网| 麻豆精品蜜桃| 国产精品亚洲不卡a| 亚洲一区二区三区精品在线观看 | 一区二区三区国产精华| 欧美极品美女视频网站在线观看免费 | 亚洲午夜精品视频| 91亚洲自偷观看高清| 欧美日韩一区小说| 波多野结衣与黑人| 欧美日韩国产精品一区二区不卡中文 | 欧美综合天天夜夜久久| 日韩精品视频中文字幕| 视频一区在线免费观看| 午夜激情一区二区| 大奶在线精品| 中文字幕在线亚洲精品| 欧美色道久久88综合亚洲精品| 国产一区二区三区| 伊人婷婷久久| 欧美久久婷婷综合色| 国产一区二区观看| 免费看a级黄色片| 亚洲全黄一级网站| 日韩精品一区第一页| 欧美日韩国产综合视频| 国外成人在线播放| 成人动漫一区二区在线| 美女高潮视频在线看| 久久99久久精品国产| 激情亚洲一区二区三区四区 | 国产欧美日韩在线| 电影一区二区三| 亚洲成人av动漫| 欧美午夜一区二区三区免费大片| 伊人久久大香线蕉综合网蜜芽| 隔壁人妻偷人bd中字| 精品国产电影一区二区| 欧美日本不卡| 牛牛澡牛牛爽一区二区| 国产精品久久久久久一区二区| 久久综合精品国产一区二区三区| 国模套图日韩精品一区二区| 亚洲欧美影院| 欧美刺激午夜性久久久久久久| 国产精品vip| 牛牛热在线视频| 亚洲一区二区三区视频播放| 亚洲一区二区三区免费视频| 欧美黑白配在线| 亚欧激情乱码久久久久久久久| 久久国产色av| 国产日韩一级二级三级| 白嫩亚洲一区二区三区| 日本网站免费在线观看| 色综久久综合桃花网| 国产一区二区按摩在线观看| 日本不卡网站| 国产日产欧美一区二区| 亚洲日本中文字幕| 国产suv精品一区二区6| 国产精品一区二区免费福利视频| 亚洲欧洲精品成人久久奇米网| 日本三级视频在线观看| 91在线在线观看| 欧美日韩一区二区在线观看| 日韩视频中文| 激情网站在线| 国产肉体ⅹxxx137大胆| 精品国内亚洲在观看18黄| 国产亚洲一本大道中文在线| ccyy激情综合| 天堂资源av| 韩日午夜在线资源一区二区| 欧美大片一区二区| 国产一区二区三区免费播放| 国产精品久久久久久妇女| www.com操| 成人日韩在线电影| 欧美久久免费观看| 国产成人av一区| 猫咪成人在线观看| 免费a级毛片在线观看| 日本婷婷久久久久久久久一区二区| 亚洲国产美女久久久久| 99riav久久精品riav| 性欧美xxxx免费岛国不卡电影| 人操人视频在线观看| 亚洲欧美国产不卡| 久久香蕉频线观| 亚洲国产综合在线| 激情欧美日韩| 播放一区二区| 情趣网站在线观看| 亚洲精品国产一区| 欧美激情二区三区| 欧美午夜精品久久久久久久| 日本亚洲欧美天堂免费| 国产95亚洲| 国产在线日本| 亚洲 自拍 另类小说综合图区| 欧美一级视频在线观看| 欧美人与z0zoxxxx视频| 国产精品一区专区| 美女网站色精品尤物极品姐弟| 精品美女视频在线观看免费软件| 亚洲欧美日韩高清| 久久99视频免费| 日韩精品成人一区二区在线观看| 一区二区日本| 亚洲天堂网一区| 自拍视频在线| 多野结衣av一区| 日日夜夜亚洲| 亚洲视频1区| 亚洲3atv精品一区二区三区| 欧美夫妻性生活视频| 欧美日韩精品在线播放| 国内不卡的二区三区中文字幕| 300部国产真实乱| 国产精品理论片在线观看| 91久久午夜| 无码国模国产在线观看| 日韩理伦片在线| 激情婷婷综合网| 国产精品区一区二区三含羞草| 色悠悠久久久久| 欧美在线观看一二区| 国产午夜亚洲精品午夜鲁丝片| 亚洲专区在线| 九一成人免费视频| 日韩在线观看不卡| 老司机精品影院| 性综艺节目av在线播放| 国产色一区二区三区| 懂色av一区二区三区在线播放| 九九久久久久久久久激情| 777奇米成人网| 亚洲一区在线观看视频| 成a人片亚洲日本久久| 国产亚洲在线| 日韩一区三区| 亚洲精品高潮| 日韩成人av电影| 超碰caoporn久久| 中文在线资源在线| 少妇一级淫免费放| 在线天堂一区av电影| 国产a一区二区| 国产精品久久久久久久久免费| 久久久精品日本| 国产丝袜一区二区三区免费视频| 欧美日韩中国免费专区在线看| 国产色爱av资源综合区| 激情另类小说区图片区视频区| 亚洲毛片播放| 婷婷综合激情| 亚洲黄色录像| 一区二区日韩| 日本中文字幕视频一区| 国产剧情av在线播放| 国产成人高清精品| 国产鲁鲁视频在线观看免费| 在线免费视频福利| 诱人的瑜伽老师3hd中字| mm131国产精品| 黄色一级二级三级| 精品一卡二卡三卡|