通用互联APP架构设计

目录

  1. 模块概述
  2. 模块结构
  3. 模块间交互
  4. 状态机转换图
  5. 接口设计
  6. 数据流与时序
  7. 部署与配置

1. 模块概述

源码:https://gitee.com/ohos-oneconnect/ohos-connect-hap/tree/v1.0.0.0


1.1 功能与目标

通用互联APP 是一个面向鸿蒙生态的设备控制应用,主要功能包括:

  • 设备发现与连接:支持蓝牙(BLE)、WiFi、IoT-Connect 三种协议的设备发现与连接
  • 设备管理:设备库管理、附近设备扫描与控制、设备状态查询
  • 场景管理:自动化场景创建、执行与管理
  • 多协议支持:统一的协议抽象层,支持多种连接协议的扩展

使用场景:

  • 智能家居设备控制
  • IoT设备配网与管理
  • 智能场景自动化
  • 设备库资源查询

1.2 系统位置

本应用是 HarmonyOS Next 生态中的核心设备控制入口,作为用户与智能设备交互的桥梁:

  • 核心模块common(公共基础服务)
  • 协议模块connect_bleconnect_wificonnect_iot(协议实现)
  • 功能模块nearbydevicedevicelibraryscenelibrarymine(业务功能)
  • 主入口模块product/phone(应用入口与UI主框架)

1.3 设计思路与模式

设计思路
  1. 分层架构:采用经典的分层架构,实现关注点分离

    • 表现层(View Layer):UI组件、页面、视图模型
    • 业务层(Business Layer):设备管理、扫描管理、连接管理
    • 协议层(Protocol Layer):协议抽象接口与具体实现
    • 数据层(Data Layer):数据库、首选项存储
  2. 接口抽象与多态:通过定义统一的协议接口(InfDevicesControllerInfDevicesDiscoverInfDevicesConnector 等),实现对蓝牙、WiFi、IoT等协议的统一管理

  3. 模块化设计:按功能域划分模块,降低模块间耦合度

    • 公共模块(common)提供基础能力
    • 连接模块(connect)实现具体协议
    • 功能模块(features)实现业务逻辑
设计模式
  • 单例模式(Singleton)

    • ConnectDatabaseHelperImpl:数据库辅助类
    • DevicesManager:设备连接状态管理
    • DeviceDiscoverManager:设备发现管理
  • 工厂模式(Factory)

    • 通过 getControllerByProtocolType() 根据协议类型创建对应的控制器
  • 观察者模式(Observer)

    • 通过 CommonEventManager 实现设备状态变化通知
    • 设备连接状态变化、数据变化通过事件机制广播
  • 策略模式(Strategy)

    • 不同协议类型对应不同的扫描、连接、控制策略
  • DAO模式(Data Access Object)

    • DeviceLibraryDaoSceneLibraryDao 封装数据库访问

1.4 系统框图

系统能力层 System Capability
数据层 Data Layer
协议层 Protocol Layer
业务层 Business Layer
表现层 Presentation Layer
Bluetooth API
WiFi API
RDB API
RelationalStore
关系型数据库
Preferences
首选项存储
common
协议接口抽象层
connect_ble
蓝牙协议
connect_wifi
WiFi协议
connect_iot
IoT协议
DevicesManager
设备管理
DeviceDiscoverManager
发现管理
BusinessManager
业务管理
product/phone
主入口模块
nearbydevice
附近设备
devicelibrary
设备库
scenelibrary
场景库
mine
我的

2. 模块结构

2.1 common 公共模块

功能描述:提供协议抽象接口、数据库支持、工具类等公共能力。

