HarmonyOS学习路之开发篇—设备管理(设备标识符)

简介: 网络设备节点通信标识符,是分布式软总线提供的一种非永久性标识符。NetworkID基于Java原生的UUID接口随机生成,长度为32字节,使用十六进制表示。主要用于业务调用分布式能力时,标识分布式网络内的设备节点。

NetworkID

简介

定义

网络设备节点通信标识符,是分布式软总线提供的一种非永久性标识符。NetworkID基于Java原生的UUID接口随机生成,长度为32字节,使用十六进制表示。主要用于业务调用分布式能力时,标识分布式网络内的设备节点。


NetworkID举例:6B97BC8F6F85A2A1A6E0E262111F42D6A8541CBFF6CAF688FA5293956EC3FD43


NetworkID特点

NetworkID为设备级标识符,不同APP在同一时间获取到同一设备的NetworkID相同。

NetworkID在设备下线、设备重启、恢复出厂设置后会发生变化,因此不可用于数据持久化存储的索引等场景。

NetworkID重置

为满足在分布式场景中的隐私要求,NetworkID在以下几个场景会发生变化:


用户操作进行设备恢复出厂设置。

设备重启。

分布式组网的设备上线列表从非空转为空,并持续为空5分钟后。

使用场景

NetworkID是分布式网络设备节点在分布式组网中的通信标识符,用于在分布式业务中标识网络设备节点。上层业务在调用分布式能力的时候,使用NetworkID标识不同的网络设备节点。由于同一设备的NetworkID的值在多次组网中可能会发生变化,因此NetworkID不能用于数据持久化存储的索引等场景。


开发准备

HarmonyOS SDK提供NetworkID相关API,应用程序可通过API使用NetworkID的能力。


获取NetworkID

public class MainAbility extends Ability {
    // 建议开发者自行设计界面,示例代码仅供参考
    private static final int OFFSET_X = 100;
    private static final int OFFSET_Y = 100;
    private static final int ADD_OFFSET_Y = 150;
    private static final int BUTTON_WIDTH = 800;
    private static final int BUTTON_HEIGHT = 100;
    private static final int TEXT_SIZE = 50;
    private int offsetY = 0;
    // 应用包名
    private String BUNDLE_NAME = "com.example.continuationdemo";
    // 注册控制中心服务后返回的Ability token
    private int abilityToken;
    // 用户在设备列表中选择设备后返回的NetworkID
    private String selectNetworkId;
    // 获取控制中心服务管理类
    private IContinuationRegisterManager continuationRegisterManager;
    // 设置控制中心设备状态变更的回调
    private IContinuationDeviceCallback callback = new IContinuationDeviceCallback() {
    @Override
    public void onDeviceConnectDone(String networkId,String deviceType) {
    // 在用户选择设备后回调获取NetworkID
    selectNetworkId = networkId;
    }
    @Override
    public void onDeviceDisconnectDone(String networkId) {
    }
    };
    // 设置注册控制中心服务回调
    private RequestCallback requestCallback = new RequestCallback() {
    @Override
    public void onResult(int result) {
    abilityToken = result;
    }
    };
    // 弹出选择设备列表
    private ClickedListener mShowDeviceListListener = new ClickedListener() {
        @Override
        public void onClick(Component arg0) {
            // 显示选择设备列表
            continuationRegisterManager.showDeviceList(abilityToken, null, null);
        }
    };
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        continuationRegisterManager = getContinuationRegisterManager();
        // 开发者可以自行进行界面设计
        // 为按钮设置统一的背景色
        // 例如通过PositionLayout可以实现简单界面
        PositionLayout layout = new PositionLayout(this);
        LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT);
        layout.setLayoutConfig(config);
        ShapeElement buttonBg = new ShapeElement();
        buttonBg.setRgbColor(new RgbColor(0, 125, 255));
        Button btnShowDeviceList = createButton("ShowDeviceList", buttonBg);
        btnShowDeviceList.setClickedListener(mShowDeviceListListener);
        linear.addComponent(btnShowDeviceList);
        super.setUIContent(layout);
        // 注册控制中心
        continuationRegisterManager.register(BUNDLE_NAME, null, callback, requestCallback);
    }
    private Button createButton(String text, ShapeElement buttonBg) {
        Button button = new Button(this);
        button.setContentPosition(OFFSET_X, OFFSET_Y + offsetY);
        offsetY += ADD_OFFSET_Y;
        button.setWidth(BUTTON_WIDTH);
        button.setHeight(BUTTON_HEIGHT);
        button.setTextSize(TEXT_SIZE);
        button.setTextColor(Color.YELLOW);
        button.setText(text);
        button.setBackground(buttonBg);
        return button;
    }
    @Override
    public void onStop() {
        super.onStop();
        // 解注册控制中心
        continuationRegisterManager.unregister(abilityToken, null);
    }
}


DVID

简介

DVID(Distributed Virtual device Identifier), 分布式虚拟设备标识符。设备登录了HarmonyOS账号后,系统根据HarmonyOS帐号及应用程序信息生成分布式虚拟设备ID,即DVID。


应用程序可以根据DVID访问和管理分布式设备,具备类似管理本地设备的能力和体验。同时,为防止其他应用获取当前应用数据(比如用户行为收集),DVID与HarmonyOS帐号及应用程序信息强关联,在登录了相同HarmonyOS帐号的分布式设备上,相同应用获取到的DVID相同,不同应用获取的DVID不同。


使用场景

场景一:应用程序一键式登录

登录了相同的HarmonyOS帐号的多个分布式设备中,应用程序在某一设备上登录之后,可按需同步应用帐号认证信息(帐号名、Token或其他)到其他设备上,在其他设备上打开应用时不再需要输入应用帐号认证信息,可直接登录使用。


场景二:应用程序管理多设备

应用程序在服务器端可以根据DVID管理相同应用帐号关联/绑定的分布式虚拟设备列表。


开发准备

HarmonyOS SDK提供DVID相关API,应用程序可通过API使用DVID的能力。


获取DVID

private String getDVID() {
    return AccountAbility.getAccountAbility().getDistributedVirtualDeviceId();
}
UUID

简介

随机生成的字符串,同一时空下所有设备生成的UUID都不同。应用在其生命周期内可以用该标识唯一识别相同设备。


格式说明:string型,标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)。


使用场景

应用使用情况统计分析:


应用在后台统计分析在相同设备上的应用的使用情况,该标识作为设备的唯一标识,区别其它设备。但需要注意,当应用卸载后该标识销毁。再次重新安装后调用获取UUID接口时会重新生成不同的ID。所以不会持久的标识同一台设备。


开发准备

集成Java JDK。import java.util.UUID

UUID uuid  =  UUID.randomUUID() 获取UUID

import java.util.UUID
UUID uuid  =  UUID.randomUUID() 


相关文章
|
10月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
9月前
|
安全 JavaScript API
鸿蒙开发核心要素
鸿蒙开发核心要素
|
6月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1126 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
885 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
10月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
348 0
HarmonyOS NEXT仓颉开发语言实战案例:电影App
周末好!本文分享使用仓颉语言重构ArkTS实现的电影App案例,对比两者在UI布局、组件写法及语法差异。内容包括页面结构、列表分组、分类切换与电影展示等。通过代码演示仓颉在HarmonyOS开发中的应用。##仓颉##ArkTS##HarmonyOS开发
|
10月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。
HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App
本文分享了一个旅行App首页的设计与实现,使用List容器搭配Row、Column布局完成个人信息、功能列表及推荐模块的排版,详细展示了HarmonyOS下的界面构建技巧。
|
6月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1026 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
300 1

热门文章

最新文章