无法使用phonegap 2.4在Android上播放录音(unable to play audio recordings on android using phonegap 2.4)
我试图在phonegap中使用Media对象录制音频文件,然后播放它。 我没有问题录制,但是当我尝试播放它时,我的应用程序关闭,在我的模拟器和我的设备上。 在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的:
<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>
尤瓦
im trying to record an audio file using Media object in phonegap and then play it. i have no problem recording, but then when i try to play it my app shuts down, both on my emulator and my device. on the logcat it says: "null pointer exception at org.apache.cordova.readyPlayer (AudioPlayer.java)". many thanks to anyone who is willing to help me, it took me a while to realize im completely lost here. here is the code which i copied from http://docs.phonegap.com/en/2.4.0/cordova_media_media.md.html#media.stopRecord and added .play() after the .stopRecord(). i can add the manifest and activity if needed, i doubt that the problem is there but i could be wrong. index.html:
<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>
yuval
最满意答案
我发现Cordova 3.5(使用Media插件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();
I found the same issue with Cordova 3.5 (with Media plugin 0.2.11) and Android 4.4. The solution is as described above. Basically something like this should do the trick:
mediaRec.stopRecord(); src = mediaRec.src; // if you don't have src defined anymore mediaRec.release(); mediaPlay = new Media(src, onSuccess, onError); mediaPlay.play();
相关问答
更多-
所有跨平台框架(包括HTML)通常具有相同的优点和缺点。 优点: 编写一次代码,在每个目标平台上工作相同。 缺点: 它的工作方式往往不是那么美妙。 性能通常比本机实现低。 有些也有他们自己的小部件集,看起来不合适。 由于个人平台怪癖,你仍然需要到处测试。 您可以通过最低公分母来访问功能。 当支持本地功能时,通常只能以一种方式访问它:便携式框架的方式。 这有时与目标平台的首选方式不一致。 如果您可能访问目标平台特有的功能,那么您将失去运行无处不在的可移植性。 每个所谓的“跨平台”框架本身都是一个平台。 先看一 ...
-
音频无法使用phoneGap(audio not working with phoneGap)[2022-07-11]
改变你的路径“/android_asset/www/sounds/introDino.mp3”,它会没事的。 阅读我的Android迷你教程: http://simonmacdonald.blogspot.com/2011/05/using-media-class-in-phonegap.html Change your path to "/android_asset/www/sounds/introDino.mp3" and it will be fine. Read my mini tutorial f ... -
无法使用phonegap 2.4在Android上播放录音(unable to play audio recordings on android using phonegap 2.4)[2023-03-21]
我发现Cordova 3.5(使用Media插件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(); ... -
Phonegap Media.play(Phonegap Media.play)[2022-11-09]
您应该附加成功和错误处理程序,以便能够调试正在进行的操作。 var my_media = new Media("http://www.noiseaddicts.com/samples/3721.mp3", // success callback function () { alert("playAudio():Audio Success"); }, // error callback function ( ... -
我所做的更改不是新的音频(); 我做了新的媒体(); 并且在阅读了PhoneGap的本地声音之后,我发现它可能与需要成为绝对本地路径的路径有关,它现在可以在真正打包的应用程序中运行。 我也发现你也需要使用media.release(); 因为有限的次数可以播放声音。 $('.sound1').on('touchstart', function () { var path = window.location.pathname; path = path.substr( path, path.le ...
-
HTML 5音频标签问题(没有声音)与android 4.x phonegap(HTML 5 audio tag issues (no sound) with phonegap on android 4.x)[2022-10-18]
您通常需要一段JavaScript才能使其工作。 尝试以下操作: -
@ZyOn(删除之前的评论) 您可以使用我的Media Demo示例来查找您的问题。 Phonegap演示应用程序(核心) 源代码在github上。 它也包含声音样本。 如果你需要,我还有其他笔记。 此外,应在deviceready事件之后调用app.initialize()。 @ZyOn (deleted previous comment) You can use my Media Demo example to find your issue. Phonegap Demo Apps (core) The ...
-
为了能够同时播放媒体和录制音频,必须将AVAudioSession的category属性设置为AVAudioSessionCategoryPlayAndRecord 。 为此,您必须部署一个自定义iOS插件来设置相应的值。 在讲的时候,由于Cordova Media Plugin中的一个错误,这个过程并不是那么简单。 在开始录制之前,插件会不加选择地将AVAudioSession的类别设置为AVAudioSessionCategoryRecord 。 因此,在开始录制之后,播放所需的媒体变得不可能,除非您在 ...
-
为什么使用.3gpp的扩展名而不是.3gp? 你确定IIS正在为3gp文件提供服务并使用正确的video/3gpp标头吗? 如果您从桌面浏览器而不是设备导航到该文件的URL,会发生什么? IIS可能不知道使用.3gpp扩展名的3gp的MIME类型,因此不会提供文件,因为出于安全原因,默认情况下IIS不会提供无法识别的文件扩展名。 如果mp3是一个注册的MIME类型,但3gp不是这样可以解释为什么一个工作而不是另一个工作。 按照此处的说明添加3gp MIME类型: %windir%\system32\inet ...
-
PhoneGap桌面/开发人员应用程序组合虽然很棒,但并不能完美体现您的应用程序在自行构建和安装时的行为方式。 您需要进行进一步测试,以确保您的应用按预期工作。 模板通常附带安装的所有核心插件。 这些将要求比您的应用程序实际需要更多的权限。 您需要在生产之前的某个时刻从config.xml中删除它们。 config.xml是现在用于指示应用程序所需的平台和插件的首选机制。 任何缺少的平台或插件都将由任何构建工具(CLI或PhoneGap Build)自动安装。 有关更多信息,请参阅Cordova文档和Pho ...