鴻蒙系統應用開發之基於API6的藍芽開發

ataola發表於2023-01-30

寫在前面

由題意得,我今天講的是基於鴻蒙系統的相容JS的類Web開發正規化的軟體應用開發之藍芽開發,它是基於API6的,至於為什麼是基於API6,請你花幾分鐘看一下我之前寫的這個系列教程的第四篇“ 鴻蒙系統應用開發之入門解說",地址是:https://www.yuque.com/ataola/cptslg/dx885eduha4kouiv 。其實也有更加新的API出來,那我這裡就整理好放下面了。

@system.bluetooth(API 6)

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-system-bluetooth-0000001281001150

@ohos.bluetooth(API 7+)

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-bluetooth-0000001281480546

需求分析

大致是這樣子的,我們要基於鴻蒙系統提供的一些底層實現的API去進行軟體應用開發。具體要實現的功能點是:

  • 藍芽的連線與斷開
  • 讀取附近藍芽裝置列表並對其進行匹配
  • 已匹配裝置的取消匹配以及連線

技術調研

額,沒什麼好調研的,由於一些不可描述的原因,我這邊是用API6開發的,它只有四個API,照著看一下複製貼上示例程式碼就好了,然後能夠遇到的錯誤碼大致如下:

老規矩,拍拍手?,上菜。

思路分析

簡單地分析一下 ,大致是這樣子的。你需要一些變數去儲存獲取的資料、去做狀態、資料的展示,具體如下:

然後你要實現一些方法,具體的如下:

好,在理清完思路我們開始寫點程式碼。

技術實現

配置

這一塊的話,是這樣子的。我們在底層系統上安裝完軟體,需要一些許可權,那麼這個配置主要是為了獲取這些許可權要配的,具體的如下

好的,下面我們貼出配置的詳細程式碼

{
  "app": {
    "bundleName": "com.example.myapplication",
    "vendor": "example",
    "version": {
      "code": 1000000,
      "name": "1.0.0"
    }
  },
  "deviceConfig": {
  },
  "module": {
    "package": "com.example.myapplication",
    "name": ".MyApplication",
    "mainAbility": "com.example.myapplication.MainAbility",
    "deviceType": [
      "phone",
      "tablet",
      "tv",
      "wearable"
    ],
    "distro": {
      "deliveryWithInstall": true,
      "moduleName": "entry",
      "moduleType": "entry",
      "installationFree": false
    },
    "abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "name": "com.example.myapplication.MainAbility",
        "icon": "$media:icon",
        "description": "$string:mainability_description",
        "label": "$string:entry_MainAbility",
        "type": "page",
        "visible": true,
        "launchType": "standard"
      }
    ],
    "js": [
      {
        "pages": [
          "pages/index/index"
        ],
        "name": "default",
        "window": {
          "designWidth": 720,
          "autoDesignWidth": true
        }
      }
    ],
    "reqPermissions": [
      {
        "name": "ohos.permission.USE_BLUETOOTH",
        "reason": "$string:entry_MainAbility",
        "usedScene": {
          "ability": [
            "com.example.myapplication.MainAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.DISCOVER_BLUETOOTH",
        "reason": "$string:entry_MainAbility",
        "usedScene": {
          "ability": [
            "com.example.myapplication.MainAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.MANAGE_BLUETOOTH",
        "reason": "$string:entry_MainAbility",
        "usedScene": {
          "ability": [
            "com.example.myapplication.MainAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.LOCATION",
        "reason": "$string:entry_MainAbility",
        "usedScene": {
          "ability": [
            "com.example.myapplication.MainAbility"
          ],
          "when": "always"
        }
      }
    ]
  }
}

可以看到效果就是這樣子的,嗯。

虛擬碼實現

讀取周邊藍芽裝置的程式碼實現

簡單地呼叫下給的API介面,然後在成功的時候一把Map到藍芽裝置列表裡面去,然後取消訂閱發現。具體的如圖所示:

取消匹配藍芽裝置

把當前的裝置整個塞回藍芽裝置列表裡面去,然後在已匹配列表把它送走。

連線藍芽

還是呼叫官方提供的API,成功的話,把之前那個未連線的狀態反一下,然後把當前連線的藍芽裝置綁在當前藍芽裝置變數上

最後

讓我們來看一下,最後整出來的效果吧。

此處為語雀影片卡片,點選連結檢視:IMG_8899.MOV

勘誤

額,官網文件的程式碼這裡寫錯了,家人們複製貼上的時候把它替換成圖中所示的符號。

相關文章