安卓相机开发入门全攻略:从零搭建手机摄影应用(附实战代码)

安卓相机开发入门全攻略:从零搭建手机摄影应用(附实战代码)

安卓相机开发入门全攻略:从零搭建手机摄影应用(附实战代码)

一、项目背景与开发准备 当前移动摄影市场规模已达1200亿美元(Statista 数据),其中独立开发者占比超过35%。本教程面向零基础开发者,完整如何使用Android Studio 3.6+和Kotlin 1.9构建基础相机应用。所需基础包括:

  1. Android开发环境(JDK 17+,Android SDK 34)
  2. Git版本控制
  3. 熟悉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)
  1. 预览帧率控制在24fps(平衡流畅度与功耗)
  2. 使用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:

  1. 内存监控:设置内存泄漏检测
  2. CPU监控:跟踪滤镜处理耗时
  3. 网络监控:记录API调用次数

六、扩展应用场景

  1. 电商拍摄助手(自动水平矫正+背景虚化)
  2. 医疗影像记录(DICOM格式导出)
  3. 教育教学工具(屏幕录制+画笔标注)

七、开发资源推荐