HarmonyOS 鸿蒙Next 分享文件,调用startAbility,16000050 错误

发布于 1周前 作者 yuanlaile 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 分享文件,调用startAbility,16000050 错误

模拟器中,分享一个txt文件,出现16000050 错误,什么原因?如何排查?

页面如图

代码如下

代码如下

@Preview
@Component
struct FileDemo {
  @State
  private model: FileDemoViewModel = new FileDemoViewModel(getContext(this) as common.UIAbilityContext)

  async aboutToAppear() {
    await this.model.reload()
    this.model.selected = this.model.items.length > 0 ? this.model.items[0] : ''
  }

  build() {
    Column({ space: 10 }) {
      ForEach(this.model.items, (v: string) => {
        Row({ space: 10 }) {
          Radio({ value: v, group: "file" }).checked(v === this.model.selected).onChange((check) => {
            if (check) {
              this.model.selected = v
            }
          })
          Text(v).layoutWeight(1)
          Button() {
            SymbolGlyph($r('sys.symbol.clean'))
          }.buttonStyle(ButtonStyleMode.TEXTUAL).padding(10).onClick(() => this.model.handleRemove(v))
        }.width("100%").padding(4).alignItems(VerticalAlign.Center).onClick(() => {
          this.model.selected = v
        })
      })
      TextArea({ text: $$this.model.content }).height(80)
      Button("保存").width("100%").onClick(() => this.model.handleSave(this.model.content))
      Button("分享文件").width("100%").onClick(() => this.model.handleShare(this.model.selected))
    }.width('100%')
    .backgroundColor($r('sys.color.white'))
    .padding(12)
    .borderRadius(16)
  }
}
复制
FileDemoViewModel:


class FileDemoViewModel {
  private context: common.UIAbilityContext
  private dir: string
  // 目录列表
  items: string[] = []
  selected: string = ""
  content: string = ""

  constructor(context: common.UIAbilityContext) {
    this.context = context
    this.dir = this.context.cacheDir + '/demo'
  }

  async reload() {
    const isExist = await fs.access(this.dir, fs.AccessModeType.EXIST)
    if (!isExist) {
      fs.mkdir(this.dir)
      return;
    }
    this.items = await fs.listFile(this.dir)
    console.log("reload", this.items.toString())
  }

  async handleRemove(v: string) {
    await fs.unlink(this.dir + '/' + v)
    this.reload()
  }

  async handleSave(value: string) {
    console.log('save', value)
    const path = this.dir + `/${new Date().getTime()}.txt`
    const file = await fs.open(path, fs.OpenMode.WRITE_ONLY | fs.OpenMode.CREATE)
    await fs.write(file.fd, value)
    await fs.close(file)
    this.content = ""
    console.log('save done', path)
    this.reload()
  }

  async handleShare(v: string) {
    const path = this.dir + '/' + v
    const uri = fileUri.getUriFromPath(path)
    console.log('uri', uri)

    const want: Want = {
      flags: wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION,
      action: 'ohos.want.action.sendData',
      uri: uri,
      type: 'text/plain'
    }

    try {
      await this.context.startAbility(want)
      console.info('Invoke getCurrentBundleStats succeeded.');
    } catch (e) {
      console.error(`Invoke startAbility failed, code is ${e.code}, message is ${e.message}`);
    }
  }
}
2 回复

针对您提到的HarmonyOS 鸿蒙Next分享文件时调用startAbility遇到16000050错误的问题,这通常与内部处理错误相关,可能由内存申请、多线程处理异常等原因引起。具体可能的原因包括内部对象为空、处理超时、包管理获取失败或启动的Ability实例已达到上限等。

为解决这个问题,您可以尝试以下步骤:

  1. 确认系统内存是否充足,设备使用的系统版本是否存在异常。
  2. 检查是否启动了过多的Ability,尝试关闭一些不必要的Ability再试。
  3. 清除系统缓存,确保设备处于良好的运行状态。
  4. 重启设备,尝试再次进行文件分享操作。

如果以上步骤均未能解决问题,建议您联系官网客服以获取更专业的技术支持。官网地址是:https://www.itying.com/category-93-b0.html。希望这些信息能对您有所帮助。

回到顶部