Android WebView使用JavaScript播放音频

5
我想快速将一个带有声音(使用soundmanager2)的HTML应用程序移植到使用WebView的本地Android应用程序中。经过我的研究,我没有看到任何证据表明可以通过JavaScript或任何其他方法使用WebView播放声音,例如mp3文件。
现在我的目标是快速移植HTML应用程序,然后最终创建一个真正的本地应用程序,而不使用WebViews。
如果有人能够成功地实现使用WebViews和Javascript播放音频,请告诉我,或者如果这在目前不可能,请告诉我。
谢谢。

我认为我找到了一个不错的解决方法。看看这个链接: http://stackoverflow.com/a/40634355/3866399 - Rodrigo Borba
2个回答

2
这对你有用吗?
    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.endsWith(".ogg")){
                Log.d(TAG, "Reproducir archivo OGG");
                Uri tempPath = Uri.parse(url);
                MediaPlayer player = MediaPlayer.create(WebViewVideo.this, tempPath);
                player.start();
                return true;
            }else{
                return super.shouldOverrideUrlLoading(view, url);
            }
        }

    });

如果你真的想使用Javascript,可以尝试使用document.open()或类似的方法,我没有尝试过,但我猜它应该能够以相同的方式工作。
顺便说一下,如果你想在后台播放音频,如果你想显示实际的播放器,我认为你必须自己实现视图。
另外,如果你正在考虑html5音频标签,请忘记它。据我所知,Froyo不支持它。
希望这有所帮助,而且没有太迟。
问候。

我正在尝试使用这个,但是我不确定在"WebViewVideo.this"之外该使用什么。 - NassimPHP

2

试着玩一下这个:

if(cm.message().contains("play sound")) {
    //String[] temp = cm.message().split("#");
    AudioManager audiomanager= (AudioManager) getSystemService(AUDIO_SERVICE);
    float actualvolume = (float) audiomanager.getStreamVolume (AudioManager.STREAM_MUSIC);
    float maxVolume= (float) audiomanager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = actualvolume/maxVolume;

    if (loaded) {
        soundPool.play(soundID, volume, volume, 1, 54, 1f);
        Log.e("Test", "Played sound");
    }
} else if(cm.message().contains("stop sound")) {
    soundPool.stop(1);
    Log.e("Test","stoped");
}

myWebView.loadUrl("file:///android_asset/timer.html");
soundID = soundPool.load(this, R.raw.sound1,1);

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