Android与H5互调详细介绍

微信,微博,微商,QQ空间,大量的软件使用内嵌了H5,这个时候就需要了解Android如何更H5交互的了;有些外包公司,为了节约成本,采用Android内嵌H5模式开发,便于在iOS上直接复用页面,最终解决成本。

为什么学android也要学h5?

Android很多软件都有内嵌H5的,有什么用处、优势?节约成本,提高开发效率。

实现的原理是什么?

本质是:Java代码和JavaScript调用

案例一:Java与Js简单互调

首先,在Android代码中加载H5页面:

private void initWebView() {

webView = new WebView(this);

WebSettings webSettings = webView.getSettings();

//设置支持javaScript脚步语言

webSettings.setJavaScriptEnabled(true);

//支持双击-前提是页面要支持才显示

webSettings.setUseWideViewPort(true);

//支持缩放按钮-前提是页面要支持才显示

webSettings.setBuiltInZoomControls(true);

//设置客户端-不跳转到默认浏览器中

webView.setWebViewClient(new WebViewClient());

//加载网络资源

//webView.loadUrl("http://atguigu.com/teacher.shtml");

webView.loadUrl("file:///android_asset/JavaAndJavaScriptCall.html");

//显示页面

setContentView(webView);

}

JavaAndJavaScriptCall.html:

function javaCallJs(){

document.getElementById("content").innerHTML +=

"
java调用了js无参函数";

}

function javaCallJs(arg){

document.getElementById("content").innerHTML =

("欢迎:"+arg );

}

function showDialog(){

alert("谷粉们你好,我是来自javascript");

}

谷粉

Java调用javaScript:

/**

* Java调用javaScript

* @param numebr

*/

private void login(String numebr) {

webView.loadUrl("javascript:javaCallJs("+"'"+numebr+"'"+")");

setContentView(webView);

}

JavaScript调用Java

/**

* js可以调用该类的方法

*/

class AndroidAndJSInterface{

@JavascriptInterface

public void showToast(){

Toast.makeText(JavaAndJSActivity.this, "我被js调用了", Toast.LENGTH_SHORT).show();

}

}

//与此同时需要在webview当中注册,后面的“Android”与html中的对应:

webView.addJavascriptInterface(new AndroidAndJSInterface(),"Android");

//html里的点击事件实现:

案例二:H5页面调用Android播放视频

了解了简单调用,下面讲的这个也就简单了:

1_JsCallJavaVideoActivity的布局和实例化控件

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.atguigu.androidandh5.JsCallJavaVideoActivity">

android:id="@+id/webview"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

2_实例化控件并且配置

public class JsCallJavaVideoActivity extends Activity {

private WebView webView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_js_call_java_video);

webView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = webView.getSettings();

//设置支持javaScript脚步语言

webSettings.setJavaScriptEnabled(true);

//支持双击-前提是页面要支持才显示

// webSettings.setUseWideViewPort(true);

//支持缩放按钮-前提是页面要支持才显示

webSettings.setBuiltInZoomControls(true);

//设置客户端-不跳转到默认浏览器中

webView.setWebViewClient(new WebViewClient());

//加载网络资源

// webView.loadUrl("http://atguigu.com/teacher.shtml");

webView.loadUrl("file:///android_asset/RealNetJSCallJavaActivity.htm");

}

}

3_加载页面

//加载本地资源

webView.loadUrl("file:///android_asset/RealNetJSCallJavaActivity.htm");

4_参照js代码写Java被调用代码

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';

}

}

5_配置Javascript接口

//设置支持js调用java

webView.addJavascriptInterface(new AndroidAndJSInterface(),"android");

6_Javascript接口类

class AndroidAndJSInterface {

/**

* 该方法将被js调用

* @param id

* @param videoUrl

* @param tile

*/

@JavascriptInterface

public void playVideo(int id,String videoUrl,String tile){

//调起系统所有播放器

Intent intent = new Intent();

intent.setDataAndType(Uri.parse(videoUrl),"video/*");

startActivity(intent);

}

}

