Staram się, aby JWPlayer zwrócił alert, gdy kilka konkretnych zdarzeń stanie się z odtwarzacza Flash odtwarzającego wideo lokalne. Jeśli zauważysz z poniższego kodu, onComplete, JWPlayer powinien zwrócić alert, który może zostać przechwycony przez onJsAlert z setWebChromeClient, dzięki czemu mogę robić rzeczy z tymi informacjami. czy robię coś źle?JWPlayer JavaScript API dla Androida Webview
Możliwy powód, mogę znaleźć tutaj: JWplayer Javascript interaction not working, który jest ładowany lokalnie. Czy istnieje sposób ominięcia tego problemu? Czy byłoby łatwiej ładować się w jakiś sposób przez wywołanie localhost? Czy to w ogóle jest możliwe?
Dla tych, którzy ciekawi, dlaczego generuję plik HTML zamiast jednego ruchu z zasobów - po wyszukaniu Internetu, aby dowiedzieć się, jak sprawić, by lokalny gracz flv działał poprawnie, najlepszą opcją było wygenerowanie Plik HTML z niestandardowymi informacjami i zapisz plik w tym samym katalogu co FLV (stąd funkcja FileWriter).
kod HTML JWPlayer osadzić:
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();
}
}
Kod WebView i obsługi alert 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;
}
});
ja już od porzucił ten projekt. Jednak nie można zrobić getDuration - getPosition na streaming wideo, jeśli mam rację. Przynajmniej na tym, co dostawałem. Powinien używać jakiegoś zwariowanego javascript po stronie HTML, aby uzyskać pozycję wideo flash. Jednak rozwiązanie onIdle wydaje się być dobre, możesz go wypróbować i sprawdzić, czy to rozwiązuje. –