安卓与js交互

这篇具有很好参考价值的文章主要介绍了安卓与js交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言: 因为公司app有安卓端和ios两端,所有想尽可能的节省资源,所以打算把一些资源用h5编写,达到安卓\ios公用一套代码的目的。
首先我要说明,我是安卓开发,所以h5写的不好请忽略
好了,我们正式开始:

首先贴出我的效果图,以这次的app检测升级弹出窗为例

安卓与js交互
这个就是使用h5写的,然后把我的h5代码贴出来

首先是html文件

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script type="text/javascript" src="js.js"></script>

    <style>
		body{
			margin: 0;
		}

	</style>

</head>

<body>


<!-- 内容 -->
<div class="div">
    <div id="content">

        <div id="div_head_img">
            <img id="iv_head" src="app_icon.png" width="50px" height="50px">
        </div>

        <div id="div_title">
            <h3 id="tv_title">新版本邀您体验 </h3>
        </div>

        <div id="div_context">

            <p id="tv_context">您了解内测版本存在一定的功能限制和特殊要求,请您认真阅读《内测用户协议》,如同意请点击“抢先体验”参与内测
                您了解内测版本存在一定的功能限制和特殊要求,请您认真阅读“内测用户协议”,如同意请点击“抢先体验”参与内测
                「禅定模式」QQ音乐陪你一起沉浸式听歌、专注当下,通过“播放</p>

        </div>

        <div id="div_bottom">

            <div id="div_cancel">
                <h5 id="tv_cancel">暂不升级</h5>
            </div>

            <div id="div_confirm">
                <h5 id="tv_confirm">立即升级</h5>
            </div>

        </div>

    </div>
</div>


<script type="text/javascript">
		//提供使用的方法
		//本来是写到js文件中的,但是安卓没有调用成功,所以写到了这里
		function callJS() {
			var _control = document.getElementById("tv_title");
			_control.textContent = 'string'
		}
		//是否显示取消按钮的方法
		function cancelState(state) {
			var _control = document.getElementById("div_cancel");
			if (state) {
				_control.style.display = "flex";
			} else {
				_control.style.display = "none";
			}
		}

		// 更换标题文案的方法
		function setTitle(string) {
			var _control = document.getElementById("tv_title");
			_control.innerHTML = string
		}

		// 更换内容文案的方法
		function setContext(string) {
			var _control = document.getElementById("tv_context");
			var strTemp = string.replace(/&/g,"\n")
            _control.innerHTML = strTemp;
		}

		// 更换取消按钮文案的方法
		function setCancel(string) {
			var _control = document.getElementById("tv_cancel");
			_control.innerHTML = string
		}

		// 更换确认按钮文案的方法
		function setConfirm(string) {
			var _control = document.getElementById("tv_confirm");
			_control.innerHTML = string
		}

	</script>


</body>

</html>

然后是js文件

$(document).ready(function () {

	// 确认升级按钮点击事件
	$("#tv_confirm").on("click", function () {
		//回调给安卓监听
		var context = $(this).text();
		window.jump.myConfirm(context);
	})
	// 取消升级按钮点击事件
	$("#tv_cancel").on("click", function () {
		//回调给安卓监听
		var context = $(this).text();
		window.jump.myCancel(context);
	})

});

然后是css文件

.div {
    position: absolute;
    width: 100%;
    height: 100%;
    /* background-color: rgb(85 0 0 / 50%); */
    background-color: #00000000;
}

#content {
    width: 100%;
    height: 100%;
    /* position: absolute;
    left: 50%;
    top: 40%;
    transform: translate(-50%, -50%);
    background-color: #ffffff; */
}

#iv_head {
    margin-top: 30px;
}

#tv_title {
    margin-top: 30px;
}

/* 顶部图片 */
#div_head_img {
    width: 100%;
    height: 20%;
    margin: 0 auto;
    /* 父元素设置为浮动布局 */
    display: flex;
    /* 父元素下的子元素位于主轴上的位置为:center */
    justify-content: center;
    /* 父元素下的子元素位于交叉轴上的位置为:center */
    align-items: center;
    background-image: linear-gradient(#6ed9ef, #ffffff);
}

/* 标题 */
#div_title {
    width: 100%;
    height: 10%;
    margin: 0 auto;
    display: flex;
    justify-content: center;
    align-items: center;
}

