Gravar vídeos

Esta lição explica como capturar vídeos usando aplicativos de câmera existentes.

Seu aplicativo tem um trabalho a fazer, e integrar vídeos é só uma pequena parte dele. O objetivo é fazer vídeos com o mínimo de complicações possível, e não reinventar a filmadora. A maioria dos dispositivos Android já tem um aplicativo de câmera que grava vídeos. Nesta lição, você faz esse aplicativo gravar vídeos por você.

Confira os seguintes recursos relacionados:

Solicitar o recurso de câmera

Para anunciar que seu aplicativo depende de uma câmera, coloque uma tag <uses-feature> no arquivo de manifesto:

    <manifest ... >
        <uses-feature android:name="android.hardware.camera"
                      android:required="true" />
        ...
    </manifest>
    

Se seu aplicativo usa, mas não precisa de uma câmera para funcionar, configure android:required como false. Com isso, o Google Play permitirá que dispositivos sem câmera façam o download do seu aplicativo. Será sua responsabilidade verificar a disponibilidade da câmera no momento da execução, chamando hasSystemFeature(PackageManager.FEATURE_CAMERA). Se uma câmera não estiver disponível, os recursos da câmera precisarão ser desativados.

Gravar um vídeo com um app de câmera

O Android delega ações a outros aplicativos invocando um Intent que descreva o que você quer que seja feito. Esse processo envolve três partes: o próprio Intent, uma chamada para iniciar o Activity externo e um código para processar o vídeo quando o foco retorna à sua atividade.

Veja uma função que invoca uma intent para capturar vídeos.

Kotlin

    const val REQUEST_VIDEO_CAPTURE = 1

    private fun dispatchTakeVideoIntent() {
        Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
            takeVideoIntent.resolveActivity(packageManager)?.also {
                startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
            }
        }
    }
    

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

O método startActivityForResult() é protegido por uma condição que chama resolveActivity(), que retorna o primeiro componente de atividade que pode processar a intent. Fazer essa verificação é importante porque, se você chamar startActivityForResult() usando uma intent que nenhum app pode processar, seu app falhará. Portanto, desde que o resultado não seja nulo, é seguro usar a intent.

Assistir o vídeo

O aplicativo Câmera do Android retorna o vídeo na Intent entregue a onActivityResult() como um Uri que aponta para o local do vídeo no armazenamento. O código a seguir recupera o vídeo e exibe em VideoView.

Kotlin

    override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent) {
        if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
            val videoUri: Uri = intent.data
            videoView.setVideoURI(videoUri)
        }
    }
    

Java

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
            Uri videoUri = intent.getData();
            videoView.setVideoURI(videoUri);
        }
    }