适用于Android Webview的JWPlayer Javascript API

我试图让JWPlayer在播放本地video的Flash播放器发生一些特定事件时返回警报。 如果你注意到下面的代码,onComplete,JWPlayer应该返回一个警报,然后可以通过setWebChromeClient的onJsAlert来拦截,所以我可以做这些信息。 难道我做错了什么?

一个可能的原因,我可以在这里find: JWplayer JavaScript交互不工作 ,它正在本地加载。 有什么办法可以绕过这个问题吗? 通过调用本地主机以某种方式加载会更容易吗? 这甚至可能吗?

对于那些你好奇为什么我生成一个HTML文件,而不是只有一个从资产移动 – 在淘金互联网弄清楚如何让本地的flv播放器正常工作,最好的select是生成HTML文件与自定义信息并将文件写入到FLV所在的目录(因此FileWriter函数)。

JWPlayerembedded的HTML代码:

private void createVideoHtml(File flvDirectory, File htmlFile, String videofilename) { String htmlPre = "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"utf-8\"></head><body style='margin:0; padding:0;'>"; String htmlCode = "<script type='text/javascript' src='"+ flvDirectory.getAbsolutePath() + "/jwplayer.js'></script>" + "<div id='mediaspace'>EZ Stream TV FLV Player</div>" + "<script type='text/javascript'>" + "jwplayer('mediaspace').setup({" + "'flashplayer': '"+ flvDirectory.getAbsolutePath() + "/player.swf', 'file': '" + videofilename + "', 'backcolor': 'FFFFFF', 'frontcolor': '000000', 'lightcolor': '000000'," + "'screencolor': '000000', 'volume': '100', 'autostart': 'true', 'mute': 'false', 'quality': 'false', 'controlbar': 'bottom', 'width': '100%', 'height': '100%'," + "events: { " + "onComplete: function() { alert('COMPLETED');}" + "}});" + "</script>"; String htmlPost = "</body></html>"; String finalHTML = htmlPre + htmlCode + htmlPost; try { FileWriter f = new FileWriter(htmlFile); PrintWriter p = new PrintWriter(f); p.print(finalHTML); p.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

webview代码和处理Javscript警报:

 webView = (WebView)findViewById(R.id.web_player); webView.getSettings().setBuiltInZoomControls(false); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadsImagesAutomatically(true); webView.getSettings().setPluginsEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webView.getSettings().setAllowFileAccess(true); webView.setInitialScale(60); webView.setBackgroundColor(Color.BLACK); getWindow().addFlags(128); webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) { Log.d(TAG, message); new AlertDialog.Builder(view.getContext()).setMessage(message).setCancelable(true).show(); result.confirm(); return true; } }); 

Solutions Collecting From Web of "适用于Android Webview的JWPlayer Javascript API"

你可以参考下面的代码JWPlayer到Webview

 private void createVideoHtml(File flvDirectory, File htmlFile, String videofilename) { String htmlPre = "<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"></head><body style='margin:0; padding:0;'>"; String htmlCode = "<script type='text/javascript' src='"+ flvDirectory.getAbsolutePath() + "/jwplayer.js'></script>" + "<div id='mediaspace'>EZ Stream TV FLV Player</div>" + "<script type='text/javascript'>" + "jwplayer('mediaspace').setup({" + "'flashplayer': '"+ flvDirectory.getAbsolutePath() + "/player.swf', 'file': '" + videofilename + "', 'backcolor': 'FFFFFF', 'frontcolor': '000000', 'lightcolor': '000000'," + "'screencolor': '000000', 'volume': '100', 'autostart': 'true', 'mute': 'false', 'quality': 'false', 'controlbar': 'bottom', 'width': '100%', 'height': '100%'," + "events: { " + "onComplete: function() { alert('COMPLETED');}" + "}});" + "</script>"; String htmlPost = "</body></html>"; String finalHTML = htmlPre + htmlCode + htmlPost; try { FileWriter f = new FileWriter(htmlFile); PrintWriter p = new PrintWriter(f); p.print(finalHTML); p.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } webView = (WebView)findViewById(R.id.web_player); webView.getSettings().setBuiltInZoomControls(false); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadsImagesAutomatically(true); webView.getSettings().setPluginsEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webView.getSettings().setAllowFileAccess(true); webView.setInitialScale(60); webView.setBackgroundColor(Color.BLACK); getWindow().addFlags(128); webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) { Log.d(TAG, message); new AlertDialog.Builder(view.getContext()).setMessage(message).setCancelable(true).show(); result.confirm(); return true; } }); 

我在使用jwplayer时遇到了同样的问题,我的结论是onComplete事件在某些情况下是不可信的。 你能基准其他事件像onTime事件一样工作吗?

否则,使用onIdle事件并测量剩余时间(getDuration – getPosition)以获得自定义的onComplete事件。