# DistributedGameDemo **Repository Path**: cxshu/distributed-game-demo ## Basic Information - **Project Name**: DistributedGameDemo - **Description**: 使用鸿蒙的分布式数据库实现手机和平板互联的简单示例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-06-05 - **Last Updated**: 2022-01-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 1. 权限申请 ``` "reqPermissions": [ { "name": "ohos.permission.DISTRIBUTED_DATASYNC" }, { "name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" } ] ``` ``` requestPermissionsFromUser(new String[]{ "ohos.permission.DISTRIBUTED_DATASYNC" }, 0); ``` ### 2.获取当前设备信息 ``` // 获取当前设备信息 ohos.data.distributed.device.DeviceInfo localDeviceInfo = KvManagerFactory.getInstance() .createKvManager(new KvManagerConfig(this)).getLocalDeviceInfo(); // 当前设备Id String localDeviceId = localDeviceInfo.getId(); // 当前设备Type int localDeviceType = Integer.parseInt(localDeviceInfo.getType()); ``` ### 3. 获取远程设备信息 ``` List deviceList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ALL_DEVICE); if (deviceList != null) { for (DeviceInfo deviceInfo : deviceList) { DeviceInfo.DeviceType deviceType = deviceInfo.getDeviceType(); String deviceId = deviceInfo.getDeviceId(); } } ``` ### 4. 打开本地设备的FA ``` Intent intent = new Intent(); ElementName elementName = new ElementName("", "com.cxs.distributedgamedemo", abilityName); intent.setElement(elementName); ``` ### 5. 打开远程设备的FA ``` Intent intent = new Intent(); Operation operation = new Intent.OperationBuilder() .withDeviceId(deviceId) .withBundleName("com.cxs.distributedgamedemo") .withAbilityName(abilityName) .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) .build(); intent.setOperation(operation); startAbility(intent); ``` ### 6. 创建分布式数据库 ``` public static SingleKvStore getKvStore(Context context) { if (kvStore != null) { return kvStore; } // 根据应用上下文创建KvManagerConfig对象 KvManagerConfig kvManagerConfig = new KvManagerConfig(context); // 创建分布式数据库管理器实例 kvManager = KvManagerFactory.getInstance().createKvManager(kvManagerConfig); // 数据库配置 Options options = new Options(); // setCreateIfMissing:设置数据库不存在时是否创建 // setEncrypt: 设置数据库是否加密 // setKvStoreType: 设置分布式数据库的类型 // setAutoSync: 设置数据库是否自动同步(默认true) options.setCreateIfMissing(true) .setEncrypt(false) .setKvStoreType(KvStoreType.SINGLE_VERSION); // 通过分布式数据库管理器实例获取数据库 kvStore = kvManager.getKvStore(options, storeId); return kvStore; } ``` ### 7. 向分布式数据库写入数据 ``` kvStore.putString(key, value); ``` ### 8. 从分布式数据库读取数据 ``` String data = kvStore.getString(key); ``` ### 9. 监听数据库 ##### 1). 实现KvStoreObserver接口 ``` // 实现KvStoreObserver接口,用于订阅数据库变化 private class KvStoreObserverClient implements KvStoreObserver { @Override public void onChange(ChangeNotification changeNotification) { System.out.println("================================="); String action = kvStore.getString("action"); getUITaskDispatcher().delayDispatch(() -> { text.append("\n点击了 " + action); }, 0); System.out.println("================================="); } } ``` ##### 2). 注册KvStoreObserver实现监听 ``` kvStore = KvStoreUtils.getKvStore(this); // 构造并注册KvStoreObserver实例用于订阅数据库变化 KvStoreObserverClient kvStoreObserverClient = new KvStoreObserverClient(); kvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, kvStoreObserverClient); ```