# hos_resource_manager **Repository Path**: rdopensource/hos_resource_manager ## Basic Information - **Project Name**: hos_resource_manager - **Description**: 使用鸿蒙分布式软总线实现的分布式文件管理功能 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 0 - **Created**: 2022-12-09 - **Last Updated**: 2025-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 团队介绍 鼎桥通信技术有限公司于2005年在北京成立,将稳定高效的联接作为纽带,布局行业无线、物联网、终端产品三大业务板块,累计研发投入超100亿。鼎桥通信助力人们合规收集数据、提取有效信息、洞见事物的变化与生息,并依托成熟的市场和销售经验、高质量的创新研发能力、可靠完善的生产交付和售后服务体系,致力成为行业联接解决方案的全球领导者。 凭借无线行业通信领域多年的市场经验及技术积累,鼎桥通信充分利用自身的技术优势和行业优势,逐步向各个创新型应用领域扩展和推进,具备从操作系统研发到解决方案交付以及客户化定制等完整研发交付能力,保障行业信息安全前提下释放联接价值。同时,鼎桥重点布局行业客户聚焦的智能操作系统的安全性、合规性、定制化能力,与OpenHarmony的技术领先优势强强联合,为行业打造更安全可靠的数字底座,为客户创造更多价值。鼎桥将持续深度参与开源社区共建,共创繁荣新生态。 # hos_resource_manager #### 介绍 分布式资源管理是基于华为分布式能力实现的文件跨端管理sdk。 主要功能包括: 1. 公共文件拷贝至分布式文件。 2. 下载分布式文件到下载目录。 3. 获取分布式文件。 4. 分布式视频播放功能。 5. 分布式音频播放功能。 6. 分布式图片查看功能。 #### 软件架构 软件架构说明 ![输入图片说明](sfdf.png) #### 安装教程 Demo项目,需要使用deveco ide分别在两部机器上安装。如经过正常上架流程后,则只需要在任意一台机器上安装即可。 #### 使用说明 1. 将两端设备安装好demo 2. 打开设备的蓝牙功能 3. 进入app主页面后就会在设备列表查看到对端的设备 4. 选择对端设备后,进入文件类型选择页面进行类型过滤 5. 点击确认按钮后即可查看所有选择的文件列表,包括对端通过分布式能力共享过来的所有文本,媒体文件。 ## 版本变更 ### V1.0.0功能 - 公共文件拷贝至分布式文件。 - 下载分布式文件到下载目录。 - 获取分布式文件 ### V1.0.1变更功能 - 新增视频播放功能 ### V1.0.2变更功能 - 新增音频播放功能 - GUI优化 - bugfix ## 使用说明 ### 1.导包 将library目录的library-release1.0.0.har 拷贝至新的project中的Entry目录下的libs文件。在build-gradle中增加 sync后即可在程序调用该库的api ### 2.权限配置 ```json "reqPermissions": [ { "name": "ohos.permission.DISTRIBUTED_DATASYNC" }, { "name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" }, { "name": "ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE" }, { "name": "ohos.permission.READ_USER_STORAGE" }, { "name": "ohos.permission.WRITE_USER_STORAGE" }, { "name": "ohos.permission.READ_MEDIA" }, { "name": "ohos.permission.WRITE_MEDIA" }, { "name": "ohos.permission.GET_BUNDLE_INFO" } ], ``` 3.权限申请 ```java private void requestPermissions() { String[] permissions = { // 分布式数据同步权限 SystemPermission.DISTRIBUTED_DATASYNC, // 读取用户存储权限 SystemPermission.READ_USER_STORAGE, // 写用户存储权限 SystemPermission.WRITE_USER_STORAGE }; List permissionsToProcess = new ArrayList<>(); boolean grantPermission = true; for (String permission : permissions) { if (verifySelfPermission(permission) != IBundleManager.PERMISSION_GRANTED) { grantPermission = false; if (canRequestPermission(permission)) { permissionsToProcess.add(permission); } } } if (grantPermission) { readCommonFile(); } else { requestPermissionsFromUser(permissionsToProcess.toArray(new String[0]), 0); } } ``` ```java @Override public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults); if (requestCode == 0) { boolean grantPermission = true; for (int result : grantResults) { if (result != IBundleManager.PERMISSION_GRANTED) { grantPermission = false; } } if (grantPermission) { readCommonFile(); } } } ``` ### 3.DistributedFileManager 初始化 申请完权限后,调用startUp 进行初始化。 ```java DistributedFileManager distributedFileManager = DistributedFileManager.getInstance(); distributedFileManager.startUp(this, this.getAbilityPackage()); ``` ## 功能简介 ### 1. 拷贝公共文件至分布式文件目录 启动后,应用会自动将本机文件拷贝到分布式文件目录 耗时操作 DistributedFileManager ``` copyCommonImageFiles copyCommonAudioFiles copyCommonVideoFiles copyCommonDownloadsFiles copyCommonFiles ``` ![输入图片说明](picfwef.png) ### 2. 下载文件到下载目录。 已完成。 耗时操作 FileUtils ```java public static boolean saveToDownloads(Context context, InputStream inputStream, String path, String filename) ``` ### 3. 获取分布式文件 DistributedFileManager ```java getDistributedDirPath getDistributedDirFile ``` ![输入图片说明](doc/filelist.jpg) ### 4. 视频播放功能 1.0.1新增功能 打开视频播放界面,传入文件的绝对路径。 ```java intent.setParam(Constant.INTENT_STR_FILE_PATH, item.getAbsolutePath()); present(new VideoAbilitySlice(), intent); ``` ![输入图片说明](doc/videoplay.jpg) ### 5. 音频播放功能 1.0.2新增功能 打开音频播放界面,传入文件的绝对路径。 ```java intent.setParam(Constant.INTENT_STR_FILE_PATH, item.getAbsolutePath()); present(new AudioAbilitySlice(), intent); ``` ![输入图片说明](doc/audioplay.png)