写在前面

由题意得,我今天讲的是基于鸿蒙系统的兼容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,照着看一下复制粘贴示例代码就好了,然后能够遇到的错误码大致如下:

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

老规矩,拍拍手👏,上菜。

思路分析

简单地分析一下 ,大致是这样子的。你需要一些变量去存储获取的数据、去做状态、数据的展示,具体如下:

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

然后你要实现一些方法,具体的如下:

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

好,在理清完思路我们开始写点代码。

技术实现

配置

这一块的话,是这样子的。我们在底层系统上安装完软件,需要一些权限,那么这个配置主要是为了获取这些权限要配的,具体的如下

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

好的,下面我们贴出配置的详细代码

{
  "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"
        }
      }
    ]
  }
}

可以看到效果就是这样子的,嗯。

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

伪代码实现

读取周边蓝牙设备的代码实现

简单地调用下给的API接口,然后在成功的时候一把Map到蓝牙设备列表里面去,然后取消订阅发现。具体的如图所示:

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

取消匹配蓝牙设备

把当前的设备整个塞回蓝牙设备列表里面去,然后在已匹配列表把它送走。

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

连接蓝牙

还是调用官方提供的API,成功的话,把之前那个未连接的状态反一下,然后把当前连接的蓝牙设备绑在当前蓝牙设备变量上

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

最后

让我们来看一下,最后整出来的效果吧。

此处为语雀视频卡片,点击链接查看:IMG_8899.MOV

勘误

额,官网文档的代码这里写错了,家人们复制粘贴的时候把它替换成图中所示的符号。

鸿蒙系统应用开发之基于API6的蓝牙开发-LMLPHP

02-08 00:34