【问题标题】:Web Audio API in not playing audio in Virtual Device's Android BrowserWeb Audio API 在虚拟设备的 Android 浏览器中不播放音频
【发布时间】:2017-06-19 05:19:32
【问题描述】:

我正在使用 Android Studio 编写一个播放音频的小应用程序。

在我的 PC 上的浏览​​器中进行测试时,我的应用程序可以在 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()

以上播放正常,我能听到声音。

在我的 PC 上的浏览​​器中进行测试时,在 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.");
}

代码没有报错,网站[can I use dot com]显示Android5-6.x及更新的版本完全支持Web Audio API。

在 Android Studio 中,使用 Web Chrome 客户端或 Web View 客户端在 WebView 容器中加载 JavaScript 代码的尝试都无法播放 METHOD 2(从上面)。

但方法 1 始终有效。我怀疑 Virtual Devices 没有完全启用 Web Audio API。

我在 Android Studio 中的工作还不够远,无法制作 .apk 文件以在我自己的 LG G3 智能手机上进行测试,但在我走得更远之前,我希望看看是否有人可以摆脱一些了解正在发生的事情。

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

谢谢!

【问题讨论】:

    标签: javascript android html audio


    【解决方案1】:

    为了跟进,我创建了 .apk 文件并在我的手机 (LG G3) 上运行了该应用程序,但可惜我的 Android 版本是 4.2.2,不支持 Web Audio API。我需要升级到 Android 5.x 或更高版本。

    我确实尝试了另一种方法。

    我将 HTML5/JS/CSS 加载到我的网络服务器上,然后重新编写了一个快速的 .apk 以启动指向网络服务器的 Chrome。结果是该应用在我的 LG G3 手机上的 Chrome 中使用浏览器运行。

    这是我加载应用程序 URL 的方式:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      相关资源
      最近更新 更多