1、Android调用H5(JS)

1.1、新建assets资源目录并将准备好的HTML页面放入其中

(真实项目中HTML页面放在Tomcat中启动)

1.2、初始化webView并加载HTML页面

    @SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})public void initWebView() {//可以加载网页和自定义浏览器webView = new WebView(this);//设置支持JSwebView.getSettings().setJavaScriptEnabled(true);//设置不调用系统浏览器,使用自定义浏览器webView.setWebViewClient(new WebViewClient());//加载网络或本地网页
//        webView.loadUrl("https://www.bilibili.com/video/BV1SW411L7qM?p=3");webView.loadUrl("file:///android_asset/JavaAndJsCallActivity.html");//TODO 1、先初始化webView,此处先不要加载webView
//        setContentView(webView);}

1.3、调用HTML中的JS代码

        webView.post(new Runnable() {@Overridepublic void run() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//调用JS中的javaCallJs方法webView.evaluateJavascript("javascript:javaCallJs(" + " ' "+ name + " ' " + ")", new ValueCallback<String>() {@Overridepublic void onReceiveValue(String s) {//JS返回结果Log.e("TAG", "onReceiveValue: " + s);}});} else {webView.loadUrl("javascript:javaCallJs(" + " ' "+ name + " ' " + ")");}}});//TODO 2、调用完函数后再加载webView(否则会出现HTML中函数未定义的错误)setContentView(webView);

2、JS调用Android代码

2.1、 添加JavascriptInterface

//添加JavascriptInterface后JS可通过Android字段调用JavaAndJsCallInterface类中的任何方法
webView.addJavascriptInterface(new JavaAndJsCallInterface(), "Android");

2.2、编写JS要调用的Android类和Android方法

    /*** JS要调用的Java中的类.*/class JavaAndJsCallInterface {//注意加注释@JavascriptInterfacepublic void toast() {Toast.makeText(JavaAndJsCallActivity.this, "我是Android代码,我被调用了!", Toast.LENGTH_LONG).show();}}

3、完整代码如下

3.1、完整Activity代码

package com.android.h5;import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;/*** Java与JS互调.*/
public class JavaAndJsCallActivity extends AppCompatActivity {private WebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_java_and_js_call);initWebView();Button btnLogin = findViewById(R.id.btn_login);btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {login("android");}});}@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})public void initWebView() {//可以加载网页和自定义浏览器webView = new WebView(this);//设置支持JSwebView.getSettings().setJavaScriptEnabled(true);//设置不调用系统浏览器,使用自定义浏览器webView.setWebViewClient(new WebViewClient());//加载网络或本地网页
//        webView.loadUrl("https://www.bilibili.com/video/BV1SW411L7qM?p=3");webView.loadUrl("file:///android_asset/JavaAndJsCallActivity.html");//添加JavascriptInterface后JS可通过Android字段调用JavaAndJsCallInterface类中的任何方法webView.addJavascriptInterface(new JavaAndJsCallInterface(), "Android");//TODO 1、先初始化webView,此处先不要加载webView
//        setContentView(webView);}private void login(final String name) {webView.post(new Runnable() {@Overridepublic void run() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {webView.evaluateJavascript("javascript:javaCallJs(" + " ' "+ name + " ' " + ")", new ValueCallback<String>() {@Overridepublic void onReceiveValue(String s) {//JS返回结果Log.e("TAG", "onReceiveValue: " + s);}});} else {webView.loadUrl("javascript:javaCallJs(" + " ' "+ name + " ' " + ")");}}});//TODO 2、调用完函数后再加载webView(否则会出现HTML中函数未定义的错误)setContentView(webView);}/*** JS要调用的Java中的类.*/class JavaAndJsCallInterface {@JavascriptInterfacepublic void toast() {Toast.makeText(JavaAndJsCallActivity.this, "我是Android代码,我被调用了!", Toast.LENGTH_LONG).show();}}
}

3.2、完整布局代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".JavaAndJsCallActivity"><Buttonandroid:id="@+id/btn_login"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="登录"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

3.3、完整HTML代码

