Android - 识别Web视图播放声音
答
这可以很容易,如果你使用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
任何帮助将不胜感激 – Fou
你到目前为止尝试过什么?截至目前,我没有看到任何代码或迹象表明你已经付出了努力来解决这个问题。 –
@esme_louise我已经尝试过不同的想法,对我来说不适用,只是不断地改变一个代码... – Fou