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

Android Studio中PhotoPicker官方代码报错如何解决?

问题排查与解决方案

错误原因

从报错截图可知触发了IllegalStateException,核心问题是:registerForActivityResult()方法不能在点击事件等动态回调中调用,它必须在Activity的生命周期初始化阶段(比如onCreate)完成注册,否则系统会判定注册时机非法。

修复后的代码

package com.example.photopicker;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.PickVisualMediaRequest;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    Button addimage;
    // 声明为类成员变量
    private ActivityResultLauncher<PickVisualMediaRequest> pickMedia;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        addimage = findViewById(R.id.button_pick_photo);

        // 在onCreate生命周期内完成Launcher注册
        pickMedia = registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), uri -> {
            if (uri != null) {
                Log.d("PhotoPicker", "Selected URI: " + uri);
            } else {
                Log.d("PhotoPicker", "No media selected");
            }
        });

        addimage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 点击事件仅触发选择器启动操作
                pickMedia.launch(new PickVisualMediaRequest.Builder()
                        .setMediaType(new ActivityResultContracts.PickVisualMedia.ImageAndVideo())
                        .build());
            }
        });
    }
}

关键说明

  • registerForActivityResult()必须绑定到Activity的生命周期,只能在onCreate、onStart这类初始化阶段执行,不能延迟到用户交互事件中注册。
  • 修复后,Launcher在Activity创建时完成注册,点击事件仅负责触发选择器启动,完全符合Jetpack组件的生命周期规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:01:07