相機意圖

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