案例三:H5页面调用Android拨打电话

1_JsCallJavaCallPhoneActivity布局

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.atguigu.androidandh5.JsCallJavaVideoActivity">

android:id="@+id/webview"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

2_初始化WebView并且配置

private WebView webView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_js_call_java_video);

webView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = webView.getSettings();

//设置支持javaScript脚步语言

webSettings.setJavaScriptEnabled(true);

//支持双击-前提是页面要支持才显示

// webSettings.setUseWideViewPort(true);

//支持缩放按钮-前提是页面要支持才显示

webSettings.setBuiltInZoomControls(true);

//设置客户端-不跳转到默认浏览器中

webView.setWebViewClient(new WebViewClient());

//设置支持js调用java

webView.addJavascriptInterface(new AndroidAndJSInterface(), "Android");

//加载本地资源

// webView.loadUrl("http://atguigu.com/teacher.shtml");

webView.loadUrl("file:///android_asset/JsCallJavaCallPhone.html");

}

3_加载JsCallJavaCallPhone.html页面

//加载本地资源

// webView.loadUrl("http://atguigu.com/teacher.shtml");

webView.loadUrl(file:///android_asset/JsCallJavaCallPhone.html);

4_从java代码传递json数据给javascript

class AndroidAndJSInterface {

/**

* 该方法将被js调用,用于加载数据

*/

@JavascriptInterface

public void showcontacts() {

// 下面的代码建议在子线程中调用

String json = "[{\"name\":\"阿福\", \"phone\":\"18600012345\"}]";

// 调用JS中的方法

webView.loadUrl("javascript:show('" + json + "')");

}

}

5_拨打电话代码

class AndroidAndJSInterface {

/**

* 该方法将被js调用,用于加载数据

*/

@JavascriptInterface

public void showcontacts() {

// 下面的代码建议在子线程中调用

String json = "[{\"name\":\"阿福\", \"phone\":\"18600012345\"}]";

// 调用JS中的方法

webView.loadUrl("javascript:show('" + json + "')");

}

/**

* 拨打电话

* @param phone

*/

public void call(String phone) {

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone));

// startActivity(intent);

}

}

6_h5页面:

Insert title here

function show(jsondata){

var jsonobjs = eval(jsondata);

var table = document.getElementById("personTable");

for(var y=0; y

var tr = table.insertRow(table.rows.length);

var td1 = tr.insertCell(0);

var td2 = tr.insertCell(1);

td2.align = "center";

td1.innerHTML = jsonobjs[y].name;

td2.innerHTML = ""+ jsonobjs[y].phone+ "";

}

}

姓名 电话

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

