王学岗WebView(三)

第一部分
接上篇文章
我们现在看下android与java script的交互
我们修改下html

<!DOCTYPE html>
<html>
<head>
<meta charset="GBK">
<title>Insert title here</title>
 
</head>
<body>
	张欣为什么那么爱我<br>
 <a href="tel:18256947186">18256947186</a><br>
 
	<a href="smsto:111">111</a><br>
	
</body>
</html>

我们知道,tel是android中意图过滤器的类型,其他的不用改,我们运行我们的程序;点击18256947186会跳到拨号盘,但不会自动拨号,我们平时访问淘宝网站,点击上面的电话号码就会跳到拨号盘,就是用该功能实现的;
发送短信的功能与拨打电话类似
我们现在要实现这样的功能,点击该号码直接拨打电话;该怎么实现呢?
拨打的行为只有Java代码可以实现,html无法直接调用Java代码;这个时候我们可以使用JavaScript
这是html代码

<!DOCTYPE html>
<html>
<head>
<meta charset="GBK">
<title>Insert title here</title>
<script type="text/javascript">
	 function aaa(){
		 
	}
</script>
</head>
<body>
	这是我的第一次 !!!!<br/><br/><br/>
	<a href="tel:18256947186">18256947186</a><br/><br/>
	<a href="smsto:111">111</a><br/><br/>
	<!-- 
		HTML只能调用 js中的对象的方法  但是js对象中每一个一个方法是可以直接打电话的
		
		,通过java代码来为js添加对象:plugs  并且为这个对象定义一个拨打电话的方法
	 -->
	<a href="javaScript:zhangxin.callPhone('110')">110</a>
	 
	
	
</body>
</html>

下面的是MainActivity代码

package com.example.webview;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.webkit.WebView;

public class MainActivity extends Activity {

	private WebView wv_WebView;

	@SuppressLint("JavascriptInterface")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		wv_WebView = (WebView) findViewById(R.id.wb_webview);
		wv_WebView.loadUrl("file:///android_asset/myhtml.html");

		// 1,设置webView允许加载javaScript代码,默认不允许加载
		wv_WebView.getSettings().setJavaScriptEnabled(true);
		// 2,给javaScript传递一个插件对象,此处的zhangxin就代表了new MyZhangXin()
		wv_WebView.addJavascriptInterface(new MyZhangXin(), "zhangxin");
	}

	class MyZhangXin {

		public void callPhone(String number) {
			// Java代码才可以直接调用拨打电话的功能
			Intent intent = new Intent(Intent.ACTION_CALL);
			// intent.setData(Uri.parse("tel:110"));
			intent.setData(Uri.parse("tel:" + number));
			startActivity(intent);
		}
	}

}

第二部分
我们使用Java代码调用js中的方法
首先这是我们的一个html,内部有js脚本

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <script type="text/javascript">

   function javaCallJs(){
       document.getElementById("content").innerHTML +=   
            "<br\>java调用了js无参函数";
   }
   
   function javaCallJs(arg){
       document.getElementById("content").innerHTML =
            ("欢迎:"+arg );
   }
   
   
   function showDialog(){
      alert("谷粉们你好,我是来自javascript");
   }
   





    </script>


</head>


<body>

<div align="left" id="content"> 谷粉</div>
<div align="right">光临尚硅谷</div>

<p><img src="http://atguigu.com/images/logo.gif"></p>


<input type="button" value="点击Android被调用" onclick="window.Android.showToast()" />

</body>


</html>

加载进来就是这个样子
在这里插入图片描述
我们现在要实现这样的功能,每当我们点击按钮的时候,我们就加载该界面,同时将EditText中的文本传递给html页面。
这是我们的界面,代码就不贴了,就是一个EditText和一个Button
在这里插入图片描述
我们看下代码是怎么实现的。

