Android 关于h5与java交互所遇到的问题

Android进阶之路 - Andorid与H5(JS)交互可能出错的原因与解决方案 在项目开发中我遇到了一些俩端交互的问题!之后查看了挺多博文,但是并没有讲述到我遇见的问题类型!!当然我遇到的问题可以说是疏忽而至,但哪一个错误不是无心过失?故最后在结合自身所遇问题与网上可查问题总结了此篇博文,一点一滴、一分一秒进步吧~ 阅读详情

h5调用java方法,并向java传参。

  • 目前发现是传递不了对象的,如果需要传递对象,要转成json传递
  • 最好传递的参数全是string类型,布尔值用0,1 代替

发现h5无法触发java方法的自查

  • 看有没有加入注解 @JavascriptInterface
  • 遇到一种情况,就是在h5调用java方法里,做了逻辑处理,并调用h5的方法。这时候无法触发。用rxjava切换主线程
     @JavascriptInterface
    fun goToMyTsDevice() {
        Flowable.just("").observeOn(AndroidSchedulers.mainThread()).subscribe {
            if (bleService.isTsHasConnected()) {
                //跳绳已连接,去查询电量
                bleService.writeData(TsBleUtils.writeTsInfo())
            } else {
                val bean = TsDeviceH5Bean("--", "--", "--")
                mWebView.takeH5FuncWithObj(TsConstans.H5_TS_INFO, bean)
            }
        }
    }    

h5调用java方法时,java方法是不能有返回值的。好像是个异步的过程,h5根本收不到return的值。只能调用h5方法传值。最好也有包裹一层线程的切换

java调用h5如果需要传递多个参数,最好的办法是传递一个json,不然的话,调用 val h5Fuc = “javascript:{funcName(’{param}’)” ,引号的问题会让人头大

下面发几个扩展方法

//调用h5的方法
fun X5WebView.takeH5Func(funcName: String) {
    if (funcName.isNullOrEmpty()) {
        BuglyLog.e("X5WebView", "takeH5Func==funcName为空")
    } else {
        val h5Fuc = "javascript:${funcName}()"
        LogUtil.d("java调用h5的方法>>>${h5Fuc}")
        this.loadUrl(h5Fuc)
    }
}

//调用h5的方法携带单个参数
fun X5WebView.takeH5FuncWithParam(funcName: String, param: String) {
    if (funcName.isNullOrEmpty()) {
        BuglyLog.e("X5WebView", "takeH5Func==funcName为空")
    } else {
        val h5Fuc = "javascript:${funcName}(\'${param}\')"
        LogUtil.d("java调用h5的方法>>>${h5Fuc}")
        (this as WebView).loadUrl(h5Fuc)
    }
}


//调用h5的方法携带单个参数
fun X5WebView.takeH5FuncWithObj(funcName: String, param: Any) {
    if (funcName.isNullOrEmpty()) {
        BuglyLog.e("X5WebView", "takeH5Func==funcName为空")
    } else {
        val h5Fuc = "javascript:${funcName}(${Gson().toJson(param)})"
        LogUtil.d("java调用h5的方法>>>${h5Fuc}")
        (this as WebView).loadUrl(h5Fuc)
    }
}

记录下mob shareSdk 微信分享小程序的问题,出现不支持的分享类型的排查

  • 看一下小程序id 一般以gh_开头
  • 查看下有没有设置图片url,一定是网络图片,要不就传null,我看ios就可以,我没试过
  • 一定要用的方法 setWxUserName,setWxPath,setTitle,setText,setImageUrl,setUrl
  • 参考的官方链接1
  • 参考的官方链接2
    public static void weChatToOpenApplets(Context context, String title, String text, int logoId, String appletsID, String appletsPath, String picPathurl) {
        MobSDK.init(context);
        MobSDK.submitPolicyGrantResult(true, null);
        Platform wechat = ShareSDK.getPlatform(Wechat.NAME);
        Wechat.ShareParams SP2 = new Wechat.ShareParams();
        SP2.setWxUserName(appletsID);  //小程序原始ID
        SP2.setWxPath(appletsPath);//分享小程序页面路径
        SP2.setTitle(title);
        SP2.setText(text);
        SP2.setImageUrl(picPathurl);
        SP2.setUrl("https://www.baokaodaxue.com/bkdxapp/");
        SP2.setShareType(Platform.SHARE_WXMINIPROGRAM);
        wechat.share(SP2);
        wechat.setPlatformActionListener(new PlatformActionListener() {
            @Override
            public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
                DialogUtils.showLog(TAG, "onComplete platform:" + platform.getName());

            }

            @Override
            public void onError(Platform platform, int i, Throwable throwable) {
                DialogUtils.showShortToast(context, R.string.ssdk_oks_share_failed);
                DialogUtils.showLog(TAG, "onError platform:" + platform.getName());
                LogUtils.d("分享失败>>" + throwable.getLocalizedMessage());
            }

            @Override
            public void onCancel(Platform platform, int i) {
                DialogUtils.showShortToast(context, R.string.ssdk_oks_share_canceled);
            }
        });
    }

