Android开发中第二个Activity的onActivityResult失效无法显示图库
Android onActivityResult 图库跳转无响应排查方案
1. 启动逻辑校验
- 确认
ProfileActivity中启动GalleryActivity时调用的是startActivityForResult()而非普通startActivity(),传入的requestCode必须为正整数:
// 先定义全局常量,值必须大于0 private static final int REQUEST_PICK_IMAGE = 1001; // 跳转逻辑 startActivityForResult(new Intent(this, GalleryActivity.class), REQUEST_PICK_IMAGE);
2. GalleryActivity返回结果逻辑校验
- 选中图片后必须先调用
setResult()传入正确参数,再调用finish(),顺序不能颠倒:
// selectedImageUri为你选中的图库图片Uri Intent resultIntent = new Intent(); resultIntent.putExtra("selected_image_uri", selectedImageUri); setResult(RESULT_OK, resultIntent); // 必须放在setResult之后调用 finish();
3. onActivityResult回调逻辑校验
- 确认重写的方法参数正确,必须调用super方法,且判断逻辑没有遗漏:
@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_PICK_IMAGE && resultCode == RESULT_OK && data != null) { Uri imageUri = data.getParcelableExtra("selected_image_uri"); // 此处执行图片加载逻辑,推荐使用Glide、Picasso等第三方框架加载,避免手动转Bitmap出现OOM } }
- 若项目
targetSdkVersion >= 30,原生onActivityResult已被废弃,建议替换为Activity Result API,避免回调失效:
// 全局定义启动器 private ActivityResultLauncher<Intent> galleryLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == RESULT_OK && result.getData() != null) { Uri imageUri = result.getData().getParcelableExtra("selected_image_uri"); // 图片加载逻辑 } } ); // 跳转时调用 galleryLauncher.launch(new Intent(this, GalleryActivity.class));
4. 权限校验
- 确认
AndroidManifest.xml中已声明对应存储权限,且运行时权限已被用户授权:- Android 13及以上:需声明
android.permission.READ_MEDIA_IMAGES - Android 10~12:需声明
android.permission.READ_EXTERNAL_STORAGE - Android 9及以下:需声明
android.permission.WRITE_EXTERNAL_STORAGE
- Android 13及以上:需声明
内容的提问来源于stack exchange,提问作者chen abien
相关产品推荐
相关产品推荐

