使用没有cordova的流星我可以使用
在我的浏览器中播放声音 new Audio('test.mp3').play()
其中test.mp3
位于公用文件夹中。但是,一旦我将应用程序作为设备上的cordova应用程序运行,我就无法播放声音。我究竟做错了什么?谢谢。
答案 0 :(得分:6)
TL;博士
安装cordova媒体插件meteor add cordova:org.apache.cordova.media@0.2.15
将音频文件添加到公共目录
使用/android_asset/www/application/path/to/sound.wav
如果查看项目中的此文件夹,
$PROJECT_ROOT/.meteor/local/cordova-build/platforms/android/assets/www/
您将看到您的应用程序为cordova为Android构建它。
使用Cordova Media插件,我试图使用文件路径/android_asset/www/path/to/sound.wav
无效。
# 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
以下是适用于我的相关代码。
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
答案 1 :(得分:2)
似乎有两种可能的解决方案。第一个可能是更正确的解决方案仅适用于cordova应用程序。由于插件依赖性,它无法在浏览器中运行。第一步是添加cordova插件:
meteor add cordova:org.apache.cordova.media@0.2.15
接下来构建一个播放声音的功能:
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。
new Audio('http://MY_IP:port/test.mp3').play()
答案 2 :(得分:1)
iOS推送通知声音有类似的问题。在Xcode编译应用程序之前,我将声音文件添加到Xcode中的Resources文件夹时解决了问题。在这种情况下,您可以将其称为:
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'
我安装了媒体插件
meteor add cordova:org.apache.cordova.media@0.2.14
答案 3 :(得分:1)
如果您真的想在本地播放声音(没有互联网连接),那么您需要将主机地址更改为:
http://meteor.local/[your_subfolder(s)_if_you_got]/your.mp3
使用此URL,您当然可以执行上述媒体或音频呼叫。如果您的资源位于公共文件夹或资源文件夹中,那么您可以按照设计将这些文件复制到您的应用包中。
答案 4 :(得分:1)
我无法以任何形式或形式获得任何提议的Android解决方案。在Android上,我的应用程序在尝试播放声音时会无声地失败。
最后,这对我有用:
var player = new window.Audio();
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
player.src = window.URL.createObjectURL(this.response);
player.play();
}
};
xhr.open('GET', "/audio.mp3");
xhr.responseType = 'blob';
xhr.send();
来自here。