Intencje kamery

Aby wykonywać podstawowe czynności związane z aparatem, takie jak robienie zdjęć lub nagrywanie filmów, przy użyciu domyślnej aplikacji aparatu na urządzeniu, nie musisz integrować się z biblioteką aparatu. Zamiast niego użyj elementu Intent.

Robienie zdjęć za pomocą aplikacji aparatu

Android przekazuje działania innym aplikacjom, wywołując Intent. Ten proces składa się z 3 elementów: samego Intent, wywołania zewnętrznego Activity i kodu do obsługi danych obrazu po powrocie do aktywności.

Oto funkcja, która wywołuje Intent, by zrobić zdjęcie.

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
    }
}

Nagrywanie filmów za pomocą aplikacji aparatu

Możesz też wywołać Intent, aby przechwycić film.

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
    }
}

Metoda startActivityForResult() jest chroniona przez warunek wywołujący metodę resolveActivity(), która zwraca pierwszy komponent aktywności, który może obsłużyć Intent. Przeprowadź tę kontrolę, aby upewnić się, że wywołujesz Intent, który nie powoduje awarii aplikacji.

Dodatkowe materiały

Do podstawowych działań związanych z aparatem użyj Intent. W przeciwnym razie zalecamy korzystanie z bibliotek Camera2 i CameraX w przypadku bardziej złożonych zadań niż zwykłe wykonywanie zdjęć czy filmów.