package com.example.html5test;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    private EditText et_content;
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_content = findViewById(R.id.et_content);
        initWebView();
    }

    private void initWebView() {
        webView = new WebView(this);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("file:///android_asset/JavaAndJavaScriptCall.html");
    }

    public void startHtml5(View view) {
        String content=et_content.getText().toString().trim();
        if(TextUtils.isEmpty(content)){
            Toast.makeText(this,"内容 不能为空",Toast.LENGTH_LONG).show();
        }else {
        //javaCallJs必须与html页面中的名字一模一样
            webView.loadUrl("javascript:javaCallJs("+"'"+content+"'"+")");
            setContentView(webView);
        }
    }
}

我们看下我们运行后的html页面。
在这里插入图片描述
第三部分
紧接第二部分,我们现在实现这个功能,点击html页面的按钮,弹出吐丝。这个图斯是Java代码做的事情。效果如下图。
在这里插入图片描述
看下代码中是如何实现的

package com.example.html5test;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    private EditText et_content;
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_content = findViewById(R.id.et_content);
        initWebView();
    }

    private void initWebView() {
        webView = new WebView(this);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        //添加JavaScript的一个接口,以后javascript就可以通过Android字段,调用MyJavaScriptUsed中的任何方法。
        //Android这个字段不能随便写,要与onclick="window.Android.showToast()中的Android保持一致。
        webView.addJavascriptInterface(new MyJavaScriptUsed(), "Android");
        webView.loadUrl("file:///android_asset/JavaAndJavaScriptCall.html");
    }

    class MyJavaScriptUsed {
        /**
         * 注意,方法名字必须与html中定义的一致。<input type="button" value="点击Android被调用" onclick="window.Android.showToast()"/>
         * 该方法添加注解,将会被js调用,
         */
        @JavascriptInterface
        public void showToast() {
            //线程名字是:JavaBridge
            Log.i("zhang_xin", Thread.currentThread().getName());
            MainActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    setContentView(R.layout.activity_main);
                }
            });
            Toast.makeText(MainActivity.this, "我被js调用了", Toast.LENGTH_LONG).show();
        }
    }

    public void startHtml5(View view) {
        String content = et_content.getText().toString().trim();
        if (TextUtils.isEmpty(content)) {
            Toast.makeText(this, "内容 不能为空", Toast.LENGTH_LONG).show();
        } else {
            webView.loadUrl("javascript:javaCallJs(" + "'" + content + "'" + ")");
            setContentView(webView);
        }
    }
}

第四部分,WebView中播放视频
先看下html

<!DOCTYPE html>
<html><head>
    <meta name="keywords" content="ANZO,GAME,LOL,DNF,DOTA,撸啊撸,地下城与勇士,掌游宝,攻略,宝典,模拟器,加点,战报,英雄,最新,最全,最强,视频">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <meta name="format-detection" content="address=no;email=no">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>移动版</title>
    <link rel="shortcut icon" href="http://api.lol.zhangyoubao.com/img/favicon.jpg">
    <!-- CSS测试地址:<link href="http://static.zhangyoubao.com/web_dev/phone_item_400500.css" type="text/css" rel="stylesheet"/> -->
    <link href="RealNetJSCallJavaActivity_files/phone_item_400500.css" type="text/css" rel="stylesheet"> 
</head>
<body>
  <link id="font_size" href="" type="text/css" rel="stylesheet">
