Harmony Ble 蓝牙App (一)扫描(上)

简介: Harmony Ble 蓝牙App (一)扫描(上)

前言


  关于Android的低功耗蓝牙,我做了很多介绍了,那么对于Harmony来说这一块我没有做过介绍,而实际中我确实做过一个Harmony的BLE项目,所以这里分享一些内容出来。


正文


  在Harmony中进行Ble的蓝牙开发实际上和Android中类似,但是又有一些不同,因为Harmony的SDK还在不断的完善。而这里我们使用的是API 6进行项目开发,使用的语言是Java,至于为什么使用API 6而不是最新的API 9,因为我买不起遥遥领先,所以只能用API 6的HUAWEI P30进行真机测试。蓝牙这种APP一定是要使用真机测试的,你用虚拟机是不行的,话不多说,我们开始吧。

907219af9c354c278ff45fd8e9218e92.gif


一、创建工程


  下面开始创建工程。

738f3c799b4540678aad100173d455b7.png

选择Empty Ability,点击Next。我们创建一个名为HarmonyBle的项目,语言为Java。

2d17f13556bc4381ba7844ea3e937973.png

点击Finish完成创建。

77a41748a82c4f3c9b0f2aed2b06854e.png

默认的工程就是这个样子的,是不是很像Android创建的工程呢?


二、工程配置


① 权限配置

  Harmony中同样有权限这个概念,也需要配置静态权限和动态权限,只不过配置静态权限的地方不一样。Harmony是在config.json中,里面的代码如下:

{
  "app": {
    "bundleName": "com.llw.ble",
    "vendor": "example",
    "version": {
      "code": 1000000,
      "name": "1.0.0"
    }
  },
  "deviceConfig": {
  },
  "module": {
    "package": "com.llw.ble",
    "name": ".MyApplication",
    "mainAbility": "com.llw.ble.MainAbility",
    "deviceType": [
      "phone",
      "tablet",
      "tv",
      "wearable",
      "car"
    ],
    "distro": {
      "deliveryWithInstall": true,
      "moduleName": "entry",
      "moduleType": "entry",
      "installationFree": false
    },
    "abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "name": "com.llw.ble.MainAbility",
        "description": "$string:mainability_description",
        "icon": "$media:icon",
        "label": "$string:entry_MainAbility",
        "launchType": "standard",
        "orientation": "unspecified",
        "visible": true,
        "type": "page"
      }
    ]
  }
}


  你阅读一下,你就会发现,这和Android的AndroidManifest.xml配置文件好像差不多啊。只不过一个用的是json,一个用的是xml。

  所以我们配置权限也是在config.json中,例如扫描蓝牙时我们需要定位权限。可以在里面增加如下代码:

    "reqPermissions": [
      {
        "name": "ohos.permission.LOCATION"
      },
      {
        "name": "ohos.permission.USE_BLUETOOTH"
      },
      {
        "name": "ohos.permission.DISCOVER_BLUETOOTH"
      },
      {
        "name": "ohos.permission.MANAGE_BLUETOOTH"
      }
    ]


如下图所示,注意json中标点符号。

132c057e49da4712ac9ed5c7602c61b2.png

② Debug配置

  然后我们就应该要来写代码了,不过在此之前,我们先了解一下Ability和Slice的区别,Ability就像一个画框,而Slice就像一个画布。我们可以在一个画框里面加载多个画布,就好像多个页面之前的跳转,我们可以用Slice来进行,下面我们增加一个扫描的Slice,我们复制一下MainAbilitySlice,再粘贴一下,出现的弹窗中改名字

07a07c10933944e28ba5c1bc492d1fca.png

  为什么要通过这种方式来创建Java文件呢?因为DevEco Studio我创建不了Java文件,可能是这个版本的DS没有这个选项亦或是我没有找到。

  下面我们需要创建对应layout文件,再resources/base/layout下创建一个slice_scan.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:orientation="vertical">
    <ListContainer
        ohos:id="$+id:lc_device"
        ohos:height="match_parent"
        ohos:width="match_parent"/>
