Android Studio中选择图片后App退出,OnActivityResult未触发如何解决?
问题排查和修复步骤
- 检查启动上下文和回调对应关系
如果你是在Fragment中调用的startActivityForResult,请确保你重写的是Fragment类的onActivityResult,而不是只重写了宿主Activity的回调,否则响应结果会被宿主拦截不会下发到Fragment。 - 检查Activity启动模式配置
打开AndroidManifest.xml,确认当前页面Activity的launchMode没有设置为singleInstance/singleTask,这两种启动模式会让新启动的图片选择器运行在独立任务栈,返回时无法触发onActivityResult回调,修改为standard或singleTop即可。 - 检查权限配置和动态申请
不同Android版本需要申请对应的存储权限才能读取选中的图片,权限缺失会导致回调触发前就发生崩溃退到桌面:- Android 12及以下:需要申请
READ_EXTERNAL_STORAGE权限 - Android 13及以上:需要申请
READ_MEDIA_IMAGES权限
注意所有危险权限都需要在运行时动态申请,不能只在Manifest里声明。
- Android 12及以下:需要申请
- 修复高版本系统图片读取逻辑
你当前通过MediaStore.Images.Media.DATA获取本地路径的方式在Android 10(API 29)及以上已经废弃,拿到的路径为空会直接触发空指针崩溃,导致你看不到回调日志,改为直接通过Uri加载Bitmap即可:
private final static int SELECT_PHOTO = 12345; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.e("CALLED", "OnActivity Result"); if (requestCode == SELECT_PHOTO && resultCode == RESULT_OK && data != null) { Uri pickedImage = data.getData(); Bitmap bitmap = null; try { // 直接通过Uri打开输入流解码Bitmap,兼容所有系统版本 bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(pickedImage)); Log.e("img", "It worked"); // 后续处理bitmap逻辑 } catch (Exception e) { e.printStackTrace(); } } }
- 补充崩溃日志排查
打开Logcat选择「无过滤器」模式,搜索AndroidRuntime关键词,确认是否有未捕获的崩溃日志导致APP直接退到桌面。
内容的提问来源于stack exchange,提问作者srm
相关产品推荐
相关产品推荐

