现如今,很多Android APP都要与JS进行交互,而WebView就是Android与JS交互的桥梁,日常中最常见Android和JS交互有:APP注册协议,APP里的文章,APP里的活动页,这都是嵌套的H5页面。

Android与JS交互有以下逻辑步骤:

创建WebView

创建Html文件

创建JS文件

WebView调用JS代码

JS代码中调用Android代码

1. 创建WebView

创建一个布局文件,布局文件中包含着一个WebView控件:在activity中获得这个这个WebView控件的实例

mWebView = findViewById(getResources().getIdentifier("web_view", "id", getPackageName()));

2. 创建Html文件

在main文件夹下创建assets文件夹,在其中再创建一个js文件夹, js文件夹就是放js代码,html文件可以直接放在assets文件夹下

创建一个test.html的文件,添加如下代码:

var userAgent = navigator.userAgent || navigator.vendor || window.opera;

console.log(userAgent)

if(userAgent.match(/Android/i)) {

$.getScript("js/android.js")

}

Java-Javascript Interaction In Android

上面的html中做了两件事情:

第一件事情就是:添加了一个jquery的插件,下载好:jquery-2.2.4.min.js放在assets/js目录下

第二件事情就是:判断当前用户所处的运行环境是不是Android下,如果是Android下,去加载js目录下的android.js文件

3. 创建JS文件

接下来我们就是创建android.js文件,代码如下

$(function(){

document.body.style.webkitTouchCallout='none';

document_loaded();

});

function document_loaded() {

console.log("document loaded");

window.JsObject.documentLoaded();

}

function sayHello() {

alert("Hello")

}

function sumToJava(number1, number2){

window.JsObject.onSumResult(number1 + number2)

}

在android.js文件中,我们定义了两个方法:

一个是sayHello方法,这个方法中,是在h5页面中弹出一个对话框,并且系那是syaHello

一个是sumToJava方法,在这里进行number1+number2运算,并且通过:

window.JsObject.onSumResult(number1 + number2)调用Java代码,这里很关键,后面会着重描述,

4. WebView调用JS代码

在activity中调用loadwebView函数,在函数里面,首先是让webView支持js, 再通过字符流的方式将html文件读出来,利用loadDataWithBaseURL将其加载出来。

最后调用了testMethod函数中的webView.loadUrl()函数

@SuppressLint("JavascriptInterface")

private void loadWebView(){

mWebView.getSettings().setJavaScriptEnabled(true);

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){

mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);

}

StringBuilder content = new StringBuilder();

InputStream stream;

try {

stream = this.getAssets().open("test.html");

BufferedReader reader = new BufferedReader(new InputStreamReader(stream));

String line;

while((line = reader.readLine()) != null)

{

content.append(line);

content.append('\n');

}

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

String html = content.toString();

mWebView.addJavascriptInterface(new JsObject(), "JsObject");

mWebView.loadDataWithBaseURL("file:///android_asset/",html,"text/html","utf-8",null);

mWebView.setWebChromeClient(new WebChromeClient());

mWebView.setWebViewClient(new WebViewClient(){

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

testMethod(mWebView);

}

});

}

private void testMethod(WebView webView){

String call = "javascript:sayHello()";

//call = "javascript:sumToJava(1,2)";

webView.loadUrl(call);

}

Android调用JS的关键就是通过这两行代码实现的,就是调用了js代码中的sayHello函数

String call = "javascript:sayHello()";

webView.loadUrl(call);

这样子就是实现了Java代码与Js代码交互的逻辑,运行就会出现一个弹框,上面写着:Hello

如果是调用js代码中的sumToJava()函数,就直接把下面这行注释给干掉:

call = "javascript:sumToJava(1,2)";

5. JS代码调用Android代码

创建一个Java类

public class JsObject {

private final static String TAG = "TAG_JsObject";

@JavascriptInterface

public void onSumResult(int result){

Log.d(TAG, "result = " + result);

}

}

上面在类中添加了一个onSumResult的函数,添加了JavascriptInterface注解, 这个onSumResult()函数就是为js代码提供调用Java代码的接口,那它是怎么使用呢?

就是上面js文件中的sumToJava()函数:

function sumToJava(number1, number2){

window.JsObject.onSumResult(number1 + number2)

}

这里的window后面的JsObject,是怎么来的呢,查看webView的配置,看到:

mWebView.addJavascriptInterface(new JsObject(), "JsObject");

对,就是后面的第二个字符串参数,这里是:JsObject,则调用就是:

window.JsObject.onSumResult(number1 + number2)

如果是:JsObject2, 调用就是:

window.JsObject2.onSumResult(number1 + number2)

好了,本文就到这里。

