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

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里声明。
  • 修复高版本系统图片读取逻辑
    你当前通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:27:06