2.1.1 主要目录结构
common/
├── src/main/ets/
│   ├── constants/           # 常量定义
│   │   ├── CommonConstants.ets
│   │   ├── DevceType.ets
│   │   ├── EventConstants.ets
│   │   └── RelativeRules.ets
│   ├── database/            # 数据库模块
│   │   ├── ConnectDatabaseHelperImpl.ets
│   │   ├── dao/
│   │   │   ├── DeviceLibraryDao.ets
│   │   │   └── SceneLibraryDao.ets
│   │   ├── entity/
│   │   │   ├── Device.ets
│   │   │   └── Scene.ets
│   │   ├── DeviceLibraryAccess.ets
│   │   ├── GenericValues.ets
│   │   ├── IDatabaseHelper.ets
│   │   ├── PreferencesHelper.ets
│   │   └── TableConfig.ets
│   ├── inf/                 # 协议接口抽象层
│   │   ├── InfAccessManager.ets
│   │   ├── InfAccessManagerBluetooth.ets
│   │   ├── InfAccessManagerWifi.ets
│   │   ├── InfDevice.ets
│   │   ├── InfDevicesBusiness.ets
│   │   ├── InfDevicesConnector.ets
│   │   ├── InfDevicesController.ets
│   │   ├── InfDevicesDiscover.ets
│   │   ├── InfDevicesParser.ets
│   │   ├── InfBroadcastData.ets
│   │   ├── InfConstants.ets
│   │   ├── ControlCmd.ets
│   │   ├── EnvManager.ets
│   │   └── TypeEnum.ets
│   └── utils/               # 工具类
│       ├── GlobalContext.ets
│       ├── Logger.ets
│       └── PermissionUtil.ets
└── index.ets               # 模块导出
2.1.2 核心接口定义
InfDevicesController(设备控制器接口)

功能:协议控制器的顶层接口,整合设备发现、连接、业务、解析能力。

关键方法

export declare interface InfDevicesController {
  // 获取设备发现器
  getDiscover(): InfDevicesDiscover;
  
  // 获取设备连接器
  getConnector(): InfDevicesConnector;
  
  // 获取设备业务操作接口
  getDevicesBusiness(): InfDevicesBusiness;
  
  // 获取广播解析器
  getParser(): InfDevicesParser;
  
  // 获取协议类型
  getProtocolType(): ProtocolType;
  
  // 获取子协议类型
  getSubProtocolType(): SubProtocolType;
}
InfDevicesDiscover(设备发现接口)

功能:负责设备扫描与发现。

关键方法

export declare interface InfDevicesDiscover {
  // 开始扫描
  startScan(options: ScanOptions | null, callback: Callback<InfDevice>): void;
  
  // 停止扫描
  stopScan(): void;
  
  // 扫描是否可用
  isScanEnable(): boolean;
}
InfDevicesConnector(设备连接接口)

功能:负责设备连接与断开。

关键方法

export declare interface InfDevicesConnector {
  // 连接设备
  connect(device: InfDevice): Promise<boolean>;
  
  // 获取当前连接的设备
  getCurrentConnectedDevice(): InfDevice | undefined;
  
  // 断开连接
  stopConnect(device: InfDevice): Promise<boolean>;
}
InfDevicesBusiness(设备业务操作接口)

功能:设备业务操作,包括状态查询、服务查询、设备控制。

关键方法

export declare interface InfDevicesBusiness {
  // 查询设备状态
  queryDeviceState(sid: string[]): Promise<Array<InfDeviceState>>;
  
  // 查询设备所有服务
  queryDeviceAllServices(): Promise<Array<InfDeviceState>>;
  
  // 查询设备信息
  queryDeviceInfo(): Promise<InfDeviceInfo>;
  
  // 控制设备
  controlDevice(control: InfControl): Promise<boolean>;
}
2.1.3 数据库模块
ConnectDatabaseHelperImpl(数据库辅助实现类)

设计模式:单例模式

功能

  • 管理关系型数据库(RelationalStore)
  • 表的创建与升级
  • SQL执行

关键方法

export class ConnectDatabaseHelperImpl extends IDatabaseHelper {
  // 单例获取
  public static async getInstance(): Promise<ConnectDatabaseHelperImpl>
  
  // 获取RdbStore
  async getRdbStore(): Promise<boolean>
  
  // 初始化数据库
  async init(): Promise<boolean>
  
  // 创建表
  async createTable(): Promise<boolean>
  
  // 创建设备库表
  private async createDeviceLibraryTable(): Promise<boolean>
  
  // 创建场景库表
  private async createSceneLibraryTable(): Promise<boolean>
  
  // 升级数据库
  upgradeTable(startVersion: number, endVersion: number): boolean
}

表结构

  1. 设备库表(DEVICE_LIBRARY)

    • PID (text, primary key):产品ID
    • VALUE (text, not null):设备JSON数据
  2. 场景库表(SCENE_LIBRARY)

    • SCENE_ID (text, not null):场景ID
    • LANGUAGE (text, not null):语言
    • VALUE (text, not null):场景JSON数据
    • 主键:(SCENE_ID, LANGUAGE)
DeviceLibraryDao(设备库数据访问对象)

