WebView无法播放任何声音。

10

我使用最简单的 WebView 实例,到目前为止,所有需要的内容都可以正常工作,但是通过这个 WebView 播放声音(包括由 JavaScript 调用的声音和 HTML5 音频标签)都不能正常工作。

我使用最简单的 WebView 实例,到目前为止,所有需要的内容都可以正常工作,但是通过这个 WebView 播放声音(包括由 JavaScript 调用的声音和 HTML5 音频标签)都不能正常工作。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView myWebView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.loadUrl("file:///android_asset/game.html");
    }
}

对于HTML方面的问题,我可以排除掉,因为在PC和手机的常规浏览器中声音都正常。

到目前为止,在Android 4.4和Android 7.0上测试,常规浏览器内都有声音,但是在WebView中没有声音。

最常见的答案是手机需要在屏幕上轻触才能启动声音。虽然这并不能解释为什么常规浏览器可以正常工作,而只有WebView受到影响。


请在应用程序标签下的清单中尝试添加android:hardwareAccelerated="true"。 - Levon Petrosyan
@LevonPetrosyan,鉴于我正在构建游戏,硬件加速是一个不错的点子,谢谢。然而,它并没有解决问题。Pavel Poley的答案解决了这个问题。 - John Doe
2个回答

28

尝试添加这个

webSettings.setMediaPlaybackRequiresUserGesture(false)

2
不适用于我,但是我从我的远程服务器加载URL,该服务器提供使用create-react-app创建的反应应用程序。 我使用howler.js,并在/ public文件夹中拥有一个.mp3文件,唯一的不起作用的方法是相同的:如果我从android webview中使用它。(它适用于桌面,Android浏览器,iOS浏览器,iOS Webview)。 .wav也不起作用。 但是,如果我从外部端点提供声音文件,则可以运行。 我不明白为什么,对我来说,Android WebView在音频方面似乎存在问题。 - PEZO
3
如果(Build.VERSION.SDK_INT > 17) { webSettings.setMediaPlaybackRequiresUserGesture(false); }该函数在API大于17时添加,因此在API小于17的设备上无法使用,您应该将它放在一个if条件语句中。 - Afshin Izadi
在我的情况下,只有一些声音无法工作,而其他声音可以。这个解决方案也在这种情况下起作用了。很奇怪...但还是谢谢你提供的解决方案。 - Liglo App
@PEZO 我正在调查为什么我的Webview在三星手机上无法工作,并且我在logcat中看到了这个错误:D/MediaPlayer:setDataSource IOException happend: java.io.FileNotFoundException: No content provider: http://www.mystic-peanut.com/mystic_sites/paintone/media/tones/xylophone/xc1.mp3 这个链接在浏览器上可以正常工作,所以我想问一下,从外部端点提供服务器文件是什么意思? - pera
1
@pera 我的意思是,如果我将要使用howler.js播放的资源的URL设置为“外部”互联网上可用的内容,则可以正常工作。但是,如果我想要本地引用它“/public/mylocalassets/myfile.wav”,那么它就无法正常工作。我已经放弃了这个项目,所以不会再跟进了,抱歉。 - PEZO

0

我曾经遇到同样的问题,为在Android WebViews中播放音频文件进行了大量搜索。我的音频文件存储在Google Drive中。我可以轻松地使用WebViews播放存储在Google Drive以外的外部服务器上的音频文件。但是当我想从Google Drive中读取它时,在WebViews中显示图标,但播放时出现错误“无法播放音频”。最后,我在网站https://www.labnol.org/internet/google-drive-mp3-embed/2232/中找到了一个惊人的解决方案。他建议将URL的最后一部分更改为“preview”。例如,URL将采用以下形式https://drive.google.com/file/d/1234ab56/view?usp=sharing,将最后一部分view?usp=sharing更改为preview。因此,最终的URL将是https://drive.google.com/file/d/1234ab56/preview。现在,使用与在WebView中加载嵌入式YouTube视频相同的代码加载它。谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接