android和js交互的代码,Android与JS代码交互相关推荐

  1. android webview js 交互框架,自定义android混合框架开发实践1:实现基础andorid和webview交互...

    1. 本地web资源 1.构建assets/web文件夹 2.创建index.html你的html代码 3.使用本地web资源WebView mv = findViewById(...); mv.lo ...

  2. JS获取整个HTML网页代码 - Android 集美软件园 - 博客频道 - CSDN.NET

    JS获取整个HTML网页代码 - Android 集美软件园 - 博客频道 - CSDN.NET JS获取整个HTML网页代码 分类: Android提高 2012-01-12 23:27 1974人 ...

  3. android小球移动代码,Android自定义圆形View实现小球跟随手指移动效果

    本文实例为大家分享了Android实现小球跟随手指移动效果的具体代码,供大家参考,具体内容如下 一. 需求功能 手指在屏幕上滑动,红色的小球始终跟随手指移动. 实现的思路: 1)自定义View,在on ...

  4. qtdesigner怎么实现菜单栏跳转_人人都可写代码-Android零基础编程-app 入口菜单栏实操08...

    欢迎来到人人都可写代码,大家好,我是杨晓华,今天我们的课程内容是项目实操,以智者精选项目为例,编写一个Android app的入口关联菜单栏逻辑. 这是要实现的菜单栏组件展示效果,下面就是教大家如何制 ...

  5. js调用android手写输入法,手机进入页面,js调取软键盘

    mui.plusReady(function(){ //调用软键盘 function open_soft_keyboard(options){ if(plus.os.name == 'iOS'){ s ...

  6. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-7.App Widgets)...

    第7章 App Widgets App Widgets是一个应用程序的微型视图,可以嵌入到其他应用程序(如主屏幕)并且能够定期更新.你可以发布一个应用程序的App Widget,而这些视图称为窗口的用 ...

  7. react native Android端保持APP后台运行--封装 Headless JS

    react native Android端保持APP后台运行--封装 Headless JS 前些日子在做后台下载时踩了后台运行这个大坑,RN官网文档上面在安卓上提供了Headless JS方法,iO ...

  8. android aidl混淆代码,Android代码混淆

    什么是代码混淆 代码混淆就是将代码中的各种元素,如变量,方法,类和包的名字改写成无意义的名字,增加项目反编译后被读懂的难度. Android代码混淆使用ProGuard工具,ProGuard是一个压缩 ...

  9. 第一行代码 Android读书笔记(二)

    第一行代码 Android读书笔记 第三章 软件也要拼脸蛋-UI开发的点点滴滴 常用控件的使用方法 详解4种基本布局 自定义控件 最常用和最难用的控件-ListView 更加强大的滚动控件-Recyc ...

最新文章

  1. 使用了未经检查或不安全的操作_上溪镇开展压痕机使用企业安全生产专项检查...
  2. java设计模式---职责链模式
  3. python的整数类型有几种进制_(一)Python入门-2编程基本概念:08整数-不同进制-其他类型转换成整数...
  4. python实现简单的api接口-简单实现Python调用有道API接口(最新的)
  5. CV之Face Detection:Face Detection人脸检测原理及其常见分类技术
  6. 2020-09-11
  7. 排序(基本概念及分类,直接插入排序和希尔排序)
  8. var obj = eval(result); 解析json
  9. java repaint 无效_java repaint()无效
  10. Shiro的多Realm验证的实现--shiro实现不同身份使用不同Realm进行验证
  11. IOS 四种保存数据的方式
  12. 黑马vue实战项目-(六)商品列表组件的开发
  13. c语言及程序设计基础 pdf,《C语言程序设计基础》.pdf
  14. 2019美赛C题o奖论文结构整理
  15. 从技术小白到收获BAT研发offer,分享我的学习经验和感悟(赠送相关学习资料)
  16. mysql筛选两个不同表的数据
  17. c语言填字母游戏蓝桥杯,蓝桥杯2017国赛JAVAB组 填字母游戏 题解
  18. 多媒体个人计算机软件系统由,多媒体计算机系统是由()组成。
  19. 重度使用开源技术,网易云要用互联网IT打开企业级市场
  20. MMORPG游戏AOI解决方案

热门文章

  1. iOS 即时聊天 音频格式转NSData
  2. 双循环链表(C++)
  3. u-boot 学习系列 1 - SPL
  4. 共祖系数、相关系数和近交系数
  5. 小程序js实现【数字变化动画效果】
  6. 初学前端用代码实现一个网页老虎机游戏
  7. eclipse新建java项目报错:Failed to init ct.sym for ....../jrt-fs.jar
  8. [附源码]计算机毕业设计Python的连锁药店销售管理系统(程序+源码+LW文档)
  9. ​Au 入门系列之三:波形编辑器操作基础
  10. ViewModel是如何在配置更改后继续留存数据的