我正在使用Android Studio编写一个播放音频的小应用程序。
在我的电脑上使用浏览器进行测试时,我的应用可在Chrome,Edge和Firefox中使用。 MP3音频文件播放响亮而清晰。但是,我在Android Studio中安装的虚拟设备不播放MP3音频。
完全披露,我有两种方法可以播放音乐,音频。方法1起作用。
var toggleEffect;
toggleEffect = document.createElement('audio');
toggleEffect.setAttribute('src', 'audio/clicks/toggleEffect.mp3');
toggleEffect.id = "toggleEffect";
toggleEffect.play()
以上播放很好,我可以听到音频。
在我的电脑上使用浏览器进行测试时,第二种方法适用于Chrome,Edge和Firefox;好吧,它不想在虚拟设备浏览器中工作。
这是方法2。
// set the audio file's URL
var audioURL = 'AllofMe.mp3';
//creating a new request
var request = new XMLHttpRequest();
request.open("GET", audioURL, true);
request.responseType = 'arraybuffer';
//take the audio from http request and decode it in an audio buffer
context.decodeAudioData(request.response, function(buffer) {
audioBuffer = buffer;
console.log(audioBuffer);
if (audioBuffer) { // check here
//creating source node
var source = context.createBufferSource();
//passing in file
source.buffer = audioBuffer;
//start playing
source.connect(context.destination); // added
}
});
request.send();
起初我怀疑Web Audio API在Android浏览器中不起作用,也许它不受支持。但在检查后,支持。
我添加了以下代码,让我知道Web Audio API是否可用。我用它在虚拟设备中测试Android Studio的一部分。
var context;
var contextClass = (window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.oAudioContext || window.msAudioContext);
if (contextClass) {
// Web Audio API is available.
context = new contextClass();
} else {
// Web Audio API is not available. Fallback
alert("Web Audio API is not available.");
}
代码报告没有错误,网站[我可以使用dot com]显示Android 5-6.x和更新的版本完全支持Web Audio API。
在Android Studio中,尝试使用Web Chrome客户端或Web View Client在WebView容器中加载JavaScript代码都无法播放方法2(从上面开始)。
但方法1始终有效。我怀疑虚拟设备是不是完全启用了Web Audio API。
我在Android Studio中的表现还不够,无法在我自己的 LG G3 智能手机上测试.apk文件,但在我再进一步之前,我希望看到是否有人可以放弃一些了解正在发生的事情。
我提供了我正在使用的所有代码。
谢谢!
答案 0 :(得分:0)
为了跟进,我创建了.apk文件并在我的手机上运行了应用程序(LG G3),但是我的Android版本是4.2.2并且不支持Web Audio API。我需要升级到Android 5.x或更高版本。
我确实尝试了另一种方法。
我将HTML5 / JS / CSS加载到我的网络服务器上,然后重新编写了一个快速的.apk来启动指向websever的Chrome。结果是该应用在我的LG G3手机上使用浏览器在Chrome中运行。
这是我加载应用程序网址的方式:
String url = "http://myserver.com/webapp/index.html";
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setPackage("com.android.chrome");
try {
startActivity(i);
} catch (ActivityNotFoundException e) {
// Chrome is probably not installed
// Try with the default browser
i.setPackage(null);
startActivity(i);
}
最终,虚拟设备从未运行过第二种在JavaScript中播放音频的方法,因此我不知道虚拟环境是否存在限制,但它确实在浏览器中运行。
如果我能了解更多,我会更新。谢谢。