``

Android+H5混合开发实战:WebView数据与界面交互 Android WebView是一个系统组件,允许Android应用展示web页面作为应用的一部分。开发者可以通过WebView来加载、显示网页内容,并且可以实现web页面与应用之间的交云。对于希望将网络内容嵌入到应用程序的开发者来说,这是一个不可或缺的功能。通过本章节的介绍,我们了解了在Android WebView组件中如何添加和处理JavaScript事件监听,以及如何处理复杂的用户交互逻辑。 阅读详情

相关推荐

IEC61850客户端连接实战:CMS vs MMS协议抓包对比与性能初探(基于YX-PIS协议栈)

本文深入探讨了IEC61850客户端连接中CMS与MMS协议的抓包对比与性能优化。通过Wireshark抓包分析、协议栈配置实战和性能基准测试,揭示了两种协议在连接建立、数据交互和性能调优方面的关键差异,为智能电网自动化系统的协议选择提供了实用指南。

weixin_29209805的博客 215

H5端调用Activity的finsh方法无效

原因是JavascriptInterface注解的方法在JavaBridge线程上调用,而不是在UI线程上调用。在处理UI时,您需要使用主UI线程。Android中掉用js方法也是在JavaBridge线程上调用; 解决办法: 在给JavaScript调用的Java方法中,使用Handler在子线程中切换到主线程执行Activity的finish方法即可;或者使用runOnUiThread切换...

ezconn的博客 1021

【遥感数字图像处理(朱文泉)】第四章 变换域处理方法

变换域的处理方法

甜子yu的博客 4308

Java代码调用HTML5中的JS函数算法

随着HTML5的普及,越来越多的APP客户端逻辑开始使用HTML5来构造。甚至有些APP不仅将展示页面使用HTML5布局,还将一些关键字符串的加密算法写在了JS脚本中。一些是客户端自定义的算法,可能一时难以完全读懂直接重写,如果能像smali代码中的方法那样直接调用就好了,所以下面分享几种Java代码直接调用JS方法的。 1.Java代码内写JS方法 简单示例:     // JSFunti

随笔日志 8198

【AI实战派】从零部署YOLOv8:香橙派AIpro边缘端目标检测全流程解析

本文详细解析了在香橙派AIpro边缘设备上从零部署YOLOv8目标检测模型的全流程。内容涵盖硬件开箱、环境搭建、模型转换(ONNX到昇腾OM格式)以及编写Python推理脚本,并提供了性能优化与实战技巧,帮助开发者高效实现实时边缘AI应用。

weixin_29183637的博客 327

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功,附带问题分析详细过程

spark_dev的博客 1911

在 Android WebView 中实现和 JavaScript 的互操作

有两个参数。其中 object 即需要提供给 js 调用的对象。在 Android 4.1.2 (API 16) 以下时,js 可以调用该对象的所有公开方法;在 Android 4.2 (API 17)以上时, js 只能调用添加了注解的公开方法。之所以会有这样的改动,是因为在 API 16 之前可以调用所有公开方法具有安全隐患,例如可以利用 jave 的反射机制实现任意命令的执行。interfaceName 即 js 调用时的接口名称。我们可以通过 webview 的。

sinat_17133389的博客 2407

LT9211 单路mipi转双路mipi芯片,方案成熟,提供技术支持

LT9211 单路mipi转双路mipi芯片

TEL15012949045的博客 5013