/* 内容 */
#div_context {
    margin-top: 30px;
    width: 100%;
    height: 50%;
    margin: 0 auto;
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    overflow-x: auto;
    white-space: pre-line;
}

/* 底部 */
#div_bottom {
    width: 80%;
    height: 20%;
    margin: 0 auto;
    display: flex;
    justify-content: center;
}

/* 取消 */
#div_cancel {
    width: 50%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
}

/* 确认 */
#div_confirm {
    width: 50%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
}

/* 升级弹出框文本内容 */
#tv_context {
    margin-left: 30px;
    margin-right: 30px;
}

/* 立即升级按钮 */
#tv_confirm {
    color: #8A78FE;
}


接下来正主出场,也就是安卓代码了

我是本地加载的文件

 private void initWebView(Context context, String url, AppCheckEntity.DataDTO data) {
        webView.getSettings().setJavaScriptEnabled(true);//支持javascript
        webView.setWebContentsDebuggingEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setBlockNetworkImage(false);
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
        webView.addJavascriptInterface(new WebEvent(), "jump");
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                //JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用。p
                initJs(context, data);
            }
        });
        webView.loadUrl(url);
    }

	//这些是调用我在js中写的方法,如果不知道在哪里的话,可以复制方法名在html文件中查找一下
	private void initJs(Context context, AppCheckEntity.DataDTO data) {
        try {
            //js方法调用

            //判空并更换app升级信息内容
            String updateDescription = data.getUpdateDescription();
            if (!TextUtils.isEmpty(updateDescription))
                webView.loadUrl("javascript:setContext('" + updateDescription + "')");

            //判断当前升级等级,是否为强提示
            String updateLevel = data.getUpdateLevel();
            if (updateLevel.equals("strong_prompt"))
                webView.loadUrl("javascript:cancelState(false)");
            else
                webView.loadUrl("javascript:cancelState(true)");

            webView.loadUrl("javascript:setTitle('" + context.getString(R.string.app_upgrade_title) + "')");
            webView.loadUrl("javascript:setCancel('" + context.getString(R.string.app_upgrade_no) + "')");
            webView.loadUrl("javascript:setConfirm('" + context.getString(R.string.app_upgrade_yes) + "')");
        } catch (Exception e) {
        }
    }

//最关键的是这个类
 public class WebEvent {
 		//js注解
        @JavascriptInterface
        public void myConfirm(String msg) {
            if (listener != null)
                listener.onRightClickListener();
        }

        @JavascriptInterface
        public void myCancel(String msg) {
            if (listener != null)
                listener.onLeftClickListener();
        }
    }

这个是在js文件中写的方法名
//回调给安卓监听
var context = $(this).text();
window.jump.myCancel(context);

	jump与上方的window后的jump需保持一致
	webView.addJavascriptInterface(new WebEvent(), "jump");
	
	然后我们本类重写的方法名必须与jump后的方法名保持一致myCancel

我给大家来一张图表明一下

安卓与js交互
安卓与js交互文章来源地址https://www.toymoban.com/news/detail-403742.html

