首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Meteor-Cordova应用程序中播放声音

在Meteor-Cordova应用程序中播放声音
EN

Stack Overflow用户
提问于 2014-12-11 21:18:54
回答 5查看 2.4K关注 0票数 7

在没有cordova的情况下使用流星,我可以在浏览器中播放声音。

代码语言:javascript
复制
 new Audio('test.mp3').play()

test.mp3位于公用文件夹中的位置。然而,一旦我将我的应用程序作为cordova应用程序运行在设备上,我就无法播放声音。我做错了什么?谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-20 07:19:31

tl;dr

  1. 安装cordova媒体插件meteor add cordova:org.apache.cordova.media@0.2.15
  2. 将音频文件添加到公共目录
  3. 使用/android_asset/www/application/path/to/sound.wav

如果您查看项目中的这个文件夹,

$PROJECT_ROOT/.meteor/local/cordova-build/platforms/android/assets/www/

当cordova为android构建应用程序时,您将看到它。

使用Cordova媒体插件,我试图使用文件路径/android_asset/www/path/to/sound.wav,但没有效果。

代码语言:javascript
复制
# Install the cordova media plugin with this command
meteor add cordova:org.apache.cordova.media@0.2.15

相反,我看到我的声音文件夹在www目录中,但在应用程序目录下。所以,这个文件路径最终为我工作,

/android_asset/www/application/path/to/sound.wav

这是对我有用的相关代码。

代码语言:javascript
复制
function getMediaUrl(sound) {

  if (device.platform.toLowerCase() === "android") {

    return cordova.file.applicationDirectory.replace('file://', '') + 'www/application/' + sound.substr(1);

  }
  else {

    return cordova.file.applicationDirectory.replace('file://', '') + sound.substr(1);

  }

}

function playSound(sound) {

  return new Media(

    getMediaUrl(sound),

    function (success) {
      // success
    },
    function (err) {
      // error
    }
  );
}

var test = playSound('/sounds/test.wav');

test.play();

注意事项:我将音频文件包括在公用文件夹中,即

$PROJECT_ROOT/public/sounds/test.wav

在Android上,此文件路径被转换为

/android_asset/www/application/sounds/test.wav

票数 6
EN

Stack Overflow用户

发布于 2014-12-11 21:51:41

似乎有两种可能的解决办法。第一种可能是更正确的解决方案,仅适用于cordova应用程序。由于插件的依赖性,它将无法在浏览器中工作。第一步是添加cordova插件:

代码语言:javascript
复制
  meteor add cordova:org.apache.cordova.media@0.2.15 

接下来构建一个函数来播放声音:

代码语言:javascript
复制
playLimitSound = function() {
  if (Meteor.isCordova) {
        var my_media = new Media('http://MY_IP:port/test.mp3',
            // success callback
            function () {
                console.log("playAudio():Audio Success");
            },
            // error callback
            function (err) {
                console.log("playAudio():Audio Error: " + err);
            }
        );
        // Play audio
        my_media.play();
}

};

这是另一种解决办法。它既适用于浏览器,也适用于cordova-app。

代码语言:javascript
复制
 new Audio('http://MY_IP:port/test.mp3').play()
票数 2
EN

Stack Overflow用户

发布于 2015-01-09 16:18:12

我在iOS推送通知声音方面也有类似的问题。在Xcode编译应用程序之前,我将声音文件添加到Xcode中的参考资料文件夹中,就解决了这个问题。在这种情况下,您可以将其称为:

代码语言:javascript
复制
if (Meteor.isCordova) {
  var NotificationHandler = function(evt) {
    if (evt.sound) {
      var snd = new Media( 
        Meteor.absoluteUrl(evt.sound), 
        function() { console.log('media ok'); }, 
        function(err) { console.log('media error',err); }
      );
      snd.play();
    }
  };
}

例如,evt.sound是“test.mp3”

我还安装了媒体插件

代码语言:javascript
复制
 meteor add cordova:org.apache.cordova.media@0.2.14
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27432554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档