android主线程阻塞,javascript – Android主线程阻塞WebView线程

我一直在处理一个问题,在WebView中同步调用Javascript(具有返回值),并试图缩小在何处以及为什么它不工作。似乎是WebView线程阻塞,而主线程正在等待它的响应 – 这不应该是这种情况,因为WebView运行在一个单独的线程。我把这个小样本放在一起(我希望):main.xml:android:orientation="vertical"android:layout_width="fi...

weixin_30199703的博客 549

微信小程序一键登录和临时code用JWT进行微信用户授权

2、跨域进行调用接口时候,唯一标识UnionID和会话密钥 session_key如果还是用的我自己的,会出现无法调用微信服务器接口,就需要将唯一标识和会话密钥换成前端的,才可以,我自己认为这样很不合理,暂时还没有找到原因。2、能够获取到openId,但是也只能获取到openid,无法获取用户的相关信息,经过查阅官网发现,现在微信那边已经将用户信息加密,需要调用提供的接口进行解密然后获取用户数据,问题原因已经找到解决方法,还未即使更改。1、我这是一台电脑实现的前端调用后端接口,不用考虑跨域的问题。

qq_67653492的博客 5712

【无人机对抗】基于matlab无人机红蓝对抗仿真【含Matlab源码 4436期】

无人机红蓝对抗仿真 完整代码,包运行;可提供运行操作视频!适合小白!

Matlab3024528700的博客 1378

h5页面引入java,H5页面调用原生activity

原生的项目页面调用了第三方控件,并且访问页面都正常。现在将H5嵌入原生后,apk入口访问H5页面,从H5页面点击菜单调用原生activity,没有第三方控件的页面可以打开,有第三方控件的页面打开应用白屏闪退。调用原生activity代码如下:var activity = plus.android.runtimeMainActivity();var Intent = plus.android.imp...

weixin_32067105的博客 1203

杰理 JL701N/JL703N USB MIDI 使用教程

摘要:本教程介绍如何在杰理JL701N/JL703N音箱的可视化SDK中配置USB MIDI功能。主要步骤包括:1)启用PC模式;2)修改SDK宏定义启用USB MIDI;3)实现MIDI数据接收处理逻辑;4)调用接口发送MIDI数据;5)使用MIDI-OX测试功能。针对低版本SDK可能出现的设备识别问题,提供了在midi.c文件中添加特定代码行的解决方案。使用前需确保SDK版本达标,并注意备份原始文件。

qq_42014563的博客 1263

Android与H5交互

0000002与H5交互 H5网页中调用安卓java代码、需要在webview控件中添加javascriptInterface contentWebView =(WebView) findViewById(R.id.webview);//启用javascript contentWebView.getSettings().setJavaScriptEnabled(true); content

ai791509157的博客 2341

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Androidh5交互机制

Android与H5交互机制解析 随着移动互联网的迅速发展,Android和H5(HTML5)之间的交互已成为一个不可避免的趋势。在移动应用中,常常需要让原生Android应用与H5页面进行数据传递、事件处理等一系列交互操作。本文将详细解析Android和H5之间的交互机制,并通过实例演示其实现方式。 一、交互机制概述 A...

weixin_37065664的博客 583

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调

项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下。首先,启用JS支持//启用js支持webSettings.setJavaScriptEnabled(true);1. JS调用Native方法// JS调用Native方法mWebView.addJavascriptInterface(new JsInterface(), "android"); /...

weixin_30937427的博客 596

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android与H5互相调用

