Web Audio API无法在Virtual Device的Android浏览器中播放音频

时间:2017-06-19 05:19:33

标签: javascript android html5 audio

我正在使用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文件,但在我再进一步之前,我希望看到是否有人可以放弃一些了解正在发生的事情。

我提供了我正在使用的所有代码。

谢谢!

1 个答案:

答案 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中播放音频的方法,因此我不知道虚拟环境是否存在限制,但它确实在浏览器中运行。

如果我能了解更多,我会更新。谢谢。