AgentWeb页面调用原生Android功能

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352