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

Unity Activity无法返回结果求助:startActivityForResult返回Intent为空

嘿,我之前也踩过Unity Activity返回结果为空的坑!你的问题核心大概率是在onDestroy里设置返回结果太晚了——Android系统在Activity走到onDestroy之前,可能已经把默认的空结果回传给调用方了,这时候再设置结果根本不会被捕获。

先说说问题根源

当你用startActivityForResult启动Activity时,系统会等待目标Activity调用setResult()后,在finish()阶段把结果打包返回。但onDestroy是Activity生命周期的最后一步,此时系统已经完成了结果传递的流程,就算你在这里设置了数据,主应用也拿不到了。另外,mUnityPlayer.quit()内部可能已经触发了Activity的销毁逻辑,这时候再补设结果完全赶不上趟。

具体解决方案

1. 把设置结果的逻辑提前到mUnityPlayer.quit()之前

不要等到onDestroy,在触发Unity退出的时机(比如Unity侧的退出回调、自定义退出按钮点击)就先设置好结果,再执行退出和finish:

// 示例:自定义一个退出Unity并返回结果的方法
public void exitUnityWithResult() {
    // 1. 先构建要返回的Intent数据
    Intent resultIntent = new Intent();
    resultIntent.putExtra("session_id", "your_closed_session_id");
    resultIntent.putExtra("status", "success");
    setResult(RESULT_OK, resultIntent);

    // 2. 再调用UnityPlayer的退出方法
    mUnityPlayer.quit();

    // 3. 手动调用finish,确保Activity正常结束并传递结果
    finish();
}

然后把onDestroy里的设置结果代码删掉,只保留必要的资源清理逻辑就行。

2. 检查UnityActivity的启动模式

去AndroidManifest.xml里看看你的UnityApplication配置,别用android:launchMode="singleInstance"或singleTask——这两种模式下Activity会跑在单独的任务栈里,startActivityForResult根本没法正常返回结果(系统会直接返回RESULT_CANCELED,Intent为空)。如果必须用特殊启动模式,就得换别的方式传数据,比如本地存储、EventBus或者全局静态变量。

3. 处理返回键退出的情况

如果用户是按返回键退出Unity Activity,重写onBackPressed()来提前设置结果:

@Override
public void onBackPressed() {
    // 先设置返回结果
    Intent resultIntent = new Intent();
    resultIntent.putExtra("key", "your_data");
    setResult(RESULT_OK, resultIntent);

    // 再执行Unity退出和Activity结束
    mUnityPlayer.quit();
    super.onBackPressed();
}

额外排查点

  • 确认主应用的onActivityResult()逻辑正确:检查请求码、结果码是否匹配,别漏了super.onActivityResult()的调用:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == YOUR_UNITY_REQUEST_CODE && resultCode == RESULT_OK) {
        if (data != null) {
            // 处理返回的数据
            String sessionStatus = data.getStringExtra("status");
        }
    }
}
  • 检查你的closeSession()方法有没有提前触发finish(),如果这个方法里已经让Activity结束了,后续的设置结果操作自然无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:26:00