首页 \ 问答 \ 无法使用phonegap 2.4在Android上播放录音(unable to play audio recordings on android using phonegap 2.4)

无法使用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

更新时间:2023-03-21 20:03

最满意答案

我发现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)通常具有相同的优点和缺点。 优点: 编写一次代码,在每个目标平台上工作相同。 缺点: 它的工作方式往往不是那么美妙。 性能通常比本机实现低。 有些也有他们自己的小部件集,看起来不合适。 由于个人平台怪癖,你仍然需要到处测试。 您可以通过最低公分母来访问功能。 当支持本地功能时,通常只能以一种方式访问它:便携式框架的方式。 这有时与目标平台的首选方式不一致。 如果您可能访问目标平台特有的功能,那么您将失去运行无处不在的可移植性。 每个所谓的“跨平台”框架本身都是一个平台。 先看一 ...
  • 改变你的路径“/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 ...
  • 我发现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(); ...
  • 您应该附加成功和错误处理程序,以便能够调试正在进行的操作。 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 ...
  • 您通常需要一段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 ...

相关文章

更多

最新问答

更多
  • 在javascript中创建类以创建对象并在Java中创建类和对象之间的区别(Difference between creating a class in javascript to create an object and creating an class and object in Java)
  • Facebook API:将身份验证详细信息从Javascript SDK发送到PHP SDK(Facebook API: Send authentication detail from Javascript SDK to PHP SDK)
  • 如何停止队列动画jquery?(How can I stop queue animation jquery?)
  • 使用C#的井字游戏中的人工智能(Artificial Intelligence in Tic-Tac-Toe using C#)
  • 多少流量可以共享虚拟主机(对于Python Django站点)支持?(How Much Traffic Can Shared Web Hosting (for a Python Django site) support?)
  • 带有CIFilters的CAShapeLayer(CAShapeLayer with CIFilters)
  • 如何在Angular 2中读取JSON #text(How to read in Angular 2 the JSON #text)
  • 如何在xml中读取自闭标签的属性?(How to read self closing tag's attribute in xml?)
  • 无法使用http put将图像上传到亚马逊S3(Cannot upload image to amazon s3 using http put)
  • 文件结束无限循环(end of file infinite while-loop)
  • 在cpp的模板(template in cpp)
  • 在构建库时,clang和clang ++有什么区别?(What's the difference between clang and clang++ when building a library?)
  • ng类中的表达式(expression inside ng-class)
  • 在PHP中获取随机布尔值true / false(Get random boolean true/false in PHP)
  • 管道的高效分块用于严格的字节串(Efficient chunking of conduit for strict bytestring)
  • Python ternary_operator(如果其他标志做了其他操作,则执行其他操作)(Python ternary_operator (do-somthing if flag else do-another))
  • Sencha Touch面具发布(Sencha Touch mask ondisclosure)
  • 验证脚本上的通知[重复](Notices on validation script [duplicate])
  • 朋友功能(friend function)
  • 基于角坐标平移和变换平面几何(Translate and transform plane geometry based on corner coordinates)
  • Rails:'如果在本地运行'条件javascript标记包括(Rails: 'if running locally' conditional javascript tag include)
  • 解压文件(Unzipping files)
  • 使用ui-router以角度加载变量状态(loading in variable states with ui-router in angular)
  • 创建Azure云服务需要多长时间?(how long does it take to create an Azure Cloud Service? How to view log information?)
  • 指向整数的指针数组(Array of pointers to integers)
  • Laravel服务提供商没有看到我的包的主要类(Laravel service provider does not see the main class of my package)
  • 这个关于VSS / RSS / PSS / USS的解释是否准确?(Is this explanation about VSS/RSS/PSS/USS accurate?)
  • 在Django-Admin中通过row-id排序显示项目(Ordering the display items by row-id in Django-Admin)
  • 如何使用cythonize启用`--embed`?(How to enable `--embed` with cythonize?)
  • 用于将文本多行设置的Excel脚本(Excel script for ereasing text multiple rows)