<div class="news">
    <div class="mv_name">
         <h1>6.9玛尔扎哈OP套路教程</h1>
      <p>
        <span>作者:掌游宝@掌游宝</span> <!-- 文章生成时间大于 2016-03-24 0:00,则用新规范取作者和来源 -->
        <span class="separ">|</span>
        <span class="sp_time">5月7日 15:00</span>
      </p>
    </div>
    <div class="news_cont" id="news_cont">
                <div class="mv_box">
            <div class="mv_box_div">
                <p><a id="play" tag="video"><img src="RealNetJSCallJavaActivity_files/stop.png"></a></p>
            </div>
            <img src="RealNetJSCallJavaActivity_files/mpic65411h572d6eaf.jpg" width="100%">
        </div>
                <div class="mv_info">
            <span>时长:7分42秒</span><a id="download" class="download un-down" tag="video"></a>
            <div class="clear"></div>
        </div>
                        <div>
        <p>1级单杀小龙,5级单杀峡谷先锋!<br></p>        </div>
    </div>

    <div style="border-top: 1px solid #dfdfdf;margin-top: 8px;text-align: center;">
        <a href="http://m.zhangyoubao.com/down/index" style="padding: 20px 12px;display: block; color: #ff2a46;text-decoration: none;font-size: 15px;">
            <img src="RealNetJSCallJavaActivity_files/reco.png" style="width: 20px;display: inline-block;height: 20px;position: relative;left: 0;top: 4px;margin-right: 8px; " alt="" height="32" width="32">游戏大礼包,点击拆开给你好货</a>
    </div>

            
        <div class="title"><h3>热门评论</h3></div>
    <div class="news_pinglun">
        <img src="RealNetJSCallJavaActivity_files/news_comment_popup_bg.png" style="display: none;">
        <div class="comment-popup">
            <a class="left">
                <span class="left-bg left-bg-unup">顶</span>
            </a>
            <a class="mid">
                <span class="mid-bg">回复</span>
            </a>
            <a class="right2">
                <span class="right2-bg">复制</span>
            </a>
        </div>
                <div class="pl_box" commentid="16633317" userid="16330501" liked="0">
            <div class="avter_box">
                <div class="img-boder-box">
                    <img src="RealNetJSCallJavaActivity_files/defaults.jpg" class="avter_img">
                                    </div>
            </div>
            <div class="pl_info">
                <p>
                    <span class="sp_name">绕灵空v</span>
                    <span class="up">
                                                 <img src="RealNetJSCallJavaActivity_files/news_detail_up_d.png" class="thumbs_up">
                                              <em>142</em>
                    </span>
                  <span class="plus_one">+1</span>
                                    </p>
                <p class="cmt_time"><span class="time">昨天</span></p>
                <p class="text">我就在想无聊的时候马尔炸哈会跟他的小虫子干点什么吗<img class="emoji" src="RealNetJSCallJavaActivity_files/emoji6.png"><img class="emoji" src="RealNetJSCallJavaActivity_files/emoji6.png"><img class="emoji" src="RealNetJSCallJavaActivity_files/emoji6.png"><img class="emoji" src="RealNetJSCallJavaActivity_files/emoji6.png"><img class="emoji" src="RealNetJSCallJavaActivity_files/emoji6.png"></p>
            </div>
            <div class="clear"></div>
        </div>
                <div class="pl_box" commentid="16633326" userid="12241250" liked="0">
            <div class="avter_box">
                <div class="img-boder-box">
                    <img src="RealNetJSCallJavaActivity_files/56cac4bd12241250s.crop_image" class="avter_img">
                                    </div>
            </div>
            <div class="pl_info">
                <p>
                    <span class="sp_name">黄康一鸣</span>
                    <span class="up">
                                                 <img src="RealNetJSCallJavaActivity_files/news_detail_up_d.png" class="thumbs_up">
                                              <em>100</em>
                    </span>
                  <span class="plus_one">+1</span>
                                    </p>
                <p class="cmt_time"><span class="time">昨天</span></p>
                <p class="text">拳头:又有事可以干了</p>
            </div>
            <div class="clear"></div>
        </div>
                <div class="pl_box" commentid="16633457" userid="13835010" liked="0">
            <div class="avter_box">
                <div class="img-boder-box">
                    <img src="RealNetJSCallJavaActivity_files/572d957313835010s.crop_image" class="avter_img">
                                    </div>
            </div>
            <div class="pl_info">
                <p>
                    <span class="sp_name">自行车欧</span>
                    <span class="up">
                                                 <img src="RealNetJSCallJavaActivity_files/news_detail_up_d.png" class="thumbs_up">
                                              <em>96</em>
                    </span>
                  <span class="plus_one">+1</span>
                                    </p>
                <p class="cmt_time"><span class="time">昨天</span></p>
                <p class="text">小龙峡谷先锋:tm一天到晚就会单挑我们</p>
            </div>
            <div class="clear"></div>
        </div>
                <div class="pl_box" commentid="16633383" userid="15432964" liked="0">
            <div class="avter_box">
                <div class="img-boder-box">
                    <img src="RealNetJSCallJavaActivity_files/defaults.jpg" class="avter_img">
                                    </div>
            </div>
            <div class="pl_info">
                <p>
                    <span class="sp_name">下一秒x待續</span>
                    <span class="up">
                                                 <img src="RealNetJSCallJavaActivity_files/news_detail_up_d.png" class="thumbs_up">
                                              <em>56</em>
                    </span>
                  <span class="plus_one">+1</span>
                                    </p>
                <p class="cmt_time"><span class="time">昨天</span></p>
                <p class="text">这是要还没玩就要削弱了</p>
            </div>
            <div class="clear"></div>
        </div>
                <div class="pl_box" commentid="16633321" userid="8856396" liked="0">
            <div class="avter_box">
                <div class="img-boder-box">
                    <img src="RealNetJSCallJavaActivity_files/572da6a98856396s.jpg" class="avter_img">
                                    </div>
            </div>
            <div class="pl_info">
                <p>
                    <span class="sp_name">葡萄丿芒果</span>
                    <span class="up">
                                                 <img src="RealNetJSCallJavaActivity_files/news_detail_up_d.png" class="thumbs_up">
                                              <em>42</em>
                    </span>
                  <span class="plus_one">+1</span>
                                    </p>
                <p class="cmt_time"><span class="time">昨天</span></p>
                <p class="text">能秒大龙?不能还好意思发<img class="emoji" src="RealNetJSCallJavaActivity_files/emoji3.png"><img class="emoji" src="RealNetJSCallJavaActivity_files/emoji3.png"><img class="emoji" src="RealNetJSCallJavaActivity_files/emoji3.png"></p>
            </div>
            <div class="clear"></div>
        </div>
               </div>
       </div>
<script src="RealNetJSCallJavaActivity_files/wqNewsFunc.js"></script>
<script src="RealNetJSCallJavaActivity_files/wqNewsLib.js"></script>
<script>
if(""!="")
var pic = "http://pic.zhangyoubao.com/";
else
var pic = "";
var share_obj = {
    "pic_url":pic,
    "url":"http://lol.zhangyoubao.com/mobiles/shareout/65411",
    "title":"6.9玛尔扎哈OP套路教程",
    "desc":"1级单杀小龙,5级单杀峡谷先锋!"
};
function getShareInfo(uid,channel){
    javascript:android.initShareInfo(share_obj.pic_url,share_obj.url,share_obj.title,share_obj.desc);
}
function getShareInfoIos(){
    return JSON.stringify(share_obj);
}
</script>
<script>
    var emojiBaseUrl="http://static.zhangyoubao.com/public/emoji/";
    var comment_contents=getElementsByClassName('news_pinglun','p','text');
    for(var i=0;i<comment_contents.length;i++){
        comment_contents[i].innerHTML=doEmojiReplace(comment_contents[i].innerHTML);
    }
    var webroot = "/";
    // var ready = "http://static.zhangyoubao.com/lol/img/ready.png";
    //show image on phone
    var objs = document.getElementsByTagName('img');
    var length = objs.length;
    for (i=0; i<length; i++) {
        obj = objs[i];
        obj.onclick = function() {
            if (this.width > 100) {
                var pic_url=this.src.replace('_small','');
                javascript:android.showRawImage(pic_url);
            }
        }
    };
    url = "/mobiles/interActive/65411";
    var videourl = "http://10.0.2.2:8080/yellow.mp4";
    var itemid = "65411";
    var itemdesc = "1级单杀小龙,5级单杀峡谷先锋!";    
    var itempic = "http://avatar.anzogame.com/pic_v1/lol/news/20160507/spic65411h572d6eaf.jpg";
    var itemtitle = "6.9玛尔扎哈OP套路教程";
    var obj_play = document.getElementById('play');
    var obj_download = document.getElementById('download');
    if(obj_play != null) {
        obj_play.ontouchstart = function() {
            this.className = 'inter_click';
            javascript:android.playVideo(itemid, videourl, itemtitle);
            ajaxrequest('/stat/item', "POST", true, {type:'play', id:itemid});
        }
        obj_play.ontouchend = function() {
            this.className = 'inter';
        }
    }
    $(document).on("touchstart", '#download', function() {
        var is_down = $("#download").hasClass('al-down');
        if (false === is_down) {
            javascript:android.offlineVideo(itemid, videourl, itemtitle, itemdesc, itempic);
            ajaxrequest('/stat/item', "POST", true, {type:'download', id:itemid});
        }
    });
    function openReference(itemid){
        javascript:android.openReference(itemid);
    }
    function openShare(){
        javascript:android.openShareSoft();
    }
/*   
    var obj_comments = document.getElementById('comment_div');
    obj_comments.ontouchstart = function(){
    
    }
    obj_comments.ontouchend = function(){
        javascript:android.showComments();
    }
*/
</script>
<script>
function changeToModel() {
        var model = arguments[0] ? arguments[0] : '';
        var night = "http://static.zhangyoubao.com/lol/css/night.css";
        if(model == 'toNight') {
            var oCss = document.createElement("link"); 
            oCss.setAttribute("rel", "stylesheet"); 
            oCss.setAttribute("type", "text/css");  
            oCss.setAttribute("href", night);
            oCss.setAttribute("media", "screen");
            document.getElementsByTagName("head")[0].appendChild(oCss);//绑定
        } else {
            var lists = document.getElementsByTagName("link");
            for ( var i = 0; i < lists.length; i++) {
                if (lists[i].getAttribute("href").indexOf("night.css") != -1) {
                    lists[i].parentNode.removeChild(lists[i]);
                }
            }
        }
    }
    changeToModel();
    </script>
<script>
    /****
      ** 改变字体大小,传入 large || middle || small
    ***/
    function chgFontSize(size) {
        if ("large"===size) {
            $("#font_size").attr("href", "http://static.zhangyoubao.com/lol/css/large_font.css");
        }
        else if ("small"===size) {
            $("#font_size").attr("href", "http://static.zhangyoubao.com/lol/css/small_font.css");
        }
        else {
            $("#font_size").attr("href", "");
        }
    }
    //   chgFontSize("large");
    /****
      ** 隐藏热门评论弹出
    ***/
    function hideAlert() {
        cPopup.css({display:'none'});
    }
</script>
<script>
    window.addEventListener('load', function() {
            var pinglun = document.querySelector(".news_pinglun");
            new FastClick(pinglun);
    }, false);
</script>
<script>
    /****
      ** 顶+1函数,传入参数commentid
    ***/
    function chgUpNum(cid) {
        var floor =  $('.news_pinglun').find('.pl_box').each(function(){
            var cmtId = parseInt($(this).attr('commentid'), 10);
            var cmtClass = $(this).attr('class');
            var isUpd = parseInt($(this).attr('liked'), 10);
            if (cmtId === parseInt(cid, 10) && cmtClass === 'pl_box' && isUpd === 0) {
                var oldNum = parseInt($(this).find('em').text(), 10);
                var newNum = oldNum + 1;
                $(this).find('em').text(newNum);
                $(this).attr('class', 'pl_box already_upd');
            }
        })
    }
  //chgUpNum('36');
</script>
<script>
   var cPopup = $('.comment-popup');
    /****
      ** 触摸滑动事件,弹出的评论隐藏
    ***/
   $(document.body).on("touchmove",function(){
       cPopup.css({display:'none'});
   })
    
    var loginFlag = "no";
    function isLogin(and_lgn) {
        loginFlag = and_lgn;
        console.log('loginFlag:', loginFlag);
    }
 //   isLogin('yes');
    
   $('.pl_box').click(function(e){
        var t = e.target;   // 获取点击区域
        var ptext;
        var commentId;
        var userId;
        var nickname;
        var plus_one;
        
        if ( $(t).attr('class') === 'pl_box' ) {    // 点击区域为'.pl_box'
            commentId = $(t).attr('commentid');
            userId = $(t).attr('userid');
            ptext = $(t).find('.text').text();
            nickname = $(t).find('.sp_name').text();
            
            $('.left').unbind('click').click(function(e){    // 顶
                cPopup.css({display:'none'});
                e.preventDefault();
                e.stopPropagation();
                console.log("commentId=", commentId);
                if ($(".left-bg").hasClass("left-bg-unup") === true && loginFlag=== 'yes') {
                    $(".left-bg").addClass('left-bg-alup').removeClass('left-bg-unup');
                    $(t).find('.thumbs_up').attr('src', 'http://static.zhangyoubao.com/lol/img/news_detail_up_p.png');
                    $(t).find('.plus_one').attr('class', 'plus_one plus_show animated fadeOutUp');
                }
                javascript:android.clickUpOperate(commentId, userId); // 调用 java clickUpOperate()
            });
            $('.mid').unbind('click').click(function(e){ // 回复 
                cPopup.css({display:'none'});
                e.preventDefault();
                javascript:android.reply(ptext, commentId, userId, nickname); // 调用 java 的reply()
            });
            $('.right2').unbind('click').click(function(e){   // 复制
                cPopup.css({display:'none'});
                e.preventDefault(); 
                javascript:android.copyContent(ptext); // 调用 java copyContent()
            });
            
            if ($(t).find('.thumbs_up').attr('src') === 'http://static.zhangyoubao.com/lol/img/news_detail_up_d.png') {
                if ($(".left-bg").hasClass("left-bg-unup") === true) {
                    $(".left-bg").removeClass('left-bg-alup');        
                }
                else {
                    $(".left-bg").addClass('left-bg-unup').removeClass('left-bg-alup');
                }
            }
            else {
                if ($(".left-bg").hasClass("left-bg-alup") === true) {
                    $(".left-bg").removeClass('left-bg-unup');        
                }
                else {
                    $(".left-bg").addClass('left-bg-alup').removeClass('left-bg-unup');
                }
            }
            cPopup.css({top:e.pageY - 53 +'px',display:'block',position:'absolute'});
        } else { // 点击区域为'.pl_box'的子元素
            commentId = $(t).parents('.pl_box').attr('commentid');
            userId = $(t).parents('.pl_box').attr('userid');
            ptext = $(t).parents('.pl_box').find('.text').text();
            nickname = $(t).parents('.pl_box').find('.sp_name').text();
            
            $('.left').unbind('click').click(function(e){    // 顶
                cPopup.css({display:'none'});
                e.preventDefault();
                e.stopPropagation();
                if ($(".left-bg").hasClass("left-bg-unup") === true && loginFlag=== 'yes') {
                    $(".left-bg").addClass('left-bg-alup').removeClass('left-bg-unup');
                    $(t).parents('.pl_box').find('.thumbs_up').attr('src', 'http://static.zhangyoubao.com/lol/img/news_detail_up_p.png');
                    $(t).parents('.pl_box').find('.plus_one').attr('class', 'plus_one plus_show animated fadeOutUp');
                }
                javascript:android.clickUpOperate(commentId, userId);
            });
            $('.mid').unbind('click').click(function(){ // 回复 
                cPopup.css({display:'none'});
                e.preventDefault();
                e.stopPropagation();
                javascript:android.reply(ptext, commentId, userId, nickname); // 调用 java 的reply()
            });
            $('.right2').unbind('click').click(function(){   // 复制
                cPopup.css({display:'none'});
                e.preventDefault();
                e.stopPropagation();               
                javascript:android.copyContent(ptext); // 调用 java copyContent()
            });
            
            if (t.tagName === 'IMG' && $(t).parents().attr('class') === 'pl_img') { // 点击用户头像
                cPopup.css({display:'none'});
                javascript:android.clickUserAvatar(userId); // 调用 java clickUserAvatar()
            } else {
                if ($(t).parents('.pl_box').find('.thumbs_up').attr('src') === 'http://static.zhangyoubao.com/lol/img/news_detail_up_d.png') {
                    if ($(".left-bg").hasClass("left-bg-unup") === true) {
                        $(".left-bg").removeClass('left-bg-alup');        
                    }
                    else {
                        $(".left-bg").addClass('left-bg-unup').removeClass('left-bg-alup');
                    }
                }
                else {
                    if ($(".left-bg").hasClass("left-bg-alup") === true) {
                        $(".left-bg").removeClass('left-bg-unup');        
                    }
                    else {
                        $(".left-bg").addClass('left-bg-alup').removeClass('left-bg-unup');
                    }
                }
                cPopup.css({top:e.pageY - 53 +'px',display:'block',position:'absolute'});
            }
        }
   });
</script>
<script>
    Zepto(function($){
        $('.teams').find('.votes').each(function(){
            var l_val = $(this).find('.l-score').html();
            var r_val = $(this).find('.r-score').html();
            var sum = parseInt( l_val ) + parseInt( r_val );
            var l_per = (l_val / sum) * 100 + '%';
            var r_per = (r_val / sum) * 100 + '%';

            $(this).find('.tc1').css('width', l_per);
            $(this).find('.tc2').css('width', r_per);
        });
    });

    $('.t-wrap').unbind('click').click(function(e){
        var m_id = $(this).attr('m_id');
        console.log($(this).attr('m_id'));
        javascript:android.gotoTarget('match', m_id);
    });
</script>
  <script>
    Echo.init({
      offset: '500',
      throttle: '250'
    });
    </script>


</body></html>
package com.example.html5test;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        /**
         * 注意字段对应,这是html中的代码
         *  javascript:android.playVideo(itemid, videourl, itemtitle);
         */
        webView.addJavascriptInterface(new MyJavaScriptUsed(), "android");
//        webView.loadUrl("file:///android_asset/RealNetJSCallJavaActivity.html");
        webView.loadUrl("file:///android_asset/RealNetJSCallJavaActivity.html");

    }


    private class MyJavaScriptUsed {
        /**
         * 注意字段对应,这是html中的代码
         * javascript:android.playVideo(itemid, videourl, itemtitle);
         * 还要传入相应的参数
         */
        @JavascriptInterface
        public void playVideo(int id, String videoUrl, String title) {
            //把所有的播放器调起来并播放,供用户选择播放器
            Intent intent=new Intent();
            intent.setDataAndType(Uri.parse(videoUrl),"video/*");
            startActivity(intent);
            Log.i("wangdidi", "url:" + videoUrl);
        }
    }
}

html资源下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园2.0是高校信息化建设的新阶段,它面对着外部环境变化和内生动力的双重影响。国家战略要求和信息技术的快速发展,如云计算、大数据、物联网等,为智慧校园建设提供了机遇,同时也带来了挑战。智慧校园2.0强调以服务至上的办学理念,推动了教育模式的创新,并对传统人才培养模式产生了重大影响。 智慧校园建设的解决之道是构建一个开放、共享的信息化生态系统,利用互联网思维,打造柔性灵活的基础设施和强大的基础服务能力。这种生态系统支持快速迭代的开发和持续运营交付能力,同时注重用户体验,推动服务创新和管理变革。智慧校园的核心思想是“大平台+微应用+开放生态”,通过解耦、重构和统一运维监控,实现服务复用和深度融合,促进业务的快速迭代和自我演化。 智慧校园的总体框架包括多端协同,即“端”,它强调以人为中心,全面感知和捕获行为数据。这涉及到智能感知设备、超级APP、校园融合门户等,实现一“码”或“脸”通行,提供线上线下服务端的无缝连接。此外,中台战略是智慧校园建设的关键,包括业务中台和数据中台,它们支持教育资源域、教学服务域等多个领域,实现业务的深度融合和数据的全面治理。 在技术层面,智慧校园的建设需要分期进行,逐步解耦应用,优先发展轻量级应用,并逐步覆盖更多业务场景。技术升级路径包括业务数据化、数据业务化、校园设施智联化等,利用IoT/5G等技术实现设备的泛在互联,并通过人工智能与物联网技术的结合,建设智联网。这将有助于实现线上线下一网通办,提升校园安全和学习生活体验,同时支持人才培养改革和后勤管理的精细化。 智慧校园的建设不仅仅是技术的升级,更是对教育模式和管理方式的全面革新。通过构建开放、共享的信息化生态系统,智慧校园能够更好地适应快速变化的教育需求,提供更加个性化和高效的服务,推动教育创新和人才培养的高质量发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值