功能:封装设备库的CRUD操作。

SceneLibraryDao(场景库数据访问对象)

功能:封装场景库的CRUD操作。

2.1.4 实体类
Device 实体类
export class Device {
  industry: Array<Industry> = []           // 行业信息
  manufacturer: Manufacturer = new Manufacturer()  // 厂商信息
  deviceType: DeviceType = new DeviceType()       // 设备类型
  productId: string = '';                  // 产品ID
  deviceName: string = '';                 // 设备名称
  osTypeName: string = '';                 // 操作系统类型
  osVersion: string = '';                  // 操作系统版本
  typicalService: string = '';             // 典型服务
  deviceIcons: Array<string> = [];         // 设备图标
  deviceModel: string = '';                // 设备型号
  deviceProfile: string = '';              // 设备配置文件
  pinType: number = 0;                     // PIN类型
  oHConnectCertified: boolean = false;     // OH Connect认证
}
2.1.5 枚举类型
ProtocolType(协议类型)
export enum ProtocolType {
  WIFI,          // WiFi协议
  BLE,           // 蓝牙协议
  IOT_CONNECT,   // IoT-Connect协议
  VIRTUAL,       // 虚拟协议(用于测试)
  ETHERNET,      // 以太网协议
  UNKNOWN,       // 未知协议
}
ConnectType(连接类型)
export enum ConnectType {
  OFFLINE = 0,   // 离线
  ONLINE = 1,    // 在线
}

2.2 connect 连接模块

2.2.1 connect_ble 蓝牙协议模块

功能描述:实现基于BLE的设备发现、连接、控制。

主要类

  • BleDevicesController:蓝牙设备控制器,实现 InfDevicesController 接口
  • BleDevicesDiscover:蓝牙设备发现,实现 InfDevicesDiscover 接口
  • BleDevicesConnector:蓝牙设备连接器,实现 InfDevicesConnector 接口
  • BleDevicesBusiness:蓝牙设备业务操作,实现 InfDevicesBusiness 接口
  • BleDevicesParser:蓝牙广播数据解析器
  • BleScanner:封装系统BLE扫描API
  • BleDevice:蓝牙设备实体

协议支持

  • 开源蓝牙协议(ble_open)
  • IoT Connect Service SDK蓝牙协议(ble_iot_connect_service)
  • 开鸿智谷蓝牙协议(ble_open_valley)
2.2.2 connect_wifi WiFi协议模块

功能描述:实现基于WiFi(CoAP协议)的设备发现、连接、控制。

主要类

  • WifiDevicesController:WiFi设备控制器
  • CoapServerManager:CoAP服务器管理器

依赖库

  • libcoap.har:CoAP协议库
2.2.3 connect_iot IoT-Connect协议模块

功能描述:实现基于IoT-Connect SDK的设备连接与控制。

主要类

  • IotDevicesController:IoT设备控制器
  • IotHelper:IoT辅助工具

依赖库

  • IoTConnectKit.har:IoT连接套件

2.3 features 功能模块

2.3.1 nearbydevice 附近设备模块

功能描述:附近设备扫描、连接、控制的核心业务逻辑。

关键类

DevicesManager(设备管理器)

设计模式:单例模式

功能

  • 管理已发现的设备列表
  • 设备连接状态管理
  • 连接锁机制(防止并发连接)
  • 设备连接状态变化通知
  • 设备数据变化通知

关键方法

export default class DevicesManager {
  // 单例获取
  static getInstance(): DevicesManager
  
  // 注册事件订阅(在EntryAbility onCreate中调用)
  subscribeEvent(): void
  
  // 添加设备
  addDevice(device: InfDevice): void
  
  // 连接设备
  async connect(index: number): Promise<void>
  
  // 断开连接
  disconnect(): void
  
  // 获取当前连接的设备
  getConnectingDevice(): InfDevice | undefined
  
  // 注册连接状态变化回调
  registerConnectStateChanged(name: string, callBack: Callback<number>): void
  
  // 注册消息接收回调
  registerMessageReceivers(name: string, callBack: Callback<InfDeviceState[]>): void
}
DeviceDiscoverManager(设备发现管理器)

设计模式:单例模式

功能

  • 管理多个协议控制器
  • 根据协议类型获取对应的控制器
  • 启动/停止设备扫描
