Estoy intentando que JWPlayer devuelva una alerta cuando ocurren algunos eventos específicos de un reproductor flash que reproduce un video local. Si observa en el siguiente código, onComplete, JWPlayer debería devolver una alerta, que luego puede ser interceptada por jSAlert desde setWebChromeClient para que pueda hacer cosas con esa información. ¿Estoy haciendo algo mal?JWPlayer API de Javascript para Android Webview
Una posible razón, puedo encontrar aquí: JWplayer Javascript interaction not working que se está cargando localmente. ¿Hay alguna manera de evitar este problema? ¿Sería más fácil cargar de alguna manera llamando al localhost? ¿Es eso posible?
Para aquellos de ustedes que tienen curiosidad acerca de por qué genero un archivo HTML en lugar de solo tener un movimiento de los activos: después de buscar en Internet para encontrar un flv player local que funcione correctamente, la mejor opción era generar el Archivo HTML con la información personalizada y escriba el archivo en el mismo directorio que FLV (de ahí la función FileWriter).
código HTML para JWPlayer incrustar:
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();
}
}
Código de vistas web y gastos de la alerta 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;
}
});
Desde entonces, he abandonado este proyecto. Sin embargo, no puede hacer una getDuration - getPosition en un video en tiempo real, si estoy en lo correcto. Al menos en lo que estaba obteniendo. Debería estar usando javascript loco en el lado HTML para obtener la posición del video flash. Sin embargo, la solución onIdle parece buena, puede probarla y ver si la soluciona. –