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 przeprowadzać integracji z biblioteką aparatu. Zamiast tego użyj obiektu Intent.

Robienie zdjęć za pomocą aplikacji aparatu

Android przekazuje działania innym aplikacjom, wywołując interfejs Intent. Ten proces składa się z 3 części: samego elementu Intent, wywołania zewnętrznego obiektu Activity oraz kodu do obsługi danych obrazu, gdy zaznaczenie wróci do aktywności.

Oto funkcja, która wywołuje funkcję Intent w celu zrobienia zdjęcia.

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ć funkcję Intent, aby zarejestrować wideo.

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 resolveActivity(), który zwraca pierwszy komponent aktywności, który może obsłużyć Intent. Wykonaj to ustawienie, aby mieć pewność, że wywołujesz Intent, który nie powoduje awarii aplikacji.

Dodatkowe materiały

Do podstawowych działań związanych z aparatem służy Intent. W przeciwnym razie zaleca się używanie bibliotek Camera2 i AparatuX do bardziej złożonych działań niż podstawowe robienie zdjęć i rejestrowanie filmów.