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. 2022-2028年中国汽车天线行业市场需求与投资规划分析报告
  2. 字节跳动取消大小周后首次发薪,员工炸锅:薪资普降 17%
  3. center6linux ip设置,centos6固定ip地址
  4. python windows系统调用_python日记第四章:python用os和sys模块进行系统调用
  5. 头文件包含【预处理】(58)
  6. excel中的vlookup函数
  7. python 图片地址_python解码data:image开头的图片地址
  8. jzoj6191-[NOI2019模拟2019.5.31]Exchange【线段树】
  9. 串口服务器端口配置及调试的6大技巧
  10. [解决]电信彩信网关开发错误-SOAP_VERSIONMISMATCH
  11. qq互动视频页面加载失败_互动案例技术分析(2)
  12. 多维数组怎么降维_从零开始的机器学习实用指南(八):降维
  13. Nginx Learning (1)
  14. python语言结构化语言_如何在python中处理结构化语言文件
  15. PHP中各种Hash算法性能比较
  16. 大数据、Hadoop、Hbase介绍
  17. 浅谈人工智能:现状、任务、构架与统一 | 正本清源(看完有新认知)
  18. 中职 计算机 教案,中职计算机基础教案.doc
  19. HKC PG27P3Q 评测
  20. 项目管理提升绩效考核的方法

热门文章

  1. 【网络】路由器和无线路由器就这么配置
  2. 【蓝桥杯JavaB组真题详解】振兴中华(2013)
  3. 用于低分辨率图像和小物体的新 CNN 模块SPD-Conv
  4. MySQL学习6:常用计算函数
  5. Android webview加载H5页面调起微信支付
  6. ps 如何使用仿制图章工具
  7. 漫谈广告机制设计 | 从维纳斯的七个香吻说起
  8. 人机料法环,最全质量管理方法都在这儿!
  9. 深蓝学院-视觉SLAM课程-第1讲笔记
  10. 关于过程改进和能力提升2-体制机制是关键