如何在Android的webview中播放音频?

5

我想在webview里播放来自URL的音频,并希望它有播放和暂停按钮。我尝试直接打开URL,如下所示:

myView = (WebView) findViewById(R.id.webView);
    myView.getSettings().setJavaScriptEnabled(true);
    myView.loadUrl(myUrl);

但是这并没有起作用。


最好将音频放在资产文件夹中,在 WebView 中运行。 - Jhaman Das
4个回答

6
这可以通过Javascript接口完成。 创建WebInterface类
public class WebInterface{
    Context mContext;

    WebInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void playSound(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }

    @JavascriptInterface
    public void pauseSound(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

在您的WebView类中。
WebView browser;
browser=(WebView)findViewById(R.id.webkit);   
browser.getSettings().setJavaScriptEnabled(true);
browser.addJavascriptInterface(new WebInterface(this), "Android");        
browser.loadUrl("http://someurl.com");

在HTML代码中

<html>
<head>
<script type="text/javascript">
    function playSound(toast) {
        Android.showToast(toast);
    }

    function pauseSound(toast) {
        Android.showToast(toast);
    }
</script>
</head>
<body>
<input type="button" value="Say hello" onClick="playSound('Sound Played!')" />
<input type="button" value="Say hello" onClick="pauseSound('Sound Paused!')" />
</body>
</html>

为什么这个答案被否定了?它是最好的解决方法! - Rodrigo Borba

1

尝试一下,这是可用的代码。

 WebView mWebView;
 mWebView = (WebView)findViewById(R.id.webView);

    // Enable Javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    mWebView.loadUrl("http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C%20Major.mp3");

    // Force links and redirects to open in the WebView instead of in a browser
    mWebView.setWebViewClient(new WebViewClient());

我尝试了一个音频URL。它应该可以工作。
编码愉快..!!!

1
在MyWebViewClient中声明你的MediaPlayer时,添加以下内容...
public class MyWebViewClient extends WebViewClient{

    public MediaPlayer mp;
    private Context context = null; // Add this line

    ...
}

然后在MyWebViewClient中添加一个构造函数,如下所示...
public MyWebViewClient(Context context) {
    this.context = context;
}

然后在 shouldOverrideUrlLoading(...) 中按以下方式获取您的资产...
AssetFileDescriptor afd = context.getAssets().openFd(url);

在您的MainActivity中,通过以下方式将WebViewClient设置为此(即Activity Context)...

webMain.setWebViewClient(new MyWebViewClient(this));

如果您需要更多帮助,请访问此链接 Android: 使用WebView播放资产声音

0
你想播放哪个URL?如果是包含HTML5内容的复杂页面,你可以使用crosswalk libraryXWalkView代替WebView。但这个库会大幅增加你的apk大小。
另外,你也可以尝试将WebViewClient设置为你的本地WebView并处理onLoadResource()方法。如果这个方法接收到音频URL,就将它直接传递给Android的MediaPlayer

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