Android(安卓)学习之相机(一)
相机目录
- 说一下
- 相机简介
- 拍照
- 步骤
- 在AndroidManifest 设置所需要的 permission 和 feature
- 判断当前手机的版本号
- 判断手机是否有使用相机的权限
- 打开相机进行拍照
- 拍照,并且返回拍下的图片
说一下
我学习Android 也有很长的时间了,现在回想起来一直就是在学习或者是在学习的道路上。Java->Android->kotlin->dart->flutter->c->html->…
这个大概是我的学习的方向,但是忽然之间迷茫了,所以还是向自己的本质出发,研究自己的工作内容。
相机简介
想说的话:大家都知道,在Android手机中有一个相机的应用。但是相机是如何实现的呢?我也不知道。不过大致的流程也猜测出来了。使用摄像头采集要拍摄的数据,在手机屏幕上使用 SurfaceView 展示内容。但是如何调用呢?如何对于相机进行扩展呢?这就需要好好学习一下了。
拍照
步骤
- 在AndroidManifest 设置所需要的 permission 和 feature
- 判断当前手机的版本号
- 判断手机是否有使用相机的权限
- 打开相机进行拍照
在AndroidManifest 设置所需要的 permission 和 feature
这里解释一下子,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( [email protected], 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) } }
- 在 onActivityResult 的重写方法中判断请求码和响应码。
- 从 intent 对象中获取额外的数据
- 从额外数据中获取到 Bitmap 对象。
- 设置图片
更多相关文章
- android手机文件后缀揭秘
- Android(安卓)camera2使用
- Android的前世今生
- 关于Android自定义相机进行拍照(小米手机出现异常的原因)
- android 调用系统的照相机和图库实例详解
- android 获取电话本中的联系人列表
- 预防手机变砖头 Android刷机问题汇总
- Android(安卓)Loader的使用以及手机通讯录的获取方法
- Android权限说明