JWPlayer Javascript API для Android Webview

Я пытаюсь заставить JWPlayer возвращать предупреждение, когда некоторые события происходят из флеш-плеера, воспроизводящего локальное видео. Если вы заметили из кода ниже, onComplete, JWPlayer должен вернуть предупреждение, которое затем может быть перехвачено onJsAlert из setWebChromeClient, поэтому я могу делать материал с этой информацией. Я делаю что-то неправильно?

Возможная причина, которую я могу найти здесь: JWplayer Javascript взаимодействия не работает, что он загружается локально. Есть ли способ обойти эту проблему? Было бы легче загрузить как-то, вызвав localhost? Это возможно?

Для тех из вас, кто интересуется, почему я создаю HTML-файл, а не просто один из них – после очистки Интернета, чтобы выяснить, как правильно работать локальный flv-плеер, лучшим вариантом было сгенерировать HTML-файл с помощью Пользовательскую информацию и записать файл в тот же каталог, что и FLV (следовательно, функция FileWriter).

HTML-код для встраивания JWPlayer:

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(); } } 

Код для веб-просмотра и обработки предупреждения 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 "JWPlayer Javascript API для Android Webview"

Вы можете обратиться к приведенному ниже коду для 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.