You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Viro包调用takeScreenshot接口无法截图的问题求助

问题:Viro AR场景截图功能报错

我在使用Viro包开发AR应用时,尝试实现场景截图功能,但运行时出现错误。以下是我的实现代码:

onButtonTap = async () => {
    if (!this.state.writeAccessPermission) {
      this.requestWriteAccessPermission();
    }
    try {
      await this.ARSceneNav.sceneNavigator.takeScreenshot('kartvya', true).then(result => {
          console.log(result.url, 'urlurlurlurlurl');
          console.log(result.success, 'successsuccesssuccesssuccesssuccess');
          console.log(result.errorCode, 'errorCodeerrorCodeerrorCodeerrorCode');
        });
    } catch (error) {
      console.log(error, 'errorerrorerrorerrorerror');
    }
  };
<TouchableOpacity
    style={{justifyContent: 'center'}}
    onPress={this.onButtonTap}>
    <Text>Capture</Text>
</TouchableOpacity>

可能的错误原因及修复方案

1. 权限请求未等待完成

当前代码调用requestWriteAccessPermission后直接执行截图,但权限请求是异步操作,大概率权限还没获取到就触发了截图,导致权限不足报错。必须等待权限请求完成后再执行截图逻辑。

2. await与then混用导致逻辑混乱

同时使用await和.then()会让异步逻辑变得难以追踪,建议统一用await处理异步操作,既方便错误捕获,也让代码逻辑更清晰。

3. 错误处理不完整

原代码的catch块无法全面捕获takeScreenshot内部的错误,统一用await后能更完整地捕获整个流程中的异常。

修改后的代码示例

onButtonTap = async () => {
  // 先处理权限,等待权限请求结果
  if (!this.state.writeAccessPermission) {
    const permissionGranted = await this.requestWriteAccessPermission();
    if (!permissionGranted) {
      console.log("未获取存储权限,无法保存截图");
      return;
    }
  }

  try {
    // 统一使用await处理截图异步操作
    const result = await this.ARSceneNav.sceneNavigator.takeScreenshot('kartvya', true);
    console.log('截图路径:', result.url);
    console.log('操作是否成功:', result.success);
    
    if (!result.success) {
      console.log('截图失败,错误码:', result.errorCode);
    }
  } catch (error) {
    console.log('截图过程出现异常:', error);
  }
};
<TouchableOpacity
  style={{justifyContent: 'center'}}
  onPress={this.onButtonTap}>
  <Text>Capture</Text>
</TouchableOpacity>

另外,建议核对Viro包中takeScreenshot方法的参数定义,确认第二个布尔参数是否对应“保存到相册”的功能,避免参数传错导致的问题。

内容的提问来源于stack exchange,提问作者Kaushal Lalani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:45:43