为什么在使用Android 4的三星上,phonegap应用程序无法发出声音?

时间:2017-01-07 17:23:33

标签: audio phonegap-plugins howler.js

我有一个phonegap应用程序,现在正在对PlayStore进行alpha测试。 声音适用于大多数设备,但不适用于安装了Android 4.x的Samsung设备。 我没有找到问题或类似的问题。我做错了吗?

代码为https://github.com/goldfire/howler.js/tree/2.0

		var sound = new Howl({
		  src: ['res/raw/warning.mp3']
		}).play();

我的Cordova-plugin-media代码:

		var src = "res/raw/warning.mp3";
		// HTML5 Audio
		if (typeof Audio != "undefined") { 
			new Audio(src).play() ;

		// Phonegap media
		} else if (typeof device != "undefined") {

			// Android needs the search path explicitly specified
			if (device.platform == 'Android') {
				src = '/android_asset/www/' + src;
			}

			var mediaRes = new Media(src,
				function onSuccess() {
					// release the media resource once finished playing
					mediaRes.release();
				},
				function onError(e){
					alert("error playing sound: " + JSON.stringify(e));
				});
			mediaRes.play();

		} else {
			alert("no sound API to play: " + src);
		}

任何人都知道问题的根源是什么?

1 个答案:

答案 0 :(得分:0)

这里可能有几件事情;理想情况下,你应该等待声音加载才能尝试播放(咆哮试图自己处理它,但它并不总是有效)

从他们的例子

var sound = new Howl({
  src: ['sound.webm', 'sound.mp3']
});

// Clear listener after first call.
sound.once('load', function(){
  sound.play();
});

第二个问题可能是因为它是一个较旧的Android设备,因此WebAudio支持可能是粗略的。尝试将html5添加到选项

var sound = new Howl({
  src: ['sound.webm', 'sound.mp3', 'sound.wav'],
  html5 : true
});

最后一个问题可能是因为许多移动设备在播放声音之前需要用户互动(想想浏览器制造商不希望人们浏览网站并让音乐自动开始播放!)。因此,一旦声音加载,请求用户触摸屏幕一次,然后在该触摸事件上播放声音。这应该解锁'从现在开始的音频。同样,咆哮确实试图这样做,但这也是你可能想要看的东西。