市面上很多android软件都有内嵌H5的,主要是为了节约成本,提高开发效率,其实现原理主要是通过Java代码和JavaScript代码的互相调用来实现。 Java调用Js 1,webview初始化: private void initWebView() { webView = new WebView(this); WebSetting...

A08110123的博客 476

填个坑 关于Android传值给H5 JS交互 返回Boolean类型给H5接不到问题

@JavascriptInterface public boolean checkNetwork() { } @JavascriptInterface public Boolean getPhoneVoice() throws JSONException { } 这两段代码 下面的接收不到 我也不知道为啥大写的Boolean H5接收不到返回值 反正小写的是可以...

Libertied的博客 680

Android 中JsBridge使用方式

近期在做一个项目,使用的是Native+H5的方式实现的。众所周知的是在Android中,Webview所实现的java与js的交互存在一些安全问题,并且这样的使用方式,没法让一套H5同时适配Android和iOS两个平台,因此,就需要有一个中间组件来实现js与本地的代码的交互,也就是JsBridg 这里介绍下JsBridge第三方库的使用。 github传送门:https://github.com/lzyzsd/JsBridge 效果图如下: 使用作者推荐方式 1.首先在...

yushuangping的博客 4126

H5P.Android 项目常见问题解决方案

H5P.Android 项目常见问题解决方案 1. 项目基础介绍 H5P.Android 是一个开源项目,旨在为 Android 平台提供 HTML5 Plus (H5P) 的运行环境。这个项目主要使用 Java 作为编程语言,并且与 JavaScript 进行交互,以实现丰富的移动应用功能。 2. 新手常见问题及解决步骤 问题一:项目配置问题 问题描述: 新手在导入项目时可能会遇到配置错误,导致...

gitblog_00673的博客 454

android + h5 混合开发 webview 版 小实例

android + h5 混合开发 webview 版 小实例 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了一个关于 android 与 h5 混合开发的小实例。实例涵盖了数据交互、界面交互、JS 调用 Java 以及 Java 调用 JS 的核心功能。 简介 在这个小实例中,我们通过 WebView 实现了 android 与 h5 的混合开发。以下是小实例的主...

gitblog_06724的博客 524

用原生安卓 做一个“套壳”APP、混合开发、安卓H5加壳开发

Hybrid App(混合应用):即为原生 WebView 加 HTML5 网页内容的形式。只需要开发一套 HTML5 业务逻辑,就可以同时运行在不同的平台上,相对比较灵活,内容可以快速更新,开发维护成本较低。最大的缺点就是性能远不及原生应用,交互上也做不到原生的那么自然。 目前非常多的电商或应用APP,只有8Mb这么小,本质就是使用了套壳业务,里面是html5的界面。 1)可以使用 原生安卓+WebView 做一个APP外壳 2)Flutter外壳的生成方法,可以使用插件flutter_webview

weijia3624的专栏 1万+

Android与H5互调

前言 微信,微博,微商,QQ空间,大量的软件使用内嵌了H5,这个时候就需要了解Android如何更H5交互的了;有些外包公司,为了节约成本,采用Android内嵌H5模式开发,便于在IOS上直接复用页面,最终解决成本。 效果图: 还有其他4中情况,也可能会导致JS调用失败,一并总结如下: webView.getSettings().setJavaScriptEnable(true); 设置we...

weixin_34228662的博客 160

android和h5互调

前言 微信,微博,微商,QQ空间,大量的软件使用内嵌了H5,这个时候就需要了解Android如何更H5交互的了;有些外包公司,为了节约成本,采用Android内嵌H5模式开发,便于在IOS上直接复用页面,最终解决成本。 效果图: 还有其他4中情况,也可能会导致JS调用失败,一并总结如下: webView.getSettings().setJavaScriptEnable(true...

heishuai123的博客 370

面试问题总结

背景:做一个问题总结,希望可以给别人一些参考。 偏前端类的问题: 一.安卓的四大组件 这个网上有很多资料,我也会把链接放大下面,大家可以做些参考,这里面我就说下我理解的。 1.1 activity 作用:activity我理解是一个GUI页面,里面可以放置组件,比如说button,select等。 生命周期: oncreate->onstart->onresume-&gt...

gogoboi_jin的博客 867

WebView与JavaScript交互代码混淆

前两天遇到一个问题,直接通过开发工具,在手机上安装Apk是OK的,可以正常运行,但是导出apk包给别人安装使用的时候,就出现问题了。什么问题呢?App里面有嵌入H5页面,页面里面的点击事件不响应,也就是H5里面的JavaScript与本地Java代码交互的时候调用失败。 仔细想了一下这个过程,导出apk和开发工具直接安装的时候,有区别的地方在于应用...

weixin_30307921的博客 112
上一篇: Android 打开系统文件管理器兼容android8,9,10和读取第三方文件管理的文件(微信文件管理)
下一篇: 用py写了个针对淘宝的抢购程序(清空购物车)
泡温泉的咸鱼
博客等级 码龄11年 39粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值