权限申请 摄像头 如何处理返回照片结果

摄像头

   val permissions = arrayOf(Manifest.permission.CAMERA)
            ActivityCompat.requestPermissions(this,permissions,1)
            
  回调方法  申请之后的回调方法 如何写的东西
      override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == 1) {
            if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                val intent=Intent("android.media.action.IMAGE_CAPTURE")
                startActivityForResult(intent,1)
                // 权限已经授予,可以使用摄像头功能了
            } else {
                // 权限被拒绝,提示用户或做出其他处理
                Toast.makeText(this,"请给我摄像头权限",Toast.LENGTH_SHORT).show()
            }
        }
    }

摄像头选择 :拍照 或着别的

延伸

如何 将选择或者拍的照片获取然后显示 ;

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode==2)
        {
            if (resultCode== Activity.RESULT_OK&&data!=null)
            {
                data.data.let { uri ->
                      val uri = data.data
                    val bitmap = BitmapFactory.decodeStream(
                        contentResolver.openInputStream(Uri.parse(uri.toString()))
                    )
                    setImageview(bitmap)
                    viewModel.saveImage(bitmap)
                    /*
                    我们为了存一个照片 打开了OutputStream 也就是可以写入
                    然后我们把  uri转换成了bitmap对象 
                    然后可以直接 设置imageview的bitmap属性做到了设置图片
                     */
                }
            }
        }
    }
    获取返回的 东西 Data和 别的东西;

我们拍照返回的东西(Data) 到底是什么

  • 如果我们没有指定 拍照储存的保存路径的话 那么此时data将为 Intent { act=inline-data (has extras) }
  • Intent { act=inline-data (has extras) } 是一种特殊的操作,用于在 Intent 中传递图像数据作为附加项(extras)而不是通过 URI。
  • val image = data?.extras?.get(“data”) as? Bitmap 我们使用 data.extras?.get(“data”) 来获取附加项中的图像数据,并将其转换为 Bitmap 对象。
  • 建议是自己将图像保存在文件中 或者 使用contentProvider来传递图像数据
  • 具体实现可以搜索 Android FileProvider的 基本使用 以下是基于配置好了FIleProvider的代码实现
// 指定保存照片的路径和文件名
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File imageFile = new File(storageDir, "my_photo.jpg");

// 获取文件的内容 URI
Uri imageUri = FileProvider.getUriForFile(this, "com.example.fileprovider", imageFile);

// 启动相机应用
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); // 授予 URI 写入权限

startActivityForResult(intent, TAKE_PHOTO);

Manifest部分代码

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
阅读和读取权限必须要有
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值