</DirectionalLayout>


  然后我们再修改ScanSlice中的内容,让它加载我们刚写好的slice_scan.xml。修改onStart()方法,代码如下所示:

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_slice_scan);
    }


现在App打开之后默认会运行MainAbility,我们看一下这个里面。

public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
    }
}


  可以看到,在setMainRoute()方法中,默认加载的是MainAbilitySlice,将它改为我们刚写好的ScanSlice,代码:super.setMainRoute(ScanSlice.class.getName());

然后我们先运行一下看看,通过USB链接到鸿蒙手机上。

d65518f981224934891d22253dc7a75e.png

这里会提示报错,浏览一下错误信息。

d278ac76505b414283f7cdf57f6e2920.png

  这里是说我们需要配置Signing。点击Run下面或者右侧弹窗的Open signing configs,会打开一个配置窗口,如下图所示:

42685710f9c3475ba390bfc582b9f387.png

我们点击Signing Configs选项,需要你进行登录,如下图所示:

5326e1add63b4ffc8fb2b5a01ac0cc0c.png

 这里就需要你登录华为的帐号了,我们当前在本地运行所以是Debug模式,旁边有一个Release表示发布版本,它里面配置的东西和Debug模式一致,区别在于Debug模式下的配置信息只要我们登录之后,DevEco Studio会帮助我们自动生成,而Release中的信息则需要开发者去华为开发者官网上去创建应用并申请配置文件和证书,比较麻烦,但是如果你要上架应用则必须做这一步,在国内,华为应用市场上架应用是最严格的。华为的你搞得定,其他的都是小趴菜,不值一提。


 下面我们先登录,会打开一个网页,登录成功之后,你会看到这样的页面。

1a65b98825144e978024b1c4356a257a.png

  然后我们回到DS,就会自动配置Debug模式下的证书和配置文件,如下图所示:

58fb789a475e413d8ce1576268f47b92.png

  点击OK,会在DS中进行一个配置,配置好之后你可以在工程目录下的build.gradle中看到debug的相关信息,如下图所示。

811ff52604a448d3af401f3df27af178.png

然后我们再运行一下看看,这一次毫无疑问是可以运行成功的。如下图所示:

3f3203471d5d461eabfc74935c70cef7.jpg

③ UI配置

可以看到默认的标题栏就如同Android默认的ActionBar,丑的很特别,我们去掉它,在config.json中添加如下代码:

        "metaData": {
          "customizeData": [
            {
              "extra": "",
              "name": "hwc-theme",
              "value": "androidhwext:style/Theme.Emui.Light.NoTitleBar"
            }
          ]
        },


添加位置如下所示:

6f6c50e5c72a43f4acbc49076a6c1d82.png

下面我们再运行一下看看。

3b934b38b1f648239c14bd38ed8abe41.jpg

是不是Unbelievable! 同样为了标题好看,我们在element下创建一个color.json,里面的代码如下所示:

{
  "color": [
    {
      "name": "white",
      "value": "#FFF"
    },
    {
      "name": "black",
      "value": "#000"
    },
    {
      "name": "blue",
      "value": "#FFA7D3FF"
    },
    {
      "name": "bg_color",
      "value": "#F8F8F8"
    },
    {
      "name": "gray",
      "value": "#989898"
    }
  ]
}