到了这里,关于安卓与js交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 所有安卓手机通刷原生系统

    一.手机需解锁bl锁 二.准备好对应手机低包 小米底包下载网址:XiaomiROM.com - 小米 ROM 线刷包, 卡刷包的最新及历史版本下载 三.使用命令刷入谷歌system分区 参考文档1:Redmi K50 刷入类原生系统Pixel Experience及后续优化全流程指南 参考文档2:通用系统映像  |  Android 开发者  | 

    2024年02月06日
    浏览(6)
  • IDEA后台与安卓数据交互

    IDEA后台与安卓数据交互

    实现功能:Android app发ID数据给IDEA 后台,后台根据获取到的ID数据查询数据库并将对应的数据发回客户端显示在app界面 开发工具:IDEA,Android studio,MySQL Android端: (以下为需要新建或者修改的文件,以便新手学习) 客户端运行示例: 代码展示: activity_main.xml 如果项目出现报错

    2024年02月09日
    浏览(5)
  • 关于安卓viewpager实现堆叠卡片交互

    关于安卓viewpager实现堆叠卡片交互

    长江后浪推前浪,无聊的需求一浪接一浪。 最近做到一个关于卡片堆叠的需求,觉得挺有意思,所以特此记录一下。 文末将附上源码链接 首先看设计图: 可以看到,是一个卡片堆叠的效果,关于这种UI的实现,方法有很多,例如用recyclerview,viewpager,甚至说自定义view都可以

    2024年02月11日
    浏览(6)
  • 【Unity】创建一个自己的可交互AR安卓程序

    【Unity】创建一个自己的可交互AR安卓程序

    接着上篇文章的创建一个AR脸部特效安卓程序,这次来创建一个自己的可交互AR程序。同样使用之前的项目,在Assets的Scene文件夹下使用Ctrl+N新建一个Scene(或者File→New Scene),选择AR场景,点击Create创建: 这里由于也是对人脸进行识别,因此也需要使用移动设备的前置摄像头

    2024年02月03日
    浏览(10)
  • vue h5 项目中与 app 安卓 or ios 进行交互 方式, h5与app交互

    vue h5 项目中与 app 安卓 or ios 进行交互 方式, h5与app交互

    vue h5 项目中与 app 安卓 or ios 进行交互 方式, h5与app交互 前端同学可以加我一起交流一起进步 案例描述:需求是 混合开发中,H5页面与原生app安卓或者ios交互(包括,调用app的方法,或者app调用 h5中定义的方法)从而实现交互 项目场景:开发帮助中心页面,帮助中心页面采

    2024年02月11日
    浏览(12)
  • 【安卓软件】KMPlayer-一款完美的媒体播放器 可以播放所有格式的字幕和视频

    【安卓软件】KMPlayer-一款完美的媒体播放器 可以播放所有格式的字幕和视频

    KM Player KM Player是一款未编码的视频播放器,让您无需编码即可方便地播放各种格式的视频,并为您的新体验添加了字幕支持、视频播放速度和手势等功能。 KMPlayer 拥有美观和直观的设计,让您可以更方便地管理和播放视频! 功能 高品质视频播放 您可以无缝播放 4K、UHD、F

    2023年04月21日
    浏览(43)
  • 美国初创公司Rabbit推出口袋AI设备R1;吴恩达课程:使用LangChain.js构建强大的JavaScript应用

    美国初创公司Rabbit推出口袋AI设备R1;吴恩达课程:使用LangChain.js构建强大的JavaScript应用

    🦉 AI新闻 🚀 美国初创公司Rabbit推出口袋AI设备R1,短时间内被抢购一空 摘要 :美国初创公司Rabbit在CES 2024上发布了口袋AI设备R1,这款设备在一天内被抢购一空,售价为199美元。R1具有小巧玲珑的触屏、摄像头和交互滚轮按钮,搭载Rabbit自主研发的操作系统rabbitOS和大型操作

    2024年01月18日
    浏览(11)
  • css如何实现文字两端对齐效果

    css如何实现文字两端对齐效果

    想要实现文字两端对齐效果,可以使用CSS的text-align属性。设置text-align: justify;即可实现文字两端对齐效果。 方法1 : 给元素设置 text-align: justify; text-align-last: justify;并且加上 text-justify: distribute-all-line; 目的是兼容ie浏览器 p{             width: 130px;             te

    2024年02月01日
    浏览(38)
  • RTC晶振两端要不要挂电容

    RTC晶振两端要不要挂电容

    发现 GD32的RTC晶振两端需要挂电容, STM32的RTC晶振两端不需要挂电容。 STM32的RTC晶振两端,不需要挂电容,这样晶振启振很容易,挂大了,却难启动,且温度越低,启动越难。 有人说负载电容为6pF的晶振,就要配6pF的电容,这是错误的。 根据计算公式,6pF的晶振应该匹配5~

    2024年02月14日
    浏览(8)
  • flex布局优化(两端对齐,从左至右)

    flex布局优化(两端对齐,从左至右)

    flex布局是前端常用的布局方式之一,但在使用过程中,我们总是感觉不太方便,因为日常开发中,大多数时候,我们想要的效果是这样的 即左右两端对齐并顶满,小盒子左右间距一致,并且从左至右排布。 今天主要就来讨论,通过css,有几种方式来实现,以及它们的优缺点

    2024年01月16日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包