Con Phonegap, me gustaría grabar voz, dejar de grabar y reproducirla en Android

El archivo HTML tiene 4 botones que graban, dejan de grabar la voz y reproducen, dejan de reproducirlo. El código se ve así.

   Cordova    $(document).ready(function(){ $("#record").on("click", function(){ alert("record start"); window.plugins.VoicePlugin.record(function(){alert("yo");}, function(){alert("yol");}, "voice.3gp"); }); $("#stoprecord").on('click', function(){ alert("record stop"); window.plugins.VoicePlugin.stoprecord(function(){}, function(){}, "voice.3pg"); }); $("#play").on("click", function(){ alert("play"); window.plugins.VoicePlugin.play(function(){}, function(){}, "voice.3pg"); }); $("#stopplay").on("click", function(){ alert("stop play"); window.plugins.VoicePlugin.stopplay(function(){}, function(){}, "voice.3pg"); }); });          

La parte de Android Plugin es

 package com.saxoo.voice; import java.io.IOException; import org.apache.cordova.api.Plugin; import org.apache.cordova.api.PluginResult; import org.json.JSONArray; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.util.Log; /** * @author sbapp008 * */ public class VoicePlugin extends Plugin { /* (non-Javadoc) * @see org.apache.cordova.api.Plugin#execute(java.lang.String, org.json.JSONArray, java.lang.String) */ public static final String Record = "record"; public static final String Play = "play"; public static final String Stopplaying = "stopplaying"; public static final String Stoprecording = "stoprecording"; private static final String LOG_TAG = "AudioRecordTest"; private static String mFileName = null; private static MediaRecorder mRecorder = null; private static MediaPlayer mPlayer = null; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { PluginResult result = null; if(Record.equals(action)){ //data에 filename mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setOutputFile(mFileName); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { mRecorder.prepare(); } catch (IOException e) { Log.e(LOG_TAG, "prepare() failed"); } mRecorder.start(); } else if(Play.equals(action)){ //data에 filename mPlayer = new MediaPlayer(); try { mPlayer.setDataSource(mFileName); mPlayer.prepare(); mPlayer.start(); } catch (IOException e) { Log.e(LOG_TAG, "prepare() failed"); } } else if(Stopplaying.equals(action)){ mPlayer.release(); mPlayer = null; } else{ mRecorder.stop(); mRecorder.release(); mRecorder = null; } return null; } } 

El punto es, debo permanecer en una actividad que grabe, detenga la grabación, reproduzca y detenga la reproducción de la voz. Si utilizo phonegap, ya que solo envía algunas cadenas a través del complemento, el objeto MediaRecorder y MediaPlayer se crea y destruye cada vez. MediaRecorder el botón de grabación que está en html, se MediaRecorder objeto MediaRecorder , pero al presionar el botón de detener la grabación no se puede detener el objeto MediaRecorder que se acaba de crear. ¿Hay alguna solución para este problema?

Con Phonegap grabo voz y juego la grabación de voz sin complementos adicionales. Solo conecto el plugin de Phonegap Media a mi aplicación de esta manera:

 app/res/xml/config.xml  app/AndroidManifest.xml    

Código allí:

            Recorder

En los dispositivos Android, el objeto multimedia PhoneGap presenta los siguientes comportamientos importantes que no están bien documentados ( http://software.intel.com/en-us/articles/media-sample-using-phonegap#id_android ):

  • “my_audio = new Media (‘myRecording100.wav’, onMediaCallSuccess, onMediaCallError)”: cuando “myRecording100.wav” no existe, creará el archivo; cuando existe, lo abre.
  • “my_audio.stopRecord ()”: cuando se llama a “stopRecord ()”, el .wav
    el archivo multimedia se mueve a la carpeta “/ sdcard”. Entonces, al verificar si existe .wav grabado anteriormente, el código debe buscar en la carpeta “/ sdcard”. Si existe, debería abrir el archivo desde
    “/sdcard/myRecording100.wav”.

Espero que esto te ayude.