HarmonyOS之深入解析设备标识符的功能和使用

Posted Forever_wj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HarmonyOS之深入解析设备标识符的功能和使用相关的知识,希望对你有一定的参考价值。

一、NetworkID

① NetworkID 简介
  • 网络设备节点通信标识符,是分布式软总线提供的一种非永久性标识符。NetworkID 基于 Java 原生的 UUID 接口随机生成,长度为 32 字节,使用十六进制表示。主要用于业务调用分布式能力时,标识分布式网络内的设备节点。如 NetworkID 示例:
	6B97BC8F6F85A2A1A6E0E262111F42D6A8541CBFF6CAF688FA5293956EC3FD43
  • NetworkID 为设备级标识符,不同 APP 在同一时间获取到同一设备的 NetworkID 相同。
  • NetworkID 在设备下线、设备重启、恢复出厂设置后会发生变化,因此不可用于数据持久化存储的索引等场景。
  • 为满足在分布式场景中的隐私要求,NetworkID 在以下几个场景会发生变化,发生重置:
    • 用户操作进行设备恢复出厂设置;
    • 设备重启;
  • 分布式组网的设备上线列表从非空转为空,并持续为空 5 分钟后。
② 应用场景
  • NetworkID 是分布式网络设备节点在分布式组网中的通信标识符,用于在分布式业务中标识网络设备节点。
  • 上层业务在调用分布式能力的时候,使用 NetworkID 标识不同的网络设备节点。
  • 由于同一设备的 NetworkID 的值在多次组网中可能会发生变化,因此 NetworkID 不能用于数据持久化存储的索引等场景。
③ 获取 NetworkID
  • HarmonyOS SDK 提供 NetworkID 相关 API,应用程序可通过 API 使用 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 RequsetCallback requsetCallback = new RequsetCallback() {
	    @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, requsetCallback);
	    }
	 
	    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 简介
  • DVID(Distributed Virtual device Identifier), 分布式虚拟设备标识符。设备登录了 HarmonyOS 账号后,系统根据 HarmonyOS 帐号及应用程序信息生成分布式虚拟设备 ID,即 DVID。
  • 应用程序可以根据 DVID 访问和管理分布式设备,具备类似管理本地设备的能力和体验。同时,为防止其他应用获取当前应用数据(比如用户行为收集),DVID 与 HarmonyOS 帐号及应用程序信息强关联,在登录了相同 HarmonyOS 帐号的分布式设备上,相同应用获取到的 DVID 相同,不同应用获取的 DVID 不同。
② 应用场景
  • 应用程序一键式登录:登录了相同的 HarmonyOS 帐号的多个分布式设备中,应用程序在某一设备上登录之后,可按需同步应用帐号认证信息(帐号名、Token 或其他)到其他设备上,在其他设备上打开应用时不再需要输入应用帐号认证信息,可直接登录使用。
  • 应用程序管理多设备:应用程序在服务器端可以根据 DVID 管理相同应用帐号关联/绑定的分布式虚拟设备列表。
③ 获取 DVID
  • HarmonyOS SDK 提供 DVID 相关 API,应用程序可通过 API 使用 DVID 的能力。
	private String getDVID() {
	    return AccountAbility.getAccountAbility().getDistributedVirtualDeviceId();
	}

三、UUID

① UUID 简介
  • 随机生成的字符串,同一时空下所有设备生成的 UUID 都不同。应用在其生命周期内可以用该标识唯一识别相同设备。
  • 格式说明:string 型,标准的 UUID 格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)。
② 应用场景
  • 应用在后台统计分析在相同设备上的应用的使用情况,该标识作为设备的唯一标识,区别其它设备。
  • 但需要注意,当应用卸载后该标识销毁,再次重新安装后调用获取 UUID 接口时会重新生成不同的 ID,所以不会持久的标识同一台设备。
③ 获取 UUID
	import java.util.UUID
	UUID uuid = UUID.randomUUID() 

以上是关于HarmonyOS之深入解析设备标识符的功能和使用的主要内容,如果未能解决你的问题,请参考以下文章

HarmonyOS之深入解析相机的功能和使用

HarmonyOS之深入解析蓝牙Bluetooth的功能和使用

HarmonyOS之深入解析Ability的功能和使用

HarmonyOS之深入解析视频的功能和使用

HarmonyOS之深入解析音频的功能和使用

HarmonyOS之深入解析WLAN的功能和使用