无法播放Android上的音频录音使用phonegap 2.4
即时通讯尝试使用媒体对象在phonegap中录制音频文件,然后播放它。我没有记录问题,但是当我尝试播放它时,我的应用程序关闭了,无论是在我的模拟器还是我的设备上。在logcat上说:“org.apache.cordova.readyPlayer(AudioPlayer.java)的空指针异常”。非常感谢任何愿意帮助我的人,我花了一段时间才意识到完全迷失在这里。 这里是我从http://docs.phonegap.com/en/2.4.0/cordova_media_media.md.html#media.stopRecord复制的代码,并且在.stopRecord()之后添加了.play()。如果需要,我可以添加清单和活动,我怀疑问题在那里,但我可能是错的。 的index.html:无法播放Android上的音频录音使用phonegap 2.4
<script type="text/javascript" charset="utf-8" src="cordova-2.4.0.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Record audio
//
function recordAudio() {
var src = "myrecording.amr";
var mediaRec = new Media(src, onSuccess, onError);
// Record audio
mediaRec.startRecord();
// Stop recording after 10 sec
var recTime = 0;
var recInterval = setInterval(function() {
recTime = recTime + 1;
setAudioPosition(recTime + " sec");
if (recTime >= 10) {
clearInterval(recInterval);
mediaRec.stopRecord();
document.getElementById('audio_position').innerHTML = "finished";
**mediaRec.play();**
}
}, 1000);
}
// Cordova is ready
//
function onDeviceReady() {
recordAudio();
}
// onSuccess Callback
//
function onSuccess() {
console.log("recordAudio():Audio Success");
}
// onError Callback
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
// Set audio position
//
function setAudioPosition(position) {
document.getElementById('audio_position').innerHTML = position;
}
</script>
<p id="media">Recording audio...</p>
<p id="audio_position"></p>
尤瓦
我发现了同样的问题与科尔多瓦3.5(有媒体插件0.2.11)和Android 4.4 。解决方案如上所述。基本上这样的应该做的伎俩:
mediaRec.stopRecord();
src = mediaRec.src; // if you don't have src defined anymore
mediaRec.release();
mediaPlay = new Media(src, onSuccess, onError);
mediaPlay.play();
嘿,你有什么想法如何做同样的事情,但记录后播放另一个功能的媒体。我尝试将src传递给该函数作为参数,但是即使使用完整的本地路径,录制的音频也不会播放。我也从这个问题的其他答案尝试解决方案,但仍然无法正常工作。 – Ionut 2016-09-13 07:03:07
没有必要创建其他媒体对象来播放先前录制的文件。只要做到以下 - 你必须释放媒体对象记录停止后:
// variable in global scope
var mediaRec = 0;
// function to record an audio
function recordAudio() {
// create media object for your recording
mediaRec = new Media("phonegap_rec.amr", onMediaRecordSuccess, onMediaRecordError);
// start recording
mediaRec.startRecord();
// recording for 5 seconds
var recTime = 0;
var recInterval = setInterval(function() {
recTime = recTime + 1;
if (recTime >= 5) {
clearInterval(recInterval);
// stop recording after 5 seconds
mediaRec.stopRecord();
// release the media object (THIS IS THE KEY SOLUTION HERE)
mediaRec.release();
}
}, 1000);
}
// function to playback recorded audio
function playRecord() {
// check if the object exists
if (mediaRec) {
// now you can playback the recording
mediaRec.play();
}
}
如果你停止录制后删除mediaRec对象,创建一个新的媒体对象以相同的网址并尝试播放? – Michael 2013-04-04 11:03:16
实际上,五分钟前我想通了,然后我看到了你的ansewr。它是正确的。无论如何,非常感谢你,下次我不会为了这个问题而苦苦挣扎,你可能已经为我节省了很多时间:) – 2013-04-04 14:17:09
@ user2033402我目前正忙于解决这个问题,请问您可以发布您的解决方案。我使用phonegap 3.0,但语法是相同的。为什么我们需要删除mediaRec对象,并创建一个新的对象 – 2013-10-03 15:49:04