ConnectState(连接状态枚举)
export enum ConnectState {
  NOT_START,         // 未开始
  CONNECTING,        // 连接中
  CONNECT_SUCCESS,   // 连接成功
  CONNECT_FAILED     // 连接失败
}
2.3.2 devicelibrary 设备库模块

功能描述:设备库查询、搜索、详情展示。

主要页面

  • DeviceLibraryPage:设备库主页
  • 设备搜索页面
  • 设备详情页面
2.3.3 scenelibrary 场景库模块

功能描述:自动化场景的创建、编辑、执行、管理。

主要功能

  • 场景列表展示
  • 场景创建与编辑
  • 场景执行
  • 条件与动作配置
2.3.4 mine 我的模块

功能描述:用户设置、关于信息、帮助文档等。


2.4 product/phone 主入口模块

功能描述:应用主入口、页面框架、Tab导航。

2.4.1 EntryAbility(应用入口)

功能

  • 应用生命周期管理
  • 权限申请
  • 设备管理器事件订阅
  • 应用崩溃恢复

关键生命周期

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 申请蓝牙权限
    // 启用应用崩溃恢复
    // 订阅设备事件
    DevicesManager.getInstance().subscribeEvent();
  }
  
  onDestroy(): void {
    // 取消订阅设备事件
    DevicesManager.getInstance().unSubscribeEvent();
  }
  
  onWindowStageCreate(windowStage: window.WindowStage): void {
    // 加载主页面 LauncherPage
  }
  
  onForeground(): void {
    // 应用前台事件
  }
  
  onBackground(): void {
    // 应用后台事件
  }
}
2.4.2 页面结构
  • LauncherPage:应用启动页
  • CategoryPage:分类主页(Tab导航)
    • 附近设备Tab
    • 设备库Tab
    • 场景库Tab
    • 我的Tab

3. 模块间交互

3.1 交互描述

3.1.1 纵向交互(分层交互)

表现层 → 业务层

  • DevicesScanPage 调用 DevicesManager 进行设备连接
  • DevicesScanPage 调用 DeviceDiscoverManager 启动扫描

业务层 → 协议层

  • DevicesManager 通过 InfDevicesConnector 连接设备
  • DeviceDiscoverManager 通过 InfDevicesDiscover 扫描设备

协议层 → 系统能力层

  • BleDevicesConnector 调用 HarmonyOS Bluetooth API
  • WifiDevicesController 使用 CoAP 库通信

业务层 → 数据层

  • 设备库、场景库通过 DAO 访问数据库
  • 通过 PreferencesHelper 读写首选项
3.1.2 横向交互(模块间协作)

协议模块间

  • 各协议模块(connect_bleconnect_wificonnect_iot)均实现 common 定义的接口
  • 通过多态实现协议的热插拔

功能模块间

  • nearbydevicedevicelibrary 共享设备数据
  • scenelibrary 可调用 nearbydevice 的设备控制能力

3.2 模块间依赖框图

主入口 Product
公共模块 Common
协议模块 Connect
功能模块 Features
product/phone
common
connect_ble
connect_wifi
connect_iot
nearbydevice
devicelibrary
scenelibrary
mine

3.3 外部依赖框图

第三方库
OpenHarmony 系统能力
libcoap.har
CoAP协议库
IoTConnectKit.har
IoT连接套件
Bluetooth API
WiFi API
RelationalStore API
Preferences API
Permission API
CommonEvent API
通用互联APP

3.4 异步处理与事件驱动

事件机制

通过 CommonEventManager 实现跨模块通信:

发布事件

  • 设备连接状态变化:KEY_ON_CONNECT_STATE_CHANGED
  • 设备数据变化:KEY_ON_DEVICE_DATA_CHANGED

订阅事件

  • DevicesManagerEntryAbility.onCreate() 中订阅事件
  • 各业务模块通过 DevicesManager 注册回调

事件流程

设备连接状态变化 → CommonEvent发布 → DevicesManager接收 → 
分发给各注册的回调 → UI更新
多线程处理
  • 异步操作:设备连接、扫描、数据库查询均使用 Promise 异步处理
  • 主线程:UI渲染与用户交互
  • 工作线程:数据库操作、网络通信(由系统API内部管理)

4. 状态机转换图

4.1 设备连接状态机

