Activity中onActivityResult未被调用问题求助
问题分析与解决方案
核心问题
你混淆了onActivityResult的触发逻辑:这个方法只会在当前Activity启动另一个Activity并等待返回结果时被调用,而不是在被其他Activity启动时触发。你现在从RecordVideo用startActivity()跳转到PostActivity,PostActivity的onActivityResult没有任何触发条件,自然不会执行。
具体排查与修正
当前代码的逻辑合理性
RecordVideo中通过startActivity()传递videoUri到PostActivity,这部分是正确的,PostActivity已经在onCreate中成功接收了Uri(取消注释Toast.makeText(this, "It's not null", Toast.LENGTH_SHORT).show();就能验证)。PostActivity的onActivityResult代码是为了接收它自己启动的页面返回的结果(比如从相册选视频),但你目前的代码里没有启动任何需要返回结果的页面,所以这个方法不会被触发。
如果需要在
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); }); // 其他原有代码... }
- 用旧API(
- 如果你想在
如果你误解了
onActivityResult的作用- 若你以为从
RecordVideo跳转到PostActivity会触发PostActivity的onActivityResult,这是概念错误。onActivityResult是当前Activity的回调,处理自己发起的页面返回,和被其他页面启动无关。
- 若你以为从
内容的提问来源于stack exchange,提问作者His R.H
相关产品推荐
相关产品推荐

