Android的web视图JWPlayer的JavaScript API [英] JWPlayer Javascript API for Android Webview

查看:218
本文介绍了Android的web视图JWPlayer的JavaScript API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图让JWPlayer时,一些特定的事件发生时从闪存播放器播放本地视频返回警报。如果从code以下,的onComplete注意到,JWPlayer应该返回一个警告,然后可以通过onJsAlert从setWebChromeClient拦截,所以我可以做的东西与信息。难道我做错了什么?

有一个可能的原因,我可以在这里找到:<一href="http://stackoverflow.com/questions/6493287/jwplayer-javascript-interaction-not-working">JWplayer Javascript的交互工作不,它的加载本地。有没有什么办法可以绕过这个问题?难道会更容易通过调用本地主机不知怎么加载?是,即使可能吗?

对于那些你很好奇,为什么我生成只是具有资产的一招的HTML文件,而不是 - 在网上淘后,找出如何让本地视频播放器正常工作,最好的选择是生成HTML文件与自定义的信息和文件写入到相同的目录FLV(因此FileWriter的功能)。

HTML $ C $下JWPlayer嵌入:

 私人无效createVideoHtml(文件flvDirectory,文件HTMLFILE,串videofilename)
{
    字符串的HTML pre =&LT;!DOCTYPE HTML&GT;&LT; HTML LANG = \EN \&GT;&LT; HEAD&GT;&LT;元的charset = \UTF-8 \&GT;&LT; /头&GT;&LT ;车身风格=保证金:0;填充:0;&gt;中;
    字符串的HTML code =
            &LT;脚本类型=文/ JavaScript的SRC ='+ flvDirectory.getAbsolutePath()+/jwplayer.js'></script> +
            &LT; D​​IV ID ='的MediaSpace'&GT; EZ电视流视频播放器&LT; / DIV&gt;中+
            &LT;脚本类型=文/ JavaScript的&gt;中+
            jwplayer('的MediaSpace)。设置({+
            '版本的Adobe Flash':'+ flvDirectory.getAbsolutePath()+/player.swf','文件':'+ videofilename +,背景色:FFFFFF,frontcolor':'000000',' lightcolor:000000,+
            'screencolor':'000000','量':'100','自动启动':'真','哑巴':'假','质量':'假','控制栏':'底','宽:100%,高度:100%,+
            事件:{+
            的onComplete:函数(){警报(已完成);}+
            }}); +
            &所述; /脚本&gt;中;
    字符串htmlPost =&LT; /身体GT;&LT; / HTML&gt;中;
    字符串finalHTML = HTML pre + HTML code + htmlPost;

    尝试 {
        FileWriter的F =新的FileWriter(HTMLFILE);
        PrintWriter的P =的新PrintWriter(F);
        p.print(finalHTML);
        p.close();
    }赶上(IOException异常E){
        // TODO自动生成的catch块
        e.printStackTrace();
    }
}
 

$ C $下的WebView和处理Javscript警告:

  web视图=(web视图)findViewById(R.id.web_player);
    。webView.getSettings()setBuiltInZoomControls(假);
    webView.getSettings()setJavaScriptEnabled(真)。
    。webView.getSettings()setLoadsImagesAutomatically(真正的);
    webView.getSettings()setPluginsEnabled(真)。
    。webView.getSettings()setJavaScriptCanOpenWindowsAutomatically(真正的);
    。webView.getSettings()setAllowFileAccess(真正的);
    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火狐/ 3.5.2(.NET CLR 3.5.30729));
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

    webView.setWebChromeClient(新WebChromeClient(){
        @覆盖
        公共布尔onJsAlert(web视图查看,URL字符串,字符串的消息,最终android.webkit.JsResult结果)
        {
            Log.d(TAG,消息);
            新AlertDialog.Builder(view.getContext())setMessage(消息).setCancelable(真).show()。
            result.confirm();
            返回true;
        }
    });
 

解决方案

您可以参考下面的$ C $下JWPlayer到web视图

 私人无效createVideoHtml(文件flvDirectory,文件HTMLFILE,串videofilename)
{
    字符串的HTML pre =&LT;!DOCTYPE HTML&GT;&LT; HTML LANG =EN&GT;&LT; HEAD&GT;&LT;元字符集=utf-8&GT;&LT; /头&GT;&LT;车身风格=保证金:0;填充:0;&gt;中;
    字符串的HTML code =
        &LT;脚本类型=文/ JavaScript的SRC ='+ flvDirectory.getAbsolutePath()+/jwplayer.js'></script> +
        &LT; D​​IV ID ='的MediaSpace'&GT; EZ电视流视频播放器&LT; / DIV&gt;中+
        &LT;脚本类型=文/ JavaScript的&gt;中+
        jwplayer('的MediaSpace)。设置({+
        '版本的Adobe Flash':'+ flvDirectory.getAbsolutePath()+/player.swf','文件':'+ videofilename +,背景色:FFFFFF,frontcolor':'000000',' lightcolor:000000,+
        'screencolor':'000000','量':'100','自动启动':'真','哑巴':'假','质量':'假','控制栏':'底','宽:100%,高度:100%,+
        事件:{+
        的onComplete:函数(){警报(已完成);}+
        }}); +
        &所述; /脚本&gt;中;
    字符串htmlPost =&LT; /身体GT;&LT; / HTML&gt;中;
    字符串finalHTML = HTML pre + HTML code + htmlPost;

    尝试 {
        FileWriter的F =新的FileWriter(HTMLFILE);
        PrintWriter的P =的新PrintWriter(F);
        p.print(finalHTML);
        p.close();
    }赶上(IOException异常E){
        // TODO自动生成的catch块
        e.printStackTrace();
    }
}

web视图=(web视图)findViewById(R.id.web_player);
。webView.getSettings()setBuiltInZoomControls(假);
webView.getSettings()setJavaScriptEnabled(真)。
。webView.getSettings()setLoadsImagesAutomatically(真正的);
webView.getSettings()setPluginsEnabled(真)。
。webView.getSettings()setJavaScriptCanOpenWindowsAutomatically(真正的);
。webView.getSettings()setAllowFileAccess(真正的);
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火狐/ 3.5.2(.NET CLR 3.5.30729));
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

webView.setWebChromeClient(新WebChromeClient(){
    @覆盖
    公共布尔onJsAlert(web视图查看,URL字符串,字符串的消息,最终android.webkit.JsResult结果)
    {
        Log.d(TAG,消息);
        新AlertDialog.Builder(view.getContext())setMessage(消息).setCancelable(真).show()。
        result.confirm();
        返回true;
    }
});
 

I'm trying to get JWPlayer to return an alert when a few specific events happen from a flash player playing a local video. If you notice from the code below, onComplete, JWPlayer should return an alert, which can then be intercepted by onJsAlert from setWebChromeClient so I can do stuff with that information. Am I doing something wrong?

A possible reason, I can find here: JWplayer Javascript interaction not working that it's being loaded locally. Is there any way I can bypass this issue? Would it be easier to load somehow by calling localhost? Is that even possible?

For those of you curious about why I generate an HTML file instead of just having one move from the assets - after scouring the Internet to figure out how to get a local flv player working correctly, the best option was to generate the HTML file with the custom information and write the file to the same directory as the FLV (hence the FileWriter function).

HTML code for JWPlayer embed:

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

Code for webview and handling the Javscript alert:

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

解决方案

You can refer to the code below for JWPlayer to 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;
    }
});

这篇关于Android的web视图JWPlayer的JavaScript API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