我们再修改一下scan_slice.xml中的代码,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:background_element="$color:bg_color"
    ohos:orientation="vertical">
    <DirectionalLayout
        ohos:height="50vp"
        ohos:width="match_parent"
        ohos:alignment="vertical_center"
        ohos:background_element="$color:blue"
        ohos:orientation="horizontal"
        ohos:start_padding="12vp">
        <Text
            ohos:id="$+id:title"
            ohos:height="match_content"
            ohos:width="match_content"
            ohos:text="选择设备"
            ohos:text_color="#FFF"
            ohos:text_font="HwChinese-medium"
            ohos:text_size="18fp"
            ohos:weight="1"/>
        <Text
            ohos:id="$+id:tx_scan_status"
            ohos:height="match_content"
            ohos:width="match_content"
            ohos:end_margin="6vp"
            ohos:padding="8vp"
            ohos:text="搜索"
            ohos:text_color="#FFF"
            ohos:text_size="14fp"/>
    </DirectionalLayout>
    <ListContainer
        ohos:id="$+id:lc_device"
        ohos:height="match_parent"
        ohos:width="match_parent"/>
</DirectionalLayout>


这个DirectionalLayout布局就是线性布局,我们可以点击右侧导航栏的Previewer进行布局预览,如下图所示。

4b504613b8094980984cece9b2c278f3.png

右上角的T图标,点击之后可以查看当前布局的层级。

5cf8ad01268245fe83ec8fdd6c5ba6f4.png

  这里说明一下,有时候在通过资源使用颜色值的时候会无法生效,所以就会直接使用#FFF,在代码里也是如此,这应该属于编译器的Bug。


标题栏就写好了,还有状态栏我们没有改,状态栏我们在MainAbility中进行修改,代码如下所示:

    @Override
    public void onStart(Intent intent) {
        Window window = WindowManager.getInstance().getTopWindow().get();
        window.setStatusBarColor(Color.getIntColor("#A7D3FF"));
        super.onStart(intent);
        super.setMainRoute(ScanSlice.class.getName());
    }


还是修改onStart()方法,然后我们运行一下看看。

a519b3c31f5c4e569ec9e9a738925990.jpg

好了,下面我们来写扫描需要的内容代码。


Harmony Ble 蓝牙App (一)扫描(下)https://developer.aliyun.com/article/1407942

相关文章
|
30天前
|
移动开发 前端开发 Android开发
开发指南059-App实现微信扫描登录
App是用uniapp开发的,打包为apk,上传到安卓平板中使用
|
3月前
|
负载均衡 网络协议 安全
【Azure 应用服务】Azure Web App的服务(基于Windows 操作系统部署)在被安全漏洞扫描时发现了TCP timestamps漏洞
【Azure 应用服务】Azure Web App的服务(基于Windows 操作系统部署)在被安全漏洞扫描时发现了TCP timestamps漏洞
|
4月前
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
4月前
|
存储 物联网 数据库
App Inventor 2 低功耗蓝牙 BlueToothLE 拓展中文文档(完整翻译加强版)
低功耗蓝牙,也称为蓝牙LE 或简称 BLE,是一种类似于经典蓝牙的新通信协议,不同之处在于它旨在消耗更少的功耗和成本,同时保持同等的功能。 因此,低功耗蓝牙是与耗电资源有限的物联网设备进行通信的首选。
155 0
|
6月前
|
移动开发 数据安全/隐私保护
HC05蓝牙模块与手机APP连接
HC05蓝牙模块与手机APP连接
215 1
|
6月前
|
物联网 Java 数据安全/隐私保护
App Inventor 2 低功耗蓝牙(BLE) 硬件接入、数据通信及IO控制
低功耗蓝牙(BLE)以低功耗、低成本、开发简便逐渐被广泛应用,本文主要介绍一款较为通用、价格低廉的BLE设备从零开始如何利用App Inventor 2开发一款自己专属的手机蓝牙App应用。 本文主要通过一款常见的BLE硬件接入控制,介绍硬件接入App Inventor 2 的通用方法,类似的硬件接入都是大同小异的。
361 1
|
30天前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
452 7
|
30天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
504 1
|
16天前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
1月前
|
JavaScript 前端开发 小程序
uniapp一个人开发APP关键步骤和考虑因素
uniapp一个人开发APP关键步骤和考虑因素
121 1
uniapp一个人开发APP关键步骤和考虑因素

热门文章

最新文章