Android选择访问相机或图库。当点击图库后,不选择图片直接返回到选择界面,选择相机,此时还是显示图库界面

Android studio 使用registerForActivityResult访问相机和图库。当点击图库后,不选择图片直接返回到选择界面,选择相机,此时还是显示图库界面,应该怎样解决?求指导。
具体错误如图所示:

img

相关代码如下:

private val takePicture = registerForActivityResult(
        ActivityResultContracts.TakePicture()
    ) { success ->
        if (success) {
            imagePath = outputImage.absolutePath
            //将照片显示出来
            val bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(imageUri))     
            }
        }  else {
            finish()
        }
    }
    //使用GetContent()文件选择器 是无法直接打开相册 需要用户自行选择打开
    private val selectPhoto = registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->
        if (uri == null) {
            finish()
            return@registerForActivityResult
        }
        val filePathColumns = arrayOf(MediaStore.Images.Media.DATA)
        val cursor =
            uri?.let { contentResolver.query(it, filePathColumns, null, null, null) }
        cursor!!.moveToFirst()
        val columnIndex = cursor.getColumnIndex(filePathColumns[0])
        //获取图片路径
        val imagePath = cursor.getString(columnIndex)
        cursor.close()
        //显示图片
        picture.setImageURI(uri)       
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.camera)
        service =ServiceCreator.create()  //对ApiService进行实例化
        intent1 = Intent(this, MainActivity::class.java)
        //根据intent传递数据中的标记值判断进行拍照还是从图库中选择照片
        takePhotoOrSelectionPicture()
    }
    private fun takePhotoOrSelectionPicture() {
        val intent: Intent = intent
        try {
            if (intent.extras != null) {
                if (intent.extras!!.getInt("flag") == 1) {
                    openAlbums()}
            }else {
                startPhoto()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
    //拍照
    private fun startPhoto() {
        //创建一个File对象,用于存储拍照后的图片
        outputImage = File(externalCacheDir, "output_image.jpg")
        //对照片的更换设置
        try {
            //如果上一次的照片存在,就删除
            if (outputImage.exists()) {
                outputImage.delete()
            }
            //就创建一个新的文件
            outputImage.createNewFile()
        } catch (e: Exception) {
            e.printStackTrace()
        }
        //将File对象转换成Uri对象
        imageUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            FileProvider.getUriForFile(this, "com.demo2.android.fileprovider", outputImage)
        } else {
            Uri.fromFile(outputImage)
        }
        takePicture.launch(imageUri)
    }
    //图库
    private fun openAlbums() {
        selectPhoto.launch("image/*")
    }

  • 这篇博客: registerForActivityResult请求权限/拍照/选取视频图片/裁剪图片中的 2.请求多权限 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • //多权限请求
        protected final ActivityResultLauncher<String[]> mResultLauncherPermission =
                registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), result -> {
                    boolean allOk = true;
                    for (String item : result.keySet()) {
                        try {
                            boolean bOK = result.get(item);
                            if (!bOK) {
                                allOk = false;
                                break;
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    Log.i("zhao", "所有权限:" + allOk);
                });
    
    
    //请求多种类权限
        private void requestMultiPermissions(String[] permissions) {
            mResultLauncherPermission.launch(permissions);
        }