第二十三天 实践分布式软总线,实现两个设备之间的简单通信

初学HarmonyOS:实践分布式软总线,实现设备间简单通信

引言

随着物联网技术的快速发展,设备之间的通信变得越来越重要。HarmonyOS作为华为推出的分布式操作系统,提供了强大的分布式能力,尤其是分布式软总线技术,能够轻松实现设备间的通信。本文将从初学者的角度出发,带你一步步学习如何使用HarmonyOS的分布式软总线,实现两个设备之间的简单通信。

什么是分布式软总线?

分布式软总线是HarmonyOS的核心技术之一,它允许设备在局域网内自动发现、连接和通信。通过分布式软总线,设备可以像在同一个总线上一样进行数据交换,而无需关心底层的网络细节。这种技术非常适合用于智能家居、智能办公等场景。

环境准备

在开始之前,我们需要准备好开发环境:

  1. 安装DevEco Studio:这是HarmonyOS的官方开发工具,支持代码编写、调试和模拟器运行。
  2. 创建HarmonyOS项目:在DevEco Studio中创建一个新的HarmonyOS项目,选择"Empty Ability"模板。
  3. 准备两台设备:可以是两台手机,或者一台手机和一台模拟器。

项目结构

在DevEco Studio中创建的项目结构如下:

复制代码
MyApplication
│
├── entry
│   └── src
│       └── main
│           ├── java
│           │   └── com.example.myapplication
│           │       ├── MainAbility.java
│           │       └── MyApplication.java
│           └── resources
│               └── base
│                   ├── layout
│                   │   └── ability_main.xml
│                   └── element
│                       └── string.json
└── build.gradle

实现设备发现

首先,我们需要实现设备的自动发现功能。HarmonyOS提供了DeviceManager类来管理设备发现和连接。

1. 添加权限

在config.json中添加以下权限:

json 复制代码
{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.DISTRIBUTED_DATASYNC"
      }
    ]
  }
}

2. 初始化DeviceManager

在MainAbility.java中初始化DeviceManager:

java 复制代码
import ohos.distributedschedule.interwork.DeviceManager;
import ohos.distributedschedule.interwork.DeviceInfo;

public class MainAbility extends Ability {
    private DeviceManager deviceManager;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        deviceManager = DeviceManager.getInstance();
        discoverDevices();
    }

    private void discoverDevices() {
        List<DeviceInfo> deviceInfos = deviceManager.getDeviceList(DeviceInfo.FLAG_GET_ALL_DEVICE);
        for (DeviceInfo deviceInfo : deviceInfos) {
            System.out.println("发现设备: " + deviceInfo.getDeviceName());
        }
    }
}

3. 运行代码

运行代码后,你会在控制台看到发现的设备列表。如果没有发现设备,请确保两台设备在同一个局域网内。

实现设备间通信

设备发现后,我们可以通过分布式软总线实现设备间的通信。HarmonyOS提供了DistributedDataManager类来管理分布式数据。

1. 添加依赖

在build.gradle中添加以下依赖:

groovy 复制代码
dependencies {
    implementation 'ohos:distributedschedule:1.0.0'
}

2. 发送数据

在MainAbility.java中实现发送数据的功能:

java 复制代码
import ohos.distributedschedule.interwork.DistributedDataManager;
import ohos.distributedschedule.interwork.DeviceInfo;

public class MainAbility extends Ability {
    private DistributedDataManager distributedDataManager;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        distributedDataManager = DistributedDataManager.getInstance();
        sendData();
    }

    private void sendData() {
        DeviceInfo deviceInfo = deviceManager.getDeviceList(DeviceInfo.FLAG_GET_ALL_DEVICE).get(0);
        String data = "Hello, Device!";
        distributedDataManager.sendData(deviceInfo.getDeviceId(), data.getBytes(), new DistributedDataManager.DataCallback() {
            @Override
            public void onSuccess() {
                System.out.println("数据发送成功");
            }

            @Override
            public void onFailure(int errorCode) {
                System.out.println("数据发送失败,错误码: " + errorCode);
            }
        });
    }
}

3. 接收数据

在另一台设备上实现接收数据的功能:

java 复制代码
import ohos.distributedschedule.interwork.DistributedDataManager;

public class MainAbility extends Ability {
    private DistributedDataManager distributedDataManager;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        distributedDataManager = DistributedDataManager.getInstance();
        receiveData();
    }

    private void receiveData() {
        distributedDataManager.registerDataListener(new DistributedDataManager.DataListener() {
            @Override
            public void onDataReceived(String deviceId, byte[] data) {
                String receivedData = new String(data);
                System.out.println("接收到数据: " + receivedData);
            }
        });
    }
}

4. 运行代码

运行代码后,发送数据的设备会将数据发送到接收数据的设备,接收设备会在控制台打印出接收到的数据。

总结

通过本文的学习,你应该已经掌握了如何使用HarmonyOS的分布式软总线实现设备间的简单通信。我们从设备发现开始,逐步实现了数据的发送和接收。希望这篇文章能够帮助你快速入门HarmonyOS的分布式开发。

下一步

如果你对HarmonyOS的分布式开发感兴趣,可以继续学习以下内容:

  1. 分布式任务调度:了解如何在多个设备间调度任务。
  2. 分布式数据管理:深入学习如何在多个设备间同步数据。
  3. 分布式UI:探索如何在多个设备间共享UI组件。

参考文档

希望这篇文章对你有所帮助,祝你在HarmonyOS的学习和开发中取得更多进展!

相关推荐
灯澜忆梦7 小时前
【RabbitMQ #10】 | MQ可靠性
分布式·rabbitmq
逐流人11 小时前
Ceph分布式存储集群配置与池管理:从配置优先级到PG、复本池与纠删码池
运维·分布式·ceph·云原生·云计算·rados
天天喝旺仔13 小时前
gRPC 底层原理:HTTP/2 多路复用、Protobuf 序列化与四种流模式
分布式·http·微服务·rpc
灯澜忆梦17 小时前
【RabbitMQ #5】 | 三大交换机 Fanout ,Direct ,Topic
分布式·rabbitmq·ruby
.冰块.19 小时前
Ceph 分布式存储实战(二):存储池管理与 cephx 认证授权
分布式·ceph·rados·纠删码·复本池·cephx认证与用户权限
我们从未走散21 小时前
从内存字典到租约内核:分布式上游账号池如何做到不超卖
分布式
.冰块.1 天前
Ceph 分布式存储实战(一):架构入门与 cephadm 集群部署
分布式·ceph·架构·cephadm
j7~1 天前
【Redis】《一文走完服务端高并发架构演进:从单机架构到 K8S 容器编排》
分布式·架构演进·服务端高并发分布式结构演进之路·架构基本概念·架构评价指标
Flynt1 天前
把 bug tracker 塞进 git 仓库,同步和冲突怎么解决?我把 git-bug 拆开实测了一遍
分布式·git·开源