有了Phonegap,我想录制语音,停止录制,并在Android中播放

HTML文件有4个按钮,可以录制,停止录制语音,播放,停止播放。 代码看起来像这样。

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

Android插件部分是

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

关键是,我应该留在记录,停止录制,播放和停止播放语音的活动中。 如果我使用phonegap,因为它只是通过插件发送一些字符串, MediaRecorder都会创建和销毁MediaRecorderMediaPlayer对象。 我按下html中的记录按钮,创建了MediaRecorder对象,但按下停止记录按钮无法停止刚刚创建的MediaRecorder对象。 这个问题有什么解决方案吗?

使用Phonegap,我可以录制语音和播放录音,而无需添加插件。 我只将Phonegap Media的插件连接到我的应用程序,如下所示:

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

那里的代码:

            Recorder

在Android设备上,PhoneGap媒体对象具有以下重要行为,但没有详细记录( http://software.intel.com/en-us/articles/media-sample-using-phonegap#id_android ):

  • “my_audio = new Media(’myRecording100.wav’,onMediaCallSuccess,onMediaCallError)”:当“myRecording100.wav”不存在时,它将创建该文件; 当它存在时,它打开它。
  • “my_audio.stopRecord()”:当调用“stopRecord()”时,.wav
    媒体文件移动到“/ sdcard”文件夹。 因此,在检查以前记录的.wav是否存在时,代码应该在“/ sdcard”文件夹下。 如果确实存在,则应该从中打开文件
    “/sdcard/myRecording100.wav”。

希望这对你有所帮助。