如要執行基本相機操作 (例如使用裝置的預設相機應用程式拍攝相片或影片),不需要整合相機程式庫。請改用 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 程式庫,處理比基本圖片或影片擷取更複雜的作業。