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

Activity中onActivityResult未被调用问题求助

问题分析与解决方案

核心问题

你混淆了onActivityResult的触发逻辑:这个方法只会在当前Activity启动另一个Activity并等待返回结果时被调用,而不是在被其他Activity启动时触发。你现在从RecordVideo用startActivity()跳转到PostActivity,PostActivity的onActivityResult没有任何触发条件,自然不会执行。

具体排查与修正

  1. 当前代码的逻辑合理性

    • RecordVideo中通过startActivity()传递videoUri到PostActivity,这部分是正确的,PostActivity已经在onCreate中成功接收了Uri(取消注释Toast.makeText(this, "It's not null", Toast.LENGTH_SHORT).show();就能验证)。
    • PostActivity的onActivityResult代码是为了接收它自己启动的页面返回的结果(比如从相册选视频),但你目前的代码里没有启动任何需要返回结果的页面,所以这个方法不会被触发。
  2. 如果需要在PostActivity中获取新的视频(触发onActivityResult)

    • 如果你想在PostActivity里添加选择/录制视频的功能,需要主动启动对应的Activity并等待结果,示例如下:
      • 用旧API(startActivityForResult,已弃用但仍可运行):
        // 在PostActivity中添加按钮点击事件,启动相册选视频
        findViewById(R.id.btn_select_video).setOnClickListener(v -> {
            Intent pickVideoIntent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(pickVideoIntent, 1); // 请求码1和onActivityResult中的对应
        });
        
      • 用推荐的Jetpack Activity Result API:
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_post);
            
            // 注册结果回调
            ActivityResultLauncher<Intent> pickVideoLauncher = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (result.getResultCode() == RESULT_OK && result.getData() != null) {
                        Uri newVideoUri = result.getData().getData();
                        videoView.setVideoURI(newVideoUri);
                        videoView.start();
                        Toast.makeText(this, "视频选择成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(this, "视频选择失败", Toast.LENGTH_SHORT).show();
                    }
                }
            );
            
            // 绑定按钮点击
            findViewById(R.id.btn_select_video).setOnClickListener(v -> {
                Intent pickVideoIntent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
                pickVideoLauncher.launch(pickVideoIntent);
            });
            
            // 其他原有代码...
        }
        
  3. 如果你误解了onActivityResult的作用

    • 若你以为从RecordVideo跳转到PostActivity会触发PostActivity的onActivityResult,这是概念错误。onActivityResult是当前Activity的回调,处理自己发起的页面返回,和被其他页面启动无关。

内容的提问来源于stack exchange,提问作者His R.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:33:44