<html lang="zh-CN">
<p id='p'>hello world</p><script>//JS中的函数function javaCallJs(arg){document.getElementById("p").innerHTML = " 你好!" + arg}
</script><!-- 调用Android中的toast函数 -->
<button onclick="Android.toast()">点击Android被调用</button></html>

Android与H5(JS)互调相关推荐

  1. Android开发之android与JS互调 | Android与H5互调(附源码)

    我们先看下JS代码: <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  2. WebView详解与简单实现Android与H5互调

    为什么要学习Android与H5互调? 微信,QQ空间等大量软件都内嵌了H5,不得不说是一种趋势.Android与H5互调可以让我们的实现混合开发,至于混合开发就是在一个App中内嵌一个轻量级的浏览器 ...

  3. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

    Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...

  4. Android Webview H5 秒开方案实现

    本文首发于微信公众号「玉刚说」 原文链接:Android Webview H5 秒开方案实现 前言 现在许多app都嵌入了H5页面, 然而WebView加载速度慢这个问题却一直影响着用户的体验, 所以 ...

  5. android 和h5交互,Android中与H5的交互

    Android日常开发中,常常会遇到加载H5页面的情况,于是少不了与H5页面的交互问题.具体表现在Android调用H5代码及H5中调用Android代码两种情况. 测试页面 test.png 这里我 ...

  6. android studio运行手机时出错怎么解决_小程序 android ios h5解决方案

    你现在开发android,ios,小程序用什么工具,怎么开发的?还在单个端的开发吗?今天我们主要讨论的是一次开发多端使用的技术,也是这两年比较流行的开发方向.现在的终端太多了,app两个端androi ...

  7. Android 系统(229)---Android与h5交互专题

    [Android开发进阶系列]Android与h5交互专题 1 交互原理 1.1 webview如何加载H5页面 我们都知道在Android中是通过webView来加载html页面的,根据HTML文件 ...

  8. Android和H5交互-基础篇

    hybrid App开发也不是什么新鲜事了,其中native和h5之间的交互则是必不可少的.Android中是如何和H5交互的? 1.webView加载页面 我们都知道在Android中是通过webV ...

  9. Android与H5相互接口调用及Android端接口整理

    近几年随着HTML5的功能越来越强大,H5页面的性能虽然稍差,单其灵活性很高,更新页面成本比原生小很多,一个页面可以被android和ios同时使用开发成本也比较低,所以移动端的开发已经不是单单的原生 ...

最新文章

  1. 单片机会被淘汰吗?单片机现在还有用吗?
  2. dockerfile安装yum_Docker镜像-基于DockerFile制作yum版nginx镜像
  3. [LCS]LCS2005服务器应用程序
  4. java.lang包有哪些类_Java中Lang包的工具类有哪些
  5. html5语义化 兼容,HTML5语义化标签,兼容性问题
  6. Beatiful Soup获取淘宝商品详情
  7. Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)
  8. 如何利用FineBI做财务分析
  9. 登录服务器信息怎么删除,服务器端删除了用户,怎么通知客户端浏览器删除cookie...
  10. hexframe软件(二进制查看文件)
  11. 关于VC6和VC9的区别
  12. 转:使用java生成数字验证码
  13. 收集一些Qt学习网站
  14. 3ds Max 2016的安装和破解
  15. CausalImpact
  16. 【例题】利用伴随矩阵求逆矩阵
  17. 南水北调工程简介及线路图
  18. 各种SKYPE网页代码,SKYPE在线代码
  19. 国内知名公共 DNS 服务器居然有你知道哪些
  20. 机试评判系统评判提交程序后返回结果详细说明

热门文章

  1. 向大家推荐本小虾的个人网站!!!
  2. 关于金山软件杀毒软件卸载后Kingsoft大文件无法删除的问题
  3. xclarity服务器显示脱机怎么办,怎么解决服务器脱机问题
  4. 由于策略,导致磁盘处于脱机状态解决办法
  5. android常见问题
  6. 在HTML中使用css3实现雪人动画效果
  7. VC++深入详解--第二章 掌握C++
  8. selenium之find_elements的妙用
  9. a的visited不起作用问题
  10. 忙等待锁和无忙等待锁