HarmonyOS 鸿蒙Next中关于向虚拟设备中发送文件的问题

HarmonyOS 鸿蒙Next中关于向虚拟设备中发送文件的问题 请问有没有方法可以通过DevEco Studio的“设备文件浏览”页面向鸿蒙系统的虚拟设备的自己的应用的文件夹里发送文件?

6 回复

【背景知识】

开发者可以使用Device File Browser,在DevEco Studio上如PC端操作一样,进行文件新建、删除、上传、下载等操作,而无需使用命令行,提升开发效率,当前支持普通文件视图与应用沙箱视图两种模式。

当前对使用应用沙箱进行操作有一定的使用约束,需要已通过USB或Wi-Fi连接设备。更多约束可参考文档链接:沙箱操作使用约束

【解决方案】

模拟器的话,暂时无法直接使用Device File Browser操作沙箱文件操作。

可以通过代码实现,一是将文件置于工程项目资源目录并通过代码读取;二是借助hdc工具传输至公共目录再手动选择文件复制。

  • 方案一:将PC本地文件复制到工程项目的entry\src\main\resources\rawfile目录,然后使用getRawFileContent()复制到沙箱。

示例代码如下:

// test.txt是位于resources/rawfile目录下的文件
getContext().resourceManager.getRawFileContent('test.txt', (_err, value) => {
  let myBuffer: ArrayBufferLike = value.buffer
  let filePath = getContext().filesDir + '/test.txt';
  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  let writeLen = fs.writeSync(file.fd, myBuffer);
  console.info(`write data to file succeed and size is:${writeLen}`);
  fs.closeSync(file);
})
  • 方案二:使用hdc工具将文件传输到设备的公共目录,然后使用DocumentViewPicker选择文件将其复制至沙箱。

hdc传输示例如下:

// 假设PC本地文件位于D盘,往Docs目录里推送文件
// /storage/media/100/local/files/Docs/Documents是Documents目录的物理路径
hdc file send D:\test.txt /storage/media/100/local/files/Docs/Documents/test.txt 

DocumentViewPicker选择文件并复制到沙箱,示例如下:

async function picture() {
  let documentSelectOptions = new picker.DocumentSelectOptions();
  let documentPicker = new picker.DocumentViewPicker();
  documentPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
    console.info(`DocumentViewPicker.select successfully, documentSelectResult uri:${documentSelectResult}`);
    let file = fs.openSync(documentSelectResult[0], fs.OpenMode.READ_ONLY)
    let file2Path = getContext().filesDir + '/test.txt';
    let file2 = fs.openSync(file2Path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
    console.info(`DocumentViewPicker  file.fd:${file.fd},file2.fd:${file2.fd}`);
    fs.copyFileSync(file.fd, file2.fd)
    fs.closeSync(file);
    fs.closeSync(file2);
  }).catch((err: BusinessError) => {
    console.error(`DocumentViewPicker.select failed with err:${err}`);
  });
}

更多关于HarmonyOS 鸿蒙Next中关于向虚拟设备中发送文件的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


模拟器的话,暂时无法实现,直接在“设备文件浏览”上操作沙箱目录。

真机的话,可以通过 hdc 工具上传到设备。

hdc -t your-device file send -b your-bundlename a.txt data/storage/el2/base/b.txt

访问设备文件文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-device-file-explorer#section48216711204

最后,可以通过代码实现。大致思路是:

在本机启动一个静态服务器,你的应用直接通过接口访问文件,在存储到沙箱里。

标题

文本内容

子标题

更多文本内容

更多内容

这里是更多的详细信息。

我有个idea,用于解决浏览、操作沙箱的问题。实现idea后,再来回复。

在HarmonyOS Next中,向虚拟设备发送文件可通过分布式文件系统实现。使用分布式文件管理API(如ohos.file.distributedFile)进行跨设备文件传输。调用getRemoteFileAbility()获取目标设备能力,通过createSendTask()创建传输任务。需确保设备间已建立可信连接,并在config.json中声明ohos.permission.DISTRIBUTED_DATASYNC权限。传输过程支持进度监听和任务管理。

在HarmonyOS Next中,可以通过DevEco Studio的"设备文件浏览"功能向虚拟设备发送文件。具体步骤如下:

  1. 确保已连接虚拟设备并运行目标应用
  2. 在DevEco Studio中打开"Tools > Device File Explorer"
  3. 导航到目标应用的数据目录:/data/app/el2/100/base/[包名]/files/
  4. 右键点击目标目录选择"Upload"或直接拖放文件

注意:

  • 需要确保应用有文件读写权限
  • 部分系统目录可能需要root权限
  • 文件传输后可能需要重启应用才能识别新文件

这种方法适用于开发调试阶段快速传输测试文件到应用目录。

回到顶部