cat_dog_orange 2023-07-11 16:57 采纳率: 36.4%
浏览 16

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/*")
    }

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-11 21:31
    关注
    • 这篇博客: 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);
          }
    评论

报告相同问题?

问题事件

  • 创建了问题 7月11日

悬赏问题

  • ¥50 python批量提取发票的信息
  • ¥15 mysql安装,初始化数据库失败
  • ¥15 虚幻五引擎内容如何上传至网盘?
  • ¥15 使用mmpose库时出现了问题
  • ¥15 IRI2016模型matlab运行报错
  • ¥50 bat怎么设置电脑后台自动点击网页指定词运行脚本,输入指定网页链接,指定点击词,指定间隔时间,指定网页出现的词,指定网页出现词出现后后点击锁定,放在后台运行不影响前台鼠标工作
  • ¥20 20CrMnMo的高温变形抗力
  • ¥15 RTX3.6 5565驱动中断报错
  • ¥50 带防重放token(Antireplay-Token)的网站怎么用Python发送请求
  • ¥15 visa版本没问题,串口调试助手调试串口正常使用,但是labview刷新不出来