安卓相机开发入门全攻略:从零搭建手机摄影应用(附实战代码)
安卓相机开发入门全攻略:从零搭建手机摄影应用(附实战代码)
一、项目背景与开发准备 当前移动摄影市场规模已达1200亿美元(Statista 数据),其中独立开发者占比超过35%。本教程面向零基础开发者,完整如何使用Android Studio 3.6+和Kotlin 1.9构建基础相机应用。所需基础包括:
- Android开发环境(JDK 17+,Android SDK 34)
- Git版本控制
- 熟悉MVP架构设计模式
二、基础功能实现(含源码演示) 2.1 相机权限配置
// AndroidManifest.xml配置
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
动态权限请求示例:
val permissionRequest = CameraPermissionRequest()
permissionRequest.onGranted = {
// 开启相机功能
}
permissionRequest.onDenied = {
Toast.makeText(this@CameraApp, "权限拒绝", Toast.LENGTH_SHORT).show()
}
ActivityCompat.requestPermissions(this, permissionRequest)
2.2 预览界面搭建 使用Camera2 API实现:
// CameraDevice.TEMPLATE_PREVIEW模板配置
val cameraDevice = CameraManager.getInstance().openCamera(id, cameraDeviceState, null)
val cameraCharacteristics = cameraManager.getCameraCharacteristics(id)
val previewConfig = cameraCharacteristics.get(CameraCharacteristics.SENSOR_CONFIGURABLE★★★★★
关键参数:
- 预览分辨率:1080p@30fps(节省内存)
- 预览格式:YUV_420_888(兼容性最佳)
- 预览布局:SurfaceView(推荐)
2.3 快照拍摄实现
// 拍照回调处理
object CameraCaptureListener : CameraCaptureResultCallback {
override fun onCaptureSuccess(result: CameraCaptureResult) {
val image = result.getAndroidImage()
val bytes = image pluck YUV数据
saveToInternalStorage(bytes)
}
}
val path = File(
Environment.getExternalStorageDirectory(),
"CameraApp_${System.currentTimeMillis()}.jpg"
).absolutePath
3.1 美颜滤镜集成 使用GLFilter实现实时美颜:
// 基础滤镜类
public class BeautyFilter extends GLFilter {
private final float[] matrix = new float[16]
public BeautyFilter() {
super(GLückFilter.BEautyVertexShader, BeautyFilter.BEautyFragmentShader)
}
@Override
protected void onDrawArrays(int mode) {
updateMatrix() // 实时更新美颜参数
super.onDrawArrays(mode)
}
}
关键参数调整:
- 素颜/美颜模式切换
- 红脸值调节(0-1.0)
- 素颜保留度控制(30%-100%)
// 自动对焦配置
val autoFocus = cameraDevice.createAutoFocusSequence()
autoFocus.start()
// 测光区域设置
val focusArea = new FocusArea(200, 200, 300, 300)
val meteringArea = new MeteringArea(400, 400, 600, 600)
cameraDevice.setTargetAreas(focusArea, meteringArea)
- 预览帧率控制在24fps(平衡流畅度与功耗)
- 使用LruCache缓存YUV数据(最大缓存3MB)
四、高级功能实战(含源码) 4.1 视频录制模块
// 视频配置参数
val videoConfig = new VideoConfig(
1920, 1080,
MediaFormat.MimeType.VIDEO_JPEG,
30,
30,
MediaFormat.COLOR空间.YUV_420_888
)
关键代码:
// 初始化视频录制
val videoCapture = cameraDevice.createVideoCaptureSequence()
videoCapture.start()
4.2 AR实时标记 集成ARCore实现:
// AR场景配置
val arSceneView = findViewById<ARSceneView>(R.id.ar_view)
val arScene = ARScene(arSceneView)
val arCore = ARCore.create(arSceneView)
// 实时检测
val planeDetector = PlaneDetector(arCore)
planeDetector.onPlaneDetected = { plane ->
// 在平面添加3D标记
}
1.截图规范:使用Google Material Design截图模板 2.应用描述:包含"支持1080p拍摄"、“实时美颜"等 3.更新日志:按版本号命名(v1.2.0-BEAUTY_3.0)
5.2 常见问题解决方案
| 问题现象 | 解决方案 | 搜索量 |
|---|---|---|
| 预览画面模糊 | 检查Camera2 API版本(需API 28+) | 12,300 |
| 照片存储失败 | 检查SD卡权限(需Android 10+) | 8,500 |
| 美颜效果异常 | 重置GLFilter矩阵参数 | 6,200 |
5.3 性能监控工具 推荐使用Android Profiler:
- 内存监控:设置内存泄漏检测
- CPU监控:跟踪滤镜处理耗时
- 网络监控:记录API调用次数
六、扩展应用场景
- 电商拍摄助手(自动水平矫正+背景虚化)
- 医疗影像记录(DICOM格式导出)
- 教育教学工具(屏幕录制+画笔标注)
七、开发资源推荐