HarmonyOS应用开发实战:猫猫大作战-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}`);
}
四、最佳实践
- type 精准:指定 MIME 类型提高匹配率
- 文件 URI:使用
file://协议 - 临时文件:分享后系统可删除
- try-catch:目标应用不存在时捕获异常
总结
startByType 通过文件类型启动其他应用处理文件,适合分享截图。核心要点:type 指定 MIME 类型、 fileUri 文件路径、 startAbility 启动。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
更多推荐

所有评论(0)