Android 学习之相机(一)

说一下

我学习Android 也有很长的时间了,现在回想起来一直就是在学习或者是在学习的道路上。Java->Android->kotlin->dart->flutter->c->html->…
这个大概是我的学习的方向,但是忽然之间迷茫了,所以还是向自己的本质出发,研究自己的工作内容。

相机简介

想说的话:大家都知道,在Android手机中有一个相机的应用。但是相机是如何实现的呢?我也不知道。不过大致的流程也猜测出来了。使用摄像头采集要拍摄的数据,在手机屏幕上使用 SurfaceView 展示内容。但是如何调用呢?如何对于相机进行扩展呢?这就需要好好学习一下了。

拍照

步骤

  • 在AndroidManifest 设置所需要的 permission 和 feature
  • 判断当前手机的版本号
  • 判断手机是否有使用相机的权限
  • 打开相机进行拍照

在AndroidManifest 设置所需要的 permission 和 feature

    <uses-permission android:name="android.permission.CAMERA"/>
    <!-- 使用相机 -->
    <uses-feature android:name="android.hardware.Camera" android:required="true"
        />

这里解释一下子,Android 的开发文档中说了。
如果您的应用使用相机,但不需要相机也可以正常运作,则将 android:required 设为 false。这样,Google Play 便会允许没有摄像头的设备下载您的应用。因此,您必须负责通过调用 hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY) 检查相机在运行时的可用性。如果相机不可用,则您应停用相机功能

判断当前手机的版本号

        if (Build.VERSION_CODES.M <= SDK_INT){
            // Android 版本6.0 或者之上,需要动态权限申请相机
        }else{
            // Android 版本 6.0 之下,在清单文件中声明相机的权限就可以了
        }

判断手机是否有使用相机的权限

    if (ContextCompat.checkSelfPermission(
                    this@SplashActivity,
                    android.Manifest.permission.CAMERA
                ) != PackageManager.PERMISSION_GRANTED
            ) {
                ActivityCompat.requestPermissions(
                    this,
                    arrayOf(android.Manifest.permission.CAMERA),
                    0
                )
                // 没有权限
            } else {
              // 有权限,可以在这里直接执行打开相机的操作
            }

这里说一下,我使用的是Android 原生的判断权限的方法。如果使用,那么必须要重写 onRequestPermissionsResult 这个方法 ,并且判断请求码 requestCode

打开相机进行拍照

   val intents = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        if (intents.resolveActivity(packageManager) != null) {
            startActivityForResult(intents, REQUEST_IMAGE_CAPTURE)
        }

代码解释:
第一步:创建 intent 对象,并且给它设置上值 MediaStore.ACTION_IMAGE_CAPTURE ,这是个可以打开相机的意图,这个意图还可以获取返回的图像(之后再说)。
第二步:这是对于第三行代码 startActivityForResult(intents, REQUEST_IMAGE_CAPTURE) 的一个保护,因为 如果不对其做限制,那么应用程序就会崩溃。
第三步: 跳转页面,当然我们可以从 startActivityForResult 看出这个方法可以获取到拍下的照片。

拍照,并且返回拍下的图片

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (REQUEST_IMAGE_CAPTURE == requestCode && RESULT_OK == resultCode) {
            // 获取返回的缩略图
            val extras = data?.extras
            val bitmap = extras?.get("data") as Bitmap
            mBinding?.ivSplashImage?.setImageBitmap(bitmap)
        }
    }
  1. onActivityResult 的重写方法中判断请求码和响应码。
  2. 从 intent 对象中获取额外的数据
  3. 从额外数据中获取到 Bitmap 对象。
  4. 设置图片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值