Android 从Gallery或Camera返回后不会调用onActivityResult

Android 从Gallery或Camera返回后不会调用onActivityResult,android,android-fragments,android-camera,android-gallery,android-camera-intent,Android,Android Fragments,Android Camera,Android Gallery,Android Camera Intent,我需要打开相机或图库将照片上传到我的应用程序中,然后使用它。问题是,在调用startActivityForResult()后,当我拍摄照片并单击X或“确定”按钮时,它会将我返回到我的应用程序,但根本不会调用ActivityResult。有什么原因不能工作吗?因为这个机制像一年前一样有效。我从其他项目中重复使用了它。唯一的区别是我在这个项目中使用了片段。我为main活动和Fragment实现了对活动结果的覆盖,但当我从画廊/摄像机回来时,这些方法都没有被调用 代码: 画廊: private fun

我需要打开相机或图库将照片上传到我的应用程序中,然后使用它。问题是,在调用
startActivityForResult()
后,当我拍摄照片并单击X或“确定”按钮时,它会将我返回到我的应用程序,但根本不会调用ActivityResult。有什么原因不能工作吗?因为这个机制像一年前一样有效。我从其他项目中重复使用了它。唯一的区别是我在这个项目中使用了
片段。我为
main活动
Fragment
实现了对活动结果的
覆盖,但当我从画廊/摄像机回来时,这些方法都没有被调用

代码:

画廊:

private fun openGallery() {
    val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
    fragment?.activity?.let{it.startActivityForResult(intent, 
    GALLERY_REQUEST_CODE)}?:kotlin.run{App.showToast("Internal Error")}
}
摄像机:

private fun openCamera() {
        val tempFile = createImageFile()
        photoPath = tempFile.absolutePath
        photoUri = FileProvider.getUriForFile(a, app.packageName + ".fileprovider", tempFile)

        val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
        if (intent.resolveActivity(a.packageManager) != null) {
            fragment?.activity?.let{it.startActivityForResult(intent, CAMERA_REQUEST_CODE)}?:kotlin.run{App.showToast("Internal Error")}
        }
}
片段和主要活动:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        when(requestCode){
            CAMERA_REQUEST_CODE -> {
                maybeProcessPhoto(requestCode, resultCode, data)
            }
            GALLERY_REQUEST_CODE -> {
               maybeProcessPhoto(requestCode, resultCode, data)
            }
            else -> super.onActivityResult(requestCode, resultCode, data)
        }
}
更新:

问题是我从
定制类
调用了
startActivityForResult
,这类似于块管理照片编辑。我只是在初始化时将
Fragment
对象发送给它的构造函数,并调用了
Fragment?.startActivityForResult()
,它没有向activityresult
返回任何内容。我必须将函数作为参数发送到那里,在该函数中我必须调用
startActivityForResult
。从我的观点来看,这是完全相同的,因为两个调用都是对片段对象的,但看起来您可以从引用的片段打开新活动,但结果不会返回。您必须直接从片段本身调用startActivityForResult来获得结果

例如:

class CameraBlock(
        private val app: App,
        private val a: Activity,
        private val f: Fragment? = null,
        private val onIntent: (Intent, Int)->Unit
){


  private fun openGallery(){
     val intent = Intent(Intent.ACTION_PICK, 
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
    //DOESNT WORK
    f?.let{it.startActivityForResult(intent, 
    GALLERY_REQUEST_CODE)}?:kotlin.run{App.showToast("Internal Error")}
    
    //THIS WORKS
    onIntent.invoke(intent, GALLERY_REQUEST_CODE)
  }
}
片段:

override fun onCreateView(li: LayoutInflater, container: ViewGroup?, si: Bundle?): View? {
        return (li.inflate(R.layout.photo_select, container, false) as ViewGroup).apply {
            openGalleryButton = CameraBlock(
                    app = app,
                    a = parentActivity,
                    f = this@PhotoFragment,
                    onIntent = ::openIntent
            )

        }
    }
 
private fun openIntent(int: Intent, code: Int){
        startActivityForResult(int, code)
    }
片段:

@Override
  public void onActivityResult(int requestCode, int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

您可以在不使用其父引用的情况下运行onactivityresult方法。请在onactivityresult方法中使用以下代码:

    super.onActivityResult(requestCode, resultCode, data);

您必须直接从活动中启动图库和相机的意图,而不是片段。要在片段和活动之间进行通信,可以在活动实现的片段中使用接口。此界面包含两种方法,一种用于打开相机,另一种用于打开多媒体资料。尝试了此方法,但仍然相同。没有结果。请查看我的编辑,它在Java中为我的更新添加了一些解释。这是一种奇怪的行为,但它是有效的
    super.onActivityResult(requestCode, resultCode, data);