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:
<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>
<input type="button" value="点击Android被调用" onclick="window.Android.showToast()" />
</body>
</html>
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里的点击事件实现:<br>
<input type="button" value="点击Android被调用" onclick="window.Android.showToast()" />
案例二:H5页面调用Android播放视频
了解了简单调用,下面讲的这个也就简单了:
1_JsCallJavaVideoActivity的布局和实例化控件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.atguigu.androidandh5.JsCallJavaVideoActivity"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
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布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.atguigu.androidandh5.JsCallJavaVideoActivity"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
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页面:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function show(jsondata){
var jsonobjs = eval(jsondata);
var table = document.getElementById("personTable");
for(var y=0; y<jsonobjs.length; 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 = "<a href='javascript:Android.call(\""+ jsonobjs[y].phone+ "\")'>"+ jsonobjs[y].phone+ "</a>";
}
}
</script>
</head>
<body onload="javascript:Android.showcontacts()">
<table border="0" width="100%" id="personTable" cellspacing="0">
<tr>
<td width="30%">姓名</td>
<td align="center">电话</td>
</tr>
</table>
</body>
</html>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android与H5互调
# Android
# H5的互调使用方法
# Android中webView加载H5绑定cookie实例
# Android网页H5 Input选择相机和系统相册
# android 关于webview 加载h5网页开启定位的方法
# Android仿微信加载H5页面进度条
# 解决Android软键盘弹出覆盖h5页面输入框问题
# WebView的介绍与简单实现Android和H5互调的方法
# android调用H5显示加载中效果的示例代码
# Android的WebView与H5前端JS代码交互的实例代码
# Android WebView 不支持 H5 input type="file" 解决方法
# Android实现H5与Native交互的两种方式
# android H5本地缓存加载优化的实战
# 加载
# 将被
# 双击
# 跳转到
# 内嵌
# 拨打电话
# 客户端
# 器中
# 阿福
# 节约成本
# 我是
# 有什么
# 都有
# 也就
# 播放器
# 希望能
# 这个时候
# 详细介绍
# 谢谢大家
# 外包
相关文章:
小建面朝正北,A点实际方位是否存在偏差?
如何制作网站标识牌,动态网站如何制作(教程)?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
北京的网站制作公司有哪些,哪个视频网站最好?
建站之家VIP精选网站模板与SEO优化教程整合指南
高防服务器如何保障网站安全无虞?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何确认建站备案号应放置的具体位置?
一键网站制作软件,义乌购一件代发流程?
如何快速查询域名建站关键信息?
如何高效配置IIS服务器搭建网站?
创业网站制作流程,创业网站可靠吗?
,想在网上投简历,哪几个网站比较好?
建站之星2.7模板快速切换与批量管理功能操作指南
如何在万网主机上快速搭建网站?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何选择服务器才能高效搭建专属网站?
如何打造高效商业网站?建站目的决定转化率
如何通过.red域名打造高辨识度品牌网站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
高防服务器租用指南:配置选择与快速部署攻略
如何获取免费开源的自助建站系统源码?
建站之星如何一键生成手机站?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
如何做网站制作流程,*游戏网站怎么搭建?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
如何使用Golang table-driven基准测试_多组数据测量函数效率
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
C#如何序列化对象为XML XmlSerializer用法
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何获取上海专业网站定制建站电话?
,有什么在线背英语单词效率比较高的网站?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
定制建站流程步骤详解:一站式方案设计与开发指南
如何在阿里云虚拟服务器快速搭建网站?
网站图片在线制作软件,怎么在图片上做链接?
,怎么在广州志愿者网站注册?
建站主机如何选?性能与价格怎样平衡?
山东云建站价格为何差异显著?
盘锦网站制作公司,盘锦大洼有多少5G网站?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
定制建站哪家更专业可靠?推荐榜单揭晓
*请认真填写需求信息,我们会在24小时内与您取得联系。