4.1.1 状态定义
export enum ConnectState {
  NOT_START,         // 未开始
  CONNECTING,        // 连接中
  CONNECT_SUCCESS,   // 连接成功
  CONNECT_FAILED     // 连接失败
}
4.1.2 状态转换图
初始化
用户点击连接
连接成功
连接失败/超时
切换设备
断开连接
重置
重试连接
退出应用
NOT_START
CONNECTING
CONNECT_SUCCESS
CONNECT_FAILED
4.1.3 状态转换规则
当前状态 触发事件 目标状态 条件
NOT_START 用户点击连接 CONNECTING 无其他设备正在连接
CONNECTING 连接成功回调 CONNECT_SUCCESS connector.connect() 返回 true
CONNECTING 连接失败/超时 CONNECT_FAILED connector.connect() 返回 false 或异常
CONNECT_SUCCESS 用户点击断开 NOT_START
CONNECT_SUCCESS 切换设备 CONNECTING 先断开当前设备
CONNECT_FAILED 自动重置 NOT_START 连接失败后自动重置
4.1.4 连接锁机制

目的:防止并发连接多个设备

实现

private connectLock = false;

async connect(index: number) {
  // 检查锁状态
  if (this.isLock()) {
    Logger.warn("other devices are currently connecting");
    showPop($r('app.string.other_devices_connecting'));
    return;
  }
  
  // 加锁
  this.setLock(true);
  
  try {
    // 执行连接逻辑
    const result = await connector.connect(device);
    // ...
  } finally {
    // 释放锁
    this.setLock(false);
  }
}

4.2 设备在线状态机

设备未连接
连接成功
设备断开连接
网络异常
设备超时
设备移除
OFFLINE
ONLINE

4.3 扫描状态机

初始状态
启动扫描
停止扫描
发现设备(持续扫描)
退出页面
IDLE
SCANNING

5. 接口设计

5.1 公共接口

5.1.1 InfDevicesController 接口

功能:设备控制器顶层接口

方法列表

方法名 参数 返回值 功能描述
getDiscover() InfDevicesDiscover 获取设备发现器
getConnector() InfDevicesConnector 获取设备连接器
getDevicesBusiness() InfDevicesBusiness 获取设备业务操作接口
getParser() InfDevicesParser 获取广播解析器
getProtocolType() ProtocolType 获取协议类型
getSubProtocolType() SubProtocolType 获取子协议类型
5.1.2 InfDevicesDiscover 接口

功能:设备发现与扫描

方法列表

方法名 参数 返回值 功能描述
startScan() options: ScanOptions | null
callback: Callback<InfDevice>
void 开始扫描,扫描到设备后通过回调返回
stopScan() void 停止扫描
isScanEnable() boolean 扫描功能是否可用

异常处理

  • 权限不足:在 startScan 前需先调用 InfAccessManager.isEnable() 检查权限
  • 蓝牙未开启:返回扫描不可用
5.1.3 InfDevicesConnector 接口

功能:设备连接与断开

方法列表

方法名 参数 返回值 功能描述
connect() device: InfDevice Promise<boolean> 连接设备,返回是否成功
getCurrentConnectedDevice() InfDevice | undefined 获取当前连接的设备
stopConnect() device: InfDevice Promise<boolean> 断开连接,返回是否成功

异常处理

  • 连接超时:抛出异常,由调用方处理
  • 设备不可达:返回 false
5.1.4 InfDevicesBusiness 接口

功能:设备业务操作

方法列表

方法名 参数 返回值 功能描述
queryDeviceState() sid: string[] Promise<Array<InfDeviceState>> 查询设备状态
queryDeviceAllServices() Promise<Array<InfDeviceState>> 查询设备所有服务
queryDeviceInfo() Promise<InfDeviceInfo> 查询设备信息
controlDevice() control: InfControl Promise<boolean> 控制设备

数据结构

// 设备状态
export interface InfDeviceState {
  data: Record<string, string | number>  // 状态数据键值对
  sid: string,                           // 服务ID
}

// 控制信息
export interface InfControl {
  getServiceId(): string;   // 获取服务ID
  getDataJson(): string;    // 获取控制数据JSON
}

5.2 数据交换接口

5.2.1 数据库访问接口
IDatabaseHelper(数据库辅助基类)

方法列表

方法名 参数 返回值 功能描述
getRdbStore() Promise<boolean> 获取数据库实例
executeSql() sql: string Promise<boolean> 执行SQL语句
insert() table: TableType
values: ValuesBucket
Promise<number> 插入数据
update() table: TableType
values: ValuesBucket
predicates: RdbPredicates
Promise<number> 更新数据
delete() table: TableType
predicates: RdbPredicates
Promise<number> 删除数据
query() table: TableType
predicates: RdbPredicates
Promise<ResultSet> 查询数据
DeviceLibraryDao(设备库DAO)

