28 - Grabación de audio mediante el grabador provisto por Android (via Intent)

La forma más sencilla de capturar audio en Android es mediante el grabador que provee el sistema operativo Android. Invocamos la aplicación de grabación y luego recuperamos el audio grabado.

Tiene como ventaja que la interfaz le es familiar al usuario, ya que muchas aplicaciones utilizan esta característica.

Problema:

Disponer dos objetos de la clase Button con las etiquetas "grabar" y "reproducir". Cuando se presione el primer botón proceder a activar la grabadora provista por Android. Cuando se presione el segundo botón reproducir el audio grabado.

Crear un proyecto (Proyecto031) e implementar la interfaz:

grabar audio android

El código fuente en Kotlin es:

package com.tutorialesprogramacionya.proyecto031


import android.app.Activity
import android.content.Intent
import android.media.MediaPlayer
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private val peticion = 1
    private lateinit var url1: Uri

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val boton1=findViewById<Button>(R.id.boton1)
        val boton2=findViewById<Button>(R.id.boton2)
        boton1.setOnClickListener {
            val intent = Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION)
            startActivityForResult(intent, peticion)
        }

        boton2.setOnClickListener {
            val mediaPlayer = MediaPlayer.create(this, url1)
            mediaPlayer.start()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK && requestCode == peticion) {
            if (data?.data!=null)
                url1 = data.data!!
        }
    }
}

Cuando se presiona el botón de grabar el audio mediante un Intent activamos la aplicación de grabación propia de Android.
Seguidamente llamamos al método startActivityForResult para poder recuperar la grabación luego de finalizada a través del método onActivityResult:

        boton1.setOnClickListener {
            val intent = Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION)
            startActivityForResult(intent, peticion)
        }

Debemos pasar al método startActivityForResult además de la referencia del Intent una variable con un valor 0 o positivo (luego este valor retornará al método onActivityResult)

Cuando finalizamos la grabación se ejecuta el método onActivityResult, donde almacenamos en la variable url1 la referencia al archivo de audio creado:

   override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK && requestCode == peticion) {
            if (data?.data!=null)
                url1 = data.data!!
        }
    }

Por último para ejecutar el contenido de la grabación utilizamos la clase ya vista MediaPlayer:

        boton2.setOnClickListener {
            val mediaPlayer = MediaPlayer.create(this, url1)
            mediaPlayer.start()
        }

Este proyecto lo puede descargar en un zip desde este enlace: proyecto031.zip