鸿蒙Next中ohos.want.action.senddata文件分享功能如何使用

在鸿蒙Next系统中,ohos.want.action.senddata这个Action的具体用法是什么?我想实现应用间的文件分享功能,但不太清楚如何配置Want参数以及接收方该如何处理。能否提供一个完整的代码示例,包括发送文件的Intent构建和接收方的数据解析步骤?

2 回复

鸿蒙Next中,用ohos.want.action.senddata分享文件?简单!先创建Want对象,设置action为"ohos.want.action.senddata",再塞入文件URI和类型。最后用startAbility()甩出去就行。注意权限别忘开,不然系统会傲娇地拒绝你!

更多关于鸿蒙Next中ohos.want.action.senddata文件分享功能如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,使用ohos.want.action.sendData实现文件分享功能,主要通过Want机制和FilePicker选择文件。以下是核心步骤和代码示例:

1. 发起文件分享

使用Want指定action为ohos.want.action.sendData,并附加文件URI和类型。

import common from '@ohos.app.ability.common';
import fileUri from '@ohos.file.fileuri';

// 在Ability或UIAbility中调用
async shareFile(context: common.Context, filePath: string) {
  let want = {
    action: 'ohos.want.action.sendData',
    entities: ['entity.system.share'],
    uri: fileUri.getUriFromPath(filePath), // 转换为URI格式
    type: 'image/*' // 根据文件类型修改,如 text/plain、application/pdf
  };
  
  try {
    await context.startAbility(want);
    console.log('文件分享已触发');
  } catch (error) {
    console.error('分享失败:', error.code);
  }
}

2. 选择文件并分享

结合FilePicker选择文件后调用分享:

import picker from '@ohos.file.picker';

async openFilePicker(context: common.Context) {
  const photoPicker = new picker.PhotoViewPicker();
  try {
    const photoSelectOptions = new picker.PhotoSelectOptions();
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 限制为图片
    photoSelectOptions.maxSelectNumber = 1; // 选择单文件
    
    const result = await photoPicker.select(photoSelectOptions);
    if (result && result.photoUris.length > 0) {
      await this.shareFile(context, result.photoUris[0]); // 传递URI
    }
  } catch (error) {
    console.error('文件选择失败:', error.code);
  }
}

3. 接收分享的文件

在接收方Ability的onCreateonNewWant中处理:

import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
  onCreate(want, launchParam) {
    if (want.action === 'ohos.want.action.sendData') {
      const fileUri = want.uri; // 获取分享的文件URI
      // 读取或处理文件内容
      console.log('接收到文件URI:', fileUri);
    }
  }
}

关键点:

  • URI转换:使用fileUri.getUriFromPath()将路径转为URI。
  • 类型匹配type字段需与文件MIME类型一致,确保目标应用能正确响应。
  • 权限声明:在module.json5中声明文件读写权限:
    {
      "module": {
        "requestPermissions": [
          {
            "name": "ohos.permission.READ_MEDIA",
            "reason": "$string:reason"
          }
        ]
      }
    }
    

实际使用时,需根据文件类型调整type,并处理URI的读写权限。此方法适用于图片、文档等常见文件分享场景。

回到顶部