最新的相机API已经不再使用在Android Manifest文件中声明相机权限的方式,而是采用了新的运行时权限API。以下是使用最新的相机API打开相机的步骤:
1.在AndroidManifest.xml文件中添加以下两个权限:
2.使用以下代码在运行时请求相机权限:
if (ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.CAMERA), REQUEST_CAMERA_PERMISSION_CODE) }
3.在onRequestPermissionsResult回调中处理相机权限请求结果,如果用户授予了相机权限,就打开相机并启动预览:
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array
4.使用以下代码打开相机,这里使用了CameraX API:
val cameraProviderFuture = ProcessCameraProvider.getInstance(this) cameraProviderFuture.addListener(Runnable { val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get() val preview = Preview.Builder().build() preview.setSurfaceProvider(previewView.createSurfaceProvider()) val cameraSelector = CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build() val imageCapture = ImageCapture.Builder().build() cameraProvider.unbindAll() camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview, imageCapture) }, ContextCompat.getMainExecutor(this))
上面的代码中,previewView是相机预览的View,可以是一个TextureView或者Surface