前言
startByType通过指定文件类型启动其他应用来处理该文件。在「猫猫大作战」中,使用 startByType 打开图片分享到社交应用。
一、startByType 基础
import{common}from'@kit.AbilityKit';asyncfunctionshareImage(context:common.UIAbilityContext,fileUri:string):Promise<void>{constwant={action:'ohos.want.action.sendData',type:'image/jpeg',parameters:{'ability.params.stream':[fileUri],},};try{awaitcontext.startAbility(want);console.info('分享应用已启动');}catch(err){console.error(`启动失败:${err.message}`);}}二、支持的 type
| type | 说明 | 示例 |
|---|---|---|
image/jpeg | JPGE 图片 | 分享截图 |
image/png | PNG 图片 | 分享图标 |
text/plain | 纯文本 | 分享文本 |
application/json | JSON | 分享数据 |
三、游戏中的应用
// 分享战绩截图asyncfunctionshareScoreScreenshot(context:common.UIAbilityContext):Promise<void>{// 1. 截图constpixelMap=awaitgetUIContext().createPixelMap({width:360,height:640});// 2. 保存到临时文件consttempPath=`${getContext().tempDir}/score_share.jpg`;constpacker=image.createImagePacker();constbuffer=awaitpacker.packing(pixelMap,{format:'image/jpeg',quality:85});packer.release();constfile=fileIo.openSync(tempPath,fileIo.OpenMode.CREATE|fileIo.OpenMode.WRITE_ONLY|fileIo.OpenMode.TRUNC);fileIo.writeSync(file.fd,buffer);fileIo.closeSync(file);// 3. 通过类型启动分享awaitshareImage(context,`file://${tempPath}`);}四、最佳实践
- type 精准:指定 MIME 类型提高匹配率
- 文件 URI:使用
file://协议 - 临时文件:分享后系统可删除
- try-catch:目标应用不存在时捕获异常
总结
startByType 通过文件类型启动其他应用处理文件,适合分享截图。核心要点:type指定 MIME 类型、fileUri文件路径、startAbility启动。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- startAbility 文档
- 第 109 篇:start-ability
- 第 111 篇:engine-class
- 第 154 篇:ShareKit