Android: ¿micrófono de muestra sin grabación para obtener amplitud / nivel en vivo?

Estaba tratando de obtener el nivel de amplitud de un micrófono en Android de esta manera:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

Timer timer = new Timer();
timer.scheduleAtFixedRate(new RecorderTask(recorder), 0, 1000);

private class RecorderTask extends TimerTask {
    private MediaRecorder recorder;

    public RecorderTask(MediaRecorder recorder) {
        this.recorder = recorder;
    }

    public void run() {
        Log.v("MicInfoService", "amplitude: " + recorder.getMaxAmplitude());
    }
}

Desafortunadamente, esto solo devuelve 0 todo el tiempo.

Parece que para que esto funcione tengo que empezar a grabar. ¿Es eso correcto?

Si es así, ¿necesito grabar durante 500 ms, obtener amplitud, detener la grabación y repetir?

Finalmente, ¿tengo que grabar en un archivo? No necesito guardar este archivo de audio, ¿no puedo obtener la amplitud actual o la amplitud más alta desde la última llamada de la entrada de micrófono en vivo actual sin grabar?

Cualquier ayuda es apreciada, gracias.

Respuestas a la pregunta(4)

Su respuesta a la pregunta