Android(H5)互相调用方法
记录一下前面混合开发时很重要的java与js互调方法进行数据交互。
混合开发就需要webview这个控件了
这就很玄学了,哈哈哈
这篇文章https://www.jianshu.com/p/3d9a93c9fea2可以看看
先来设置一下webview。WebSettings用于管理WebView状态配置
public static boolean WebViewSetting(Activity activity, WebView webview) {
final WebSettings webSettings = webview.getSettings();
webSettings.setDomStorageEnabled(true);// 主要是这句
webSettings.setJavaScriptEnabled(true);// 启用js
webSettings.setBlockNetworkImage(false);// 解决图片不显示
webSettings.setSavePassword(false);
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
webSettings.getSettings().setBuiltInZoomControls();//设置是否支持缩放
webSettings.addJavascriptInterface(obj,str);//向html页面注入java对象
webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放
webSettings.setLoadWithOverviewMode(true);// 页面支持缩放:
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webUrl.requestFocusFromTouch(); //如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。
webSettings.setJavaScriptEnabled(true); //支持js
webSettings.setUseWideViewPort(false); //将图片调整到适合webview的大小
webSettings.setSupportZoom(true); //支持缩放 webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
webSettings.supportMultipleWindows(); //多窗口
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
// 让JavaScript可以自动打开windows设置允许JS弹窗
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
// 设置缓存
webSettings.setAppCacheEnabled(false);
// 设置缓存模式,一共有四种模式
// webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
// 设置缓存路径
webSettings.setAppCachePath("");
// 支持缩放(适配到当前屏幕)
webSettings.setSupportZoom(true);
// 将图片调整到合适的大小
webSettings.setUseWideViewPort(true);
// 支持内容重新布局,一共有四种方式
// 默认的是NARROW_COLUMNS
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
// 设置默认字体大小
webSettings.setDefaultFontSize(12);
// 支持缩放
webSettings.setSupportZoom(false);
//设置支持两指缩放手势
webSettings.setBuiltInZoomControls(false);
return true;
}
下面重要的来了
addJavascriptInterface是WebKit的原生API,属于WebView对象的公共方法,用于暴露一个java对象给js,使得js可以直接调用方法。
由于它不安全,4.2后新增了@JavascriptInterface注解
还有个框架:https://github.com/lzyzsd/JsBridge ---这个项目在Java和JavaScript之间架起了桥梁。
现在要开始加载页面了 webview.loadUrl("https://www.baidu.com/");
@SuppressLint("JavascriptInterface")
private void initMixedPage() {
//封装webview
NativeWebViewUtil nativeWebViewUtil = new NativeWebViewUtil();
nativeWebViewUtil.WebViewSetting(this,webview);
//添加Javascript的映射
webview.addJavascriptInterface(this,"android");
webview.loadUrl("https://www.baidu.com");
webview.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
// 加载页面
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 加载结束
webview.evaluateJavascript("javascript:get_android_base("aaa")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.v("Native",value);
}
});
}
});
}
没有回掉可以写null.
第一、Android调用js
有两个很重要的方法setWebChromeClient和setWebClient
setWebChromeClient主要处理解析,渲染网页等浏览器做的事情
WebChromeClient是辅助WebView处理Javascript的对话框等
要调用js就要等webview加载完成后再调用js方法
webview.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
// 加载页面
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 加载结束js 方法 get_android_base
webview.evaluateJavascript("javascript:get_android_base("aaa")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.v("Native",value);
}
});
}
});
javascript代码
接收android发来的数据
function get_android_base(base){
alert(base);
}
第二、js调用Android
javascrip代码
js的一个方法 get_data()
window.android.get_data("mcontrol");
Android代码
@JavascriptInterface
public void get_data(String base){
Log.d(TAG,base);
}
到这里,简单的互调就完成了。
互调就很玄学,总是有各种各样的问题哈哈哈。
后面再记录下腾讯的webview
Android(H5)互相调用方法的更多相关文章
- AllJoyn+Android开发案例-android跨设备调用方法
AllJoyn+Android开发案例-android跨设备调用方法 项目须要涉及AllJoyn开源物联网框架.前面主要了解了一些AllJoyn主要的概念.像总线,总线附件,总线对象,总线接口这种概念 ...
- Webview之H5页面调用android的图库及文件管理
h5页面打开图片管理器 一般页面在pc打开文件管理器是用 type="file"的代码,可是这在android的webview是无效的,必须为webview设定WebChromeC ...
- android 中activity调用远程service中的方法之 aidl的使用
服务端:只有服务,没有界面 1.编写interface文件,复制到 .aidl 文件中,并去掉其中的public 等修饰符.系统会自动在gen目录下生成对应的java文件 (对应本地调用中的接口文件 ...
- Eclipse中Android公共库的正确建立及调用方法
Eclipse中Android公共库的正确建立及调用方法 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享 ...
- 在Android Studio中调用so中的方法
本节用的so是上节用Android Studio创建的so.想在Android Studio中调用so中的方法,需要先引用so.Android Studio中引用so的方法有二种,下面开始介绍. 一 ...
- android与JS交互,互相调用方法,跳转到网页
在main下面New - Folder - Assets Folder,在Assets下面新建一个js_android.html <html><head> <meta h ...
- 安卓端调用h5界面js方法和ios端调用h5界面js方法
备注:本人为h5开发人员,不懂安卓和ios,这是开发小伙伴对接联调的主代码. 1.iOS端调用h5界面js方法: 2.安卓端调用h5界面js方法: @Override protect ...
- 安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)
安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04| 分类: 技术 | 标签:安卓 技术 java | ...
- Android H5调起原生微信或支付宝支付
Android H5调起原生微信或支付宝支付 WebView调用原生微信或支付宝回调:其原理就是在shouldOverrideUrlLoading(final WebView view, String ...
随机推荐
- 【做中学】第一个 Go 语言程序:漫画下载器
原文地址: 第一个 Go 语言程序:漫画下载器: https://schaepher.github.io/2020/04/11/golang-first-comic-downloader 之前学了点 ...
- C#中分布式事务的超时处理问题
事务是个很精妙的存在,我们在数据层.服务层.业务逻辑层等多处地方都会使用到. 在这里我只说下TransactionScope这个微软推荐使用的隐式事务.它是从Framework 2.0开始引入的一个事 ...
- work of weekend 12/12/2015~12/14/2015
part 组员 周末工作+今日工作 工作耗时/h 明日计划 工作耗时/h backup 冯晓云 try the backup plan:brower:rewrite bi ...
- c++类初始化列表初探
目录 1 初始化和赋值 1.1 结论 2 构造函数初始化列表 2.1 结论 3 必须使用初始化列表的情况 3.1 结论 4 成员初始化顺序 5 参考资料 1 初始化和赋值 初始化:创建一个对象并赋予一 ...
- MySQL 50题练习
表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id,c_name,t_id ...
- python数据分析工具——Pandas、StatsModels、Scikit-Learn
Pandas Pandas是 Python下最强大的数据分析和探索工具.它包含高级的数据结构和精巧的工具,使得在 Python中处理数据非常快速和简单. Pandas构建在 Numpy之上,它使得以 ...
- HTTPS之密钥知识与密钥工具Keytool和Keystore-Explorer
1 简介 之前文章<Springboot整合https原来这么简单>讲解过一些基础的密码学知识和Springboot整合HTTPS.本文将更深入讲解密钥知识和密钥工具. 2 密钥知识-非对 ...
- [函数] PHP取二进制文件头快速判断文件类型
一般我们都是按照文件扩展名来判断文件类型,但其实不太靠谱,因为可以通过修改扩展名来伪装文件类型.其实我们可以通过读取文件信息来识别,比如 PHP扩展中提供了类似 exif_imagetype 这样的函 ...
- 2019-2020-1 20199310《Linux内核原理与分析》第五周作业
1.问题描述 在前面的文章中,已经了解了Linux内核源代码的目录结构,并在Oracle VM VirtualBox的Linux环境中构造一个简单的操作系统MenuOS,本文将学习系统调用的相关理论知 ...
- 2019-2020-1 20199310《Linux内核原理与分析》第二周作业
1.问题描述 众所周知,计算机是20世纪最伟大的发明之一,计算机是如何工作的呢?本文主要通过计算机的组成结构和工作原理,以及汇编代码工作过程来进行详细叙述. 2.解决过程 2.1 冯·诺依曼体系结构 ...