Android - 识别Web视图播放声音

问题描述:

在webview中加载的网页是在后台自动播放的,我想要检测何时声音停止并显示Toast消息。Android - 识别Web视图播放声音

感谢

+0

任何帮助将不胜感激 – Fou

+1

你到目前为止尝试过什么?截至目前,我没有看到任何代码或迹象表明你已经付出了努力来解决这个问题。 –

+0

@esme_louise我已经尝试过不同的想法,对我来说不适用,只是不断地改变一个代码... – Fou

这可以很容易,如果你使用JavascriptInterface。按照我的步骤:

1.创建一个接口回调:

public class MediaWebInterface { 

    public MediaWebInterface() { 

    } 

    @JavascriptInterface 
    public void setEndedIndex(int pIndex) { 
     // Call when the audio ended. 
    } 

} 

2.创建一个javascript包含一个 “结束” 听众:

<script type='text/javascript'>window.onload=function(){var n=document.getElementsByTagName("audio"),r=n.length;for(var o=0;o<r;o++)n[o].setAttribute("index",o),n[o].addEventListener("ended",function(){for(var e=0;e<r;e++)this===n[e]&&window.external.setEndedIndex(e)})} 
</script> 

3.Load的HTML数据成String并追加以上的JavaScript到您的HTML数据String

// Enable javascript support 
mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.addJavascriptInterface(new MediaWebInterface(mHandler), "external"); 
mWebView.loadDataWithBaseURL(mBaseURL, mHTMLData+aboveJavascript, null, "utf-8", null); 

4。当音频停止时,它会调用MediaWebInterface.setEndedIndex(pIndex),并且pIndex是音频的索引。

Hava好玩,试试吧!

请首先阅读WebView.addJavascriptInterface()

Warnning:如果您使用的是proguard,则应该在您的proguard-project.txt中添加后续脚本。否则,回调将无效。因为类名和方法会混淆,所以javascript不能回调。

//Preserved javaScript interface class 
-keepclassmembers class com.xxx.xxx.javascript.MediaWebInterface { 
    public *; 
} 
+1

1+用于proguard的警告!非常好的答案 – apmartin1991