方法列表

方法名 参数 返回值 功能描述
insert() device: Device Promise<boolean> 插入设备
queryByPid() pid: string Promise<Device | null> 根据PID查询设备
queryAll() Promise<Device[]> 查询所有设备
delete() pid: string Promise<boolean> 删除设备
5.2.2 事件通信接口

发布事件

// 连接状态变化
const data = {
  [InfConstants.ON_CONNECT_STATE_CHANGED_TYPE]: ConnectType.ONLINE
};
eventManager.publish({
  bundleName: 'com.example.app',
  isOrdered: false,
  parameters: {
    event: `KEY_${InfConstants.ON_CONNECT_STATE_CHANGED}`,
    data: JSON.stringify(data)
  }
});

// 设备数据变化
const deviceStates: InfDeviceState[] = [/*...*/];
eventManager.publish({
  bundleName: 'com.example.app',
  isOrdered: false,
  parameters: {
    event: `KEY_${InfConstants.ON_DEVICE_DATA_CHANGED}`,
    data: JSON.stringify(deviceStates)
  }
});

订阅事件

// 在 DevicesManager 中订阅
subscribeEvent() {
  let info: eventManager.CommonEventSubscribeInfo = {
    events: [
      `KEY_${InfConstants.ON_CONNECT_STATE_CHANGED}`,
      `KEY_${InfConstants.ON_DEVICE_DATA_CHANGED}`
    ]
  }
  eventManager.createSubscriber(info).then((subscriber) => {
    this.subscriber = subscriber;
    eventManager.subscribe(this.subscriber, this.callEvent);
  })
}

6. 数据流与时序

6.1 设备扫描时序图

DevicesScanPage DeviceDiscoverManager BleDevicesController BleDevicesDiscover Bluetooth API startScan() getDiscover() BleDevicesDiscover startScan(options, callback) ble.startBLEScan() 扫描到设备 解析广播数据 匹配设备库 callback(InfDevice) 更新UI设备列表 loop [扫描过程] stopScan() stopScan() ble.stopBLEScan() DevicesScanPage DeviceDiscoverManager BleDevicesController BleDevicesDiscover Bluetooth API

6.2 设备连接时序图

DevicesScanPage DevicesManager BleDevicesConnector Bluetooth API CommonEventManager connect(index) 检查连接锁 setLock(true) 更新状态为 CONNECTING stopConnect(currentDevice) ble.disconnect() alt [有设备正在连接] connect(device) ble.connect() 连接结果 return true 更新状态为 CONNECT_SUCCESS 发布连接成功事件 更新UI return false 更新状态为 CONNECT_FAILED 显示错误提示 alt [连接成功] [连接失败] setLock(false) DevicesScanPage DevicesManager BleDevicesConnector Bluetooth API CommonEventManager

6.3 设备控制时序图

控制页面 DevicesManager BleDevicesBusiness BleConnector Bluetooth API getConnectingDevice() InfDevice controlDevice(control) 获取连接信息 构建控制指令 发送BLE写特征值 写入结果 return true 设备状态变化通知 解析状态数据 发布设备数据变化事件 更新UI状态 return false 显示错误提示 alt [控制成功] [控制失败] 控制页面 DevicesManager BleDevicesBusiness BleConnector Bluetooth API

6.4 数据库访问时序图

设备库页面 DeviceLibraryDao ConnectDatabaseHelperImpl RelationalStore queryByPid(pid) query(TableType.DEVICE_LIBRARY, predicates) store.query() ResultSet 解析ResultSet Device对象 Device 显示设备详情 设备库页面 DeviceLibraryDao ConnectDatabaseHelperImpl RelationalStore

7. 部署与配置

7.1 环境要求

  • 开发工具:DevEco Studio NEXT Developer Beta1 (5.0.3.403)
  • SDK版本:API 12
  • 目标平台:HarmonyOS Next
  • 支持设备:HarmonyOS手机、平板

7.2 权限配置