h5 intent 调起_Android与H5互调详细介绍相关推荐

  1. h5 intent 调起_H5唤醒App方式汇总

    最近在做扫码之后的h5页面唤醒App的功能,牵涉到oemApp等复杂的场景,做下记录 唤醒方式列表URL Schemes chrome intent ios UniversalLink / andro ...

  2. 关于微信公众号的h5页面跳转微信小程序的详细介绍

    简介 关于微信公众号跳转小程序的功能,我也是研究了一整天才弄好的,主要是微信官方文档写的不清楚,百度上的各种文章也各说各的,不过最后还是要相信官网文档,接下来我会一步一步分析,希望对你有帮助,并且最后 ...

  3. Android H5页面调起微信和支付宝付款

    一.前提条件:后端已经生成了支付链接 微信是支持H5在非微信内核的浏览器调起支付的,只是流程很麻烦,需要企业账号申请才行,并且周期较长.微信官方开通说明 申请入口:登录商户平台–>产品中心–&g ...

  4. h5支付不能打开支付宝 ios_IOS H5支付调起微信支付宝客户端问题总结

    IOS H5支付调起微信支付宝客户端问题总结 很早之前公司的支付功能,通过H5去支付宝和微信支付,开始使用的是UIwebView来加载h5页面,当初只有支付宝网页支付形式,所以没有考虑到那么多,现在新 ...

  5. 利用抖音Cookie充值接口提取支付链接,调起原生微信h5支付宝h5支付

    最近开始搞一些个人支付通道的开发,方便个人不用和第三方平台签约就能收款,省去很多流程手续的成本. 然后翻了一下网上并没有太多现成的技术教程,只能自己研究着搞了. 这次要分享的是利用抖音的充值接口,去分 ...

  6. 前端如何在H5页面调起微信支付

    在微信服务号开发的时候经常会遇到微信支付的功能实现,通过实际经验自己总结了一下,前端在H5页面调起微信支付有两种办法,一是利用内置对象,二是通过引用微信的js sdk,亲测都能支付成功,从写法上来看用 ...

  7. 利用抖音Cookie充值接口提取支付链接,个人调起原生微信h5支付宝h5支付

    最近开始搞一些个人支付通道的开发,方便个人不用和第三方平台签约就能收款,省去很多流程手续的成本. 然后翻了一下网上并没有太多现成的技术教程,只能自己研究着搞了. 这次要分享的是利用抖音的充值接口,去分 ...

  8. ae制h5文字动画_AE动画在H5设计中的应用研究

    龙源期刊网 http://www.qikan.com.cn AE 动画在 H5 设计中的应用研究 作者:刘洁羽 来源:<大观> 2018 年第 12 期 摘 要:伴随智能手机和互联网移动终 ...

  9. ML之模型文件:机器学习、深度学习中常见的模型文件(.h5、.keras)简介、h5模型文件下载集锦、使用方法之详细攻略

    ML之模型文件:机器学习.深度学习中常见的模型文件(.h5..keras)简介.h5模型文件下载集锦.使用方法之详细攻略 目录 ML/DL中常见的模型文件(.h5..keras)简介及其使用方法 一. ...

最新文章

  1. Java基于Quartz的定时任务调度服务(一)
  2. 使用 soapUI 测试 REST 服务
  3. 入职阿里5年,他如何破解“技术债”?
  4. 数据库:内联接,外联接,空值和联接
  5. 从零开始编写深度学习库(四)Eigen::Tensor学习使用及代码重构
  6. 将本地已经存在的代码跟github上新建的仓库建立关联,解决“fatal: 'origin' does not appear to be a git repository...”
  7. Linux系统调用表:x86和x86_64
  8. QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)
  9. JS----复制事件(文字选取)
  10. Carthage 安装与使用
  11. GB28181协议——对接摄像机
  12. [Vue]动态加载组件的四种方式
  13. java facet 是什么_eclipse中project facet问题
  14. Thinking in Java---如何正确的终止子线程
  15. 扫地机器人自动回冲工作原理
  16. JMeter 图片上传接口进行压力测试
  17. 新编计算机英语第二版,新编计算机英语-电子教案
  18. python爬表情包_【从零开始写爬虫一】批量下载表情包
  19. 1300:鸡蛋的硬度
  20. 39.html5的动画(animation)

热门文章

  1. linux查看Windows的ip命令,在windows系统和linux系统中查询IP地址命令的不同
  2. JavaWeb期末大作业——图书管理系统
  3. BatchInpaint批量处理图片水印
  4. 融城杯 | 神州信息:金融科技助力乡村振兴
  5. JZOJ4870. 【NOIP2016提高A组集训第9场11.7】涂色游戏
  6. 智能家电APP开发软件有哪些特点?
  7. 滑动事件判断(手指上划、下滑/左滑、右滑)
  8. 抖音将会输给快手?时间会证明一切
  9. 雷达干扰模拟器3-信号侦察
  10. 南京金陵学院专转本计算机,2020江苏专转本必看之:南京大学金陵学院