如要執行基本相機操作 (例如使用裝置的預設相機應用程式拍攝相片或影片),不需要整合相機程式庫。請改用 Intent
。
使用相機應用程式拍照
Android 會叫用 Intent
,將動作委派給其他應用程式。這個程序包含三個部分:Intent
本身、啟動外部 Activity
的呼叫,以及當焦點返回活動時處理圖片資料的一些程式碼。
以下函式會叫用 Intent
來拍照。
Kotlin
val REQUEST_IMAGE_CAPTURE = 1 private fun dispatchTakePictureIntent() { val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) } catch (e: ActivityNotFoundException) { // display error state to the user } }
Java
static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); try { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } catch (ActivityNotFoundException e) { // display error state to the user } }
使用相機應用程式錄影
您也可以叫用 Intent
來錄影。
Kotlin
val REQUEST_VIDEO_CAPTURE = 1 private fun dispatchTakeVideoIntent() { Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent -> takeVideoIntent.resolveActivity(packageManager)?.also { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE) } ?: run { //display error state to the user } } }
Java
static final int REQUEST_VIDEO_CAPTURE = 1; private void dispatchTakeVideoIntent() { Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); } else { //display error state to the user } }
startActivityForResult()
方法受到呼叫 resolveActivity()
的條件保護,後者會傳回可處理 Intent
的第一個活動元件。執行這項檢查,確保叫用的 Intent
不會導致應用程式當機。
其他資源
如果是基本相機動作,請使用 Intent
。如果不是的話,建議使用 Camera2 和 CameraX 程式庫,執行比基本圖片或錄影更複雜的作業。