概述
Camera 可能是接下来个人想深入学习的课题,准备新起一个系列,从个人的角度总结阐述自己对于 Android Camera 的研究过程,希望也能够对其他想学习 Camera 的同学一些帮助。
一、拍照
本课程将阐述如何通过委托Android设备上的其他相机应用程序进行拍照 (如果您更愿意构建自己的相机功能,请参阅 控制相机 )。
请求相机功能
如果您的应用程序的基本功能涉及到 拍照,请将其在Google Play上的可见性限制为具有相机的设备。 以声明您的应用程序依赖于摄像头,请在清单文件中放置标记。
android:required="true" />
...
使用其他相机APP拍照
你可以通过Android的Intent将拍照行为委托给其他的拍照应用, 此过程涉及三个部分:Intent本身,调用并启动外部Activity,以及在Activity中处理回调的数据。
下面是调用启动拍照应用的函数代码:
val REQUEST_IMAGE_CAPTURE = 1
private fun dispatchTakePictureIntent() {
Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
takePictureIntent.resolveActivity(packageManager)?.also {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
}
}
}
请注意,调用startActivityForResult函数之前,请先通过调用resolveActivity函数以保证startActivityForResult函数中的Intent能够被正确的处理,否则将会导致应用的崩溃。
获取缩略图
Android Camera应用程序将返回的Intent中的照片通过onActivityResult()返回,作为附加内容中的一个小位图,位于关键字data下。 以下代码检索此结果并将其显示在ImageView中:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {