AgentWeb页面调用原生Android功能

2019-08-20  本文已影响0人  房祥_a7f1

WebView页面调用原生Android页面

1. 权限请求

所有页面的功能均自动根据情况请求权限,无需处理。

2. 文件下载

和PC端h5页面一样,正常链接下载地址即可

<a href="http://58.216.96.29/imtt.dd.qq.com/16891/myapp/channel_79755048_1000047_f71e9dd6885466b57bc4c26a7beec994.apk?mkey=5d5a299e72de9a11&f=0c59&hsr=5848&cip=114.222.188.228&proto=http">下载应用宝</a>

3. 上传文件

  1. 图片
<div style="margin: 0 auto;width: 80%;height: 80%;border:3px solid #41a0f2;margin-top: 50px;overflow: scroll;">
    <!-- 展示图片位置 -->
    <img id="preview" style="display: block;margin: 0 auto;max-width: 60%;margin-top: 20px" />
    <p class="fontBlue ta-c mt5" style="text-align: center;">上传身份证</p>
    <a href="javascript:;" class="file" style="display: block;margin: 0 auto;width: 50%;height: 30px;text-align: center;line-height: 30px;margin-bottom: 20px">选择文件
        <form id="form">
            <input id="file_upload" type="file" name="" id="" accept="*/*," capture="camera" multiple="multiple">
        </form>
    </a>
</div>
$(function() {
    form.reset(); //清除浏览器记录的上次记录
    var file;
    $(form).on("change", "#file_upload", function() {
        var $file = $(this);
        var fileObj = $file[0];
        var windowURL = window.URL || window.webkitURL;
        var dataURL;
        var $img = $("#preview");
        if (fileObj && fileObj.files && fileObj.files[0]) {
            dataURL = windowURL.createObjectURL(fileObj.files[0]);
            $img.attr('src', dataURL);
        } else {
            console.log("else  upload");
            dataURL = $file.val();
            var imgObj = document.getElementById("preview");
            // 两个坑:
            // 1、在设置filter属性时,元素必须已经存在在DOM树中,动态创建的Node,也需要在设置属性前加入到DOM中,先设置属性在加入,无效;
            // 2、src属性需要像下面的方式添加,上面的两种方式添加,无效;
            imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
            imgObj.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = dataURL;
        }
        //输出选中结果
        console.log(this.value);
        alert(this.value);
        //每次选中都保存旧元素,并使用新的控件替换
        $(this).clone().replaceAll(file = this);
    }).submit(function() {
        //提交时把之前保存的旧元素替换回去
         $("#file_upload").replaceWith(file);
        });
});
  1. 视频
<div style="margin: 0 auto;width: 80%;height: 30%;border:3px solid #41a0f2;margin-top: 50px;overflow: scroll;">
    <div id="preview_path" class="fontBlue ta-c mt5" style="text-align: center;color:#000000;">暂无视屏</div>
    <p class="fontBlue ta-c mt5" style="text-align: center;">上传视频</p>
    <a href="javascript:;" class="file" style="display: block;margin: 0 auto;width: 50%;height: 30px;text-align: center;line-height: 30px;margin-bottom: 20px">选择文件
        <form id="form2">
            <input id="file_upload2" type="file" name="" accept="video/*" capture="camera" multiple="multiple">
        </form>
    </a>
</div>
$(function() {
    form.reset(); //清除浏览器记录的上次记录
    $(form2).on("change", "#file_upload2", function() {
        alert(this.value);
        document.getElementById("preview_path").innerText=this.value;
    }).submit(function() {
        //提交时把之前保存的旧元素替换回去
        $("#file_upload2").replaceWith(file);
    });
});
  1. js通信文件上传
<div style="margin: 0 auto;width: 80%;height: 80%;border:3px solid #41a0f2;margin-top: 50px;overflow:scroll;">
    <img id="preview" src="./id.png" style="display: block;margin: 0 auto;max-width: 80%;margin-top: 20px;" />
    <p class="fontBlue ta-c mt5" style="text-align: center;">上传身份证</p>
    <div id="file_upload" href="javascript:;" class="file" style="display: block;margin: 0 auto;width: 50%;height: 25px;text-align: center;line-height: 25px;margin-bottom: 20px">
    选择文件
    </div>
</div>
 bindEvent(window, 'load', function() {
    var ip = document.getElementById("file_upload");
    bindEvent(ip, 'click', function(e) {
        // alert("我是" + this + "元素, 你点击了我!");
        if (window.agentWeb != null && typeof(window.agentWeb) != "undefined") {
            // uploadFile是Android后端定义的方法
            // 在此方法中打开文件选择界面
            // 调用成功后,回调uploadFileResult(objs)方法
            window.agentWeb.uploadFile();
            //alert("Js  调 Android 方法成功");
        } else {
            alert(typeof(window.agentWeb));
        }
    });
});
//这里返回来的是一个 Json 数组 //
function uploadFileResult(objs) {
    // console.log(message);
    //alert(objs);
    //alert("Android 调 Js 方法");
    if (objs == null || typeof(objs) == "undefined" || objs.length == 0) {
        //alert("");
    } else {
        var img = document.getElementById("preview");
        //Android回传的数据
        /*for(var i=0;i<objs.length;i++){  //
        img.src="data:image/png;base64," + objs[i].fileBase64*/
        if (objs[0] == null || objs[0] == 'undefined' || objs[0] == '' || objs[0].fileBase64 == null || objs[0].fileBase64 == 'undefined') {
        } else {
            img.src = "data:image/png;base64," + objs[0].fileBase64;
        }
    }
}

  1. 将input选择的图片显示在浏览器上
    // sourceId:文件源
    // targetId:文件要显示的位置
    function preImg(sourceId, targetId) {
        var url = getFileUrl(sourceId);  //调用getFileUrl
        console.log(url);
        var imgPre = document.getElementById(targetId);
        imgPre.src = url;
    }
    // 从 file 获取文件url
    // ie firefox chrome 有所不同
    function getFileUrl(sourceId) {
        var url;
        console.log(navigator.userAgent);
        if (navigator.userAgent.indexOf("MSIE") >= 1) {
            // IE
            url = document.getElementById(sourceId).value;
        } else if (navigator.userAgent.indexOf("Firefox") > 0) {
            // Firefox
            url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
        } else if (navigator.userAgent.indexOf("Chrome") > 0) {
            // Chrome
            url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));
        }
        return url;
    }

4. JS 与Android交互

//callAndroid 是安卓后端写好的方法
function sendHelloToAndroid() {
    // body...
    //console.log("call android")
    if(window.android!=null&&typeof(window.android)!="undefined"){
        window.android.callAndroid("你好,Android! ");
    }else{
        alert(typeof(window.android));
    }
}
// 安卓回调的方法 如下:
function callByAndroid(){
    console.log("callByAndroid")
    alert("Js收到消息");
    //showElement("Js收到消息-->无参方法callByAndroid被调用");
}
  
function callByAndroidParam(msg1){
    console.log("callByAndroid_param")
    alert("Js收到消息:"+msg1);
    //showElement("Js收到消息-->方法callByAndroidParam被调用,参数:"+msg1);
}
function callByAndroidMoreParams(objs,msg2,msg3){
    console.log("callByAndroid_moreparam")
    alert("Js收到消息:"+"id:"+objs.id.toString()+" name:"+objs.name+" age:"+objs.age.toString()+msg2+msg3);
    //showElement("Js收到消息-->方法callByAndroidMoreParam被调用 , 参数1:"+objs+"  参数2:"+msg2+"  参数3:"+msg3);
}

5. 基础应用交互

<a href="tel:10086">电话</a>
<a href="sms:10086">短信</a>
<a href="mailto:xiaozhongcen@gmail.com">邮件</a>
<a href="agentweb://sample.just.com?url=https://m.jd.com/">打开应用内部页面</a>
<a href="weixin://">打开微信</a>

6. 定位

和PC端h5页面一样,正常引用地图api并在页面上调用定位方法即可

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <!-- 页面引用地图api -->
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=申请的key"></script>
    <title>浏览器定位</title>
</head>
<body>
</body>
</html>
<script type="text/javascript">
    // 地图定位功能,以百度为例
    // 需注意,高德地图不支持 http,如需定位,要将网站升级为https访问
    var geolocation = new BMap.Geolocation();
    geolocation.getCurrentPosition(function(r){
        if(this.getStatus() == BMAP_STATUS_SUCCESS){
            alert('您的位置:'+r.point.lng+','+r.point.lat);
        }
        else {
            alert('failed'+this.getStatus());
        }
    },{enableHighAccuracy: true})
</script>
上一篇下一篇

猜你喜欢

热点阅读