文章配图:startByType 通过类型启动

页面预览

前言

startByType 通过指定文件类型启动其他应用来处理该文件。在「猫猫大作战」中,使用 startByType 打开图片分享到社交应用。

一、startByType 基础

import { common } from '@kit.AbilityKit';

async function shareImage(context: common.UIAbilityContext, fileUri: string): Promise<void> {
  const want = {
    action: 'ohos.want.action.sendData',
    type: 'image/jpeg',
    parameters: {
      'ability.params.stream': [fileUri],
    },
  };

  try {
    await context.startAbility(want);
    console.info('分享应用已启动');
  } catch (err) {
    console.error(`启动失败: ${err.message}`);
  }
}

二、支持的 type

type 说明 示例
image/jpeg JPGE 图片 分享截图
image/png PNG 图片 分享图标
text/plain 纯文本 分享文本
application/json JSON 分享数据

三、游戏中的应用

// 分享战绩截图
async function shareScoreScreenshot(context: common.UIAbilityContext): Promise<void> {
  // 1. 截图
  const pixelMap = await getUIContext().createPixelMap({ width: 360, height: 640 });

  // 2. 保存到临时文件
  const tempPath = `${getContext().tempDir}/score_share.jpg`;
  const packer = image.createImagePacker();
  const buffer = await packer.packing(pixelMap, { format: 'image/jpeg', quality: 85 });
  packer.release();
  const file = fileIo.openSync(tempPath,
    fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY | fileIo.OpenMode.TRUNC);
  fileIo.writeSync(file.fd, buffer);
  fileIo.closeSync(file);

  // 3. 通过类型启动分享
  await shareImage(context, `file://${tempPath}`);
}

四、最佳实践

  1. type 精准:指定 MIME 类型提高匹配率
  2. 文件 URI:使用 file:// 协议
  3. 临时文件:分享后系统可删除
  4. try-catch:目标应用不存在时捕获异常

总结

startByType 通过文件类型启动其他应用处理文件,适合分享截图。核心要点:type 指定 MIME 类型、 fileUri 文件路径、 startAbility 启动

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