product/phone/src/main/module.json5 中配置:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.ACCESS_BLUETOOTH",
        "reason": "$string:bluetooth_permission_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.USE_BLUETOOTH",
        "reason": "$string:bluetooth_permission_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.DISCOVER_BLUETOOTH",
        "reason": "$string:bluetooth_permission_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.INTERNET",
        "reason": "$string:internet_permission_reason"
      }
    ]
  }
}

7.3 模块依赖配置

build-profile.json5 中配置模块:

{
  "modules": [
    {
      "name": "phone",
      "srcPath": "./product/phone"
    },
    {
      "name": "common",
      "srcPath": "./common"
    },
    {
      "name": "connect_ble",
      "srcPath": "./connect/connect_ble"
    },
    {
      "name": "connect_wifi",
      "srcPath": "./connect/connect_wifi"
    },
    {
      "name": "connect_iot",
      "srcPath": "./connect/connect_iot"
    },
    {
      "name": "nearbydevice",
      "srcPath": "./features/nearbydevice"
    },
    {
      "name": "devicelibrary",
      "srcPath": "./features/devicelibrary"
    },
    {
      "name": "scenelibrary",
      "srcPath": "./features/scenelibrary"
    },
    {
      "name": "mine",
      "srcPath": "./features/mine"
    }
  ]
}

7.4 签名配置

  1. 打开 DevEco Studio,点击工具栏 Project Structure
  2. 进入 SigningConfigs 菜单
  3. 登录华为开发者账号
  4. 选择自动签名

7.5 编译与运行

# 连接设备
# 点击 DevEco Studio 工具栏 "Run phone" 按钮
# 或使用命令行
hvigorw assembleHap --mode module -p product=default

附录

A. 关键类图

A.1 协议接口类图
«interface»
InfDevicesController
+getDiscover() : InfDevicesDiscover
+getConnector() : InfDevicesConnector
+getDevicesBusiness() : InfDevicesBusiness
+getParser() : InfDevicesParser
+getProtocolType() : ProtocolType
+getSubProtocolType() : SubProtocolType
«interface»
InfDevicesDiscover
+startScan(options, callback) : void
+stopScan() : void
+isScanEnable() : boolean
«interface»
InfDevicesConnector
+connect(device) : Promise<boolean>
+getCurrentConnectedDevice() : InfDevice
+stopConnect(device) : Promise<boolean>
«interface»
InfDevicesBusiness
+queryDeviceState(sid)
+queryDeviceAllServices()
+queryDeviceInfo() : Promise<InfDeviceInfo>
+controlDevice(control) : Promise<boolean>
BleDevicesController
+getDiscover() : InfDevicesDiscover
+getConnector() : InfDevicesConnector
+getDevicesBusiness() : InfDevicesBusiness
+getParser() : InfDevicesParser
WifiDevicesController
+getDiscover() : InfDevicesDiscover
+getConnector() : InfDevicesConnector
+getDevicesBusiness() : InfDevicesBusiness
+getParser() : InfDevicesParser
A.2 设备管理类图
«singleton»
DevicesManager
-devicesModel DevicesModel
-devices Array<InfDevice>
-currentConnectDevice InfDevice
-connectLock boolean
+getInstance() : DevicesManager
+subscribeEvent() : void
+addDevice(device) : void
+connect(index) : Promise<void>
+disconnect() : void
+getConnectingDevice() : InfDevice
+registerConnectStateChanged(name, callback) : void
+registerMessageReceivers(name, callback) : void
«singleton»
DeviceDiscoverManager
-controllers Array<InfDevicesController>
+getInstance() : DeviceDiscoverManager
+addController(controller) : void
+getControllerByProtocolType(type) : InfDevicesController
+startScan(callback) : void
+stopScan() : void
DevicesModel
-deviceItems Array<DeviceItem>
-connectState ConnectState
+addDevice(device) : void
+changeConnectState(state) : void
+reset() : void
«enumeration»
ConnectState
NOT_START
CONNECTING
CONNECT_SUCCESS
CONNECT_FAILED

B. 术语表

术语 说明
ArkTS HarmonyOS的TypeScript超集语言
BLE Bluetooth Low Energy,低功耗蓝牙
CoAP Constrained Application Protocol,受限应用协议
DAO Data Access Object,数据访问对象
HAR HarmonyOS Archive,HarmonyOS库文件格式
IoT Internet of Things,物联网
PID Product ID,产品标识符
RDB Relational Database,关系型数据库
SDK Software Development Kit,软件开发工具包
ViewModel 视图模型,MVVM架构中的VM层
Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