Android集成JsBridge实现与H5的交互_android h5 jsbridge_赵彼得的博客-程序员秘密

技术标签: 1024程序员节  开发&集成  

Android项目集成JsBridge的两种方式

AndroidManifest.xml当中的权限添加

 
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

方式一:通过在app的build.gradle中添加依赖

这里推荐一个更加完善的和Js交互的三方库DSBridge

1、在项目根目录的build.gradle文件的repositories下添加代码,如下:

repositories {
    // 确保已经添加,不然无法正常使用依赖
    maven { url "https://jitpack.io" }
}

2、在项目的app的build.gradle文件当中添加依赖 ,如下:

dependencies {
    implementation 'com.github.lzyzsd:jsbridge:1.0.4'
}

 

 3、xml文件当中使用BridgeWebView

<?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=".WebViewImp">

    <com.github.lzyzsd.jsbridge.BridgeWebView
        android:id="@+id/bridgeImp"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

4、代码当中加载url

bridgeImp.loadUrl("https://www.csdn.net/")

方式二:拷贝源代码集成,可以使用腾讯x5WebView替换原生的WebView

注意:需要集成腾讯x5浏览服务jar包到项目lib文件夹,并Add As Library,如下图

Add As Library添加完成之后app的build.gradle文件会自动添加依赖,如下

implementation files('libs\\tbs_sdk_thirdapp_v4.3.0.39_43939_sharewithdownloadwithfile_withoutGame_obfs_20200713_223411.jar')

接下来就是JsBridge相关的Js文件和源码

1、WebViewJavascriptBridge.js下载地址

2、JsBridge源代码下载地址

3、JsBridge示例Demo.html下载地址

WebViewJavascriptBridge.js和Demo.html文件下载完成后拷贝到项目的assets文件夹,如下图,如果没有assets文件夹则可以新建

将JsBridge源代码解压拷贝到项目当中,如图

打开BridgeWebView已经可以看到WebView已经是导入的腾讯的WebView

通信交互代码编写:

和Js相互调用的方法注册

private fun initView() {

        //加载本地assets文件夹当中的html文件
        bridgeSource.loadUrl("file:android_asset/demo.html")
        //注册handler提供给Js调用
        bridgeSource.registerHandler("submitFromWeb", BridgeHandler { data, function ->

            Toast.makeText(this, data, Toast.LENGTH_SHORT).show()
            //如果Js定义的该handler需要返回值,可以使用该回调
            function.onCallBack("回传给Js的数据")
        })

        bridgeSource.callHandler(
            "functionInJs", "安卓数据"
        ) { data -> Toast.makeText([email protected], data, Toast.LENGTH_SHORT).show() }
    }

集成之后的注意事项:

1、使用BridgeWebView加载url时候有的页面显示空白问题,可以尝试添加如下设置:

也就是是否开启本地DOM存储,Android是默认关闭该功能的,所以在有持久化的本地存储数据的H5页面,如果不开启此设置,加载的页面就会不显示。

//设置WebView支持DomStorage存储
webView.getSettings().setDomStorageEnabled(true);

2、进入带有视频播放的H5页面要求不用用户点击播放按钮,自动开始播放视频 

//请求用户手动点击播放设置为false
        getSettings().setMediaPlaybackRequiresUserGesture(false);

3、通过function.onCallBack(String content)方法给H5传递诸如Base64的图片数据因为过长而无法调用成功。

查看加载Js使用的是loadUrl()方法,修改为evaluateJsvascriot()方法

// 必须要找主线程才会将数据传递出去 --- 划重点
        if (Thread.currentThread() == Looper.getMainLooper().getThread()) {
//            this.loadUrl(javascriptCommand);
            this.evaluateJavascript(javascriptCommand, new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String value) {
                    //此处为 js 返回的结果
                }
            });
        }

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nsacer/article/details/109251745

智能推荐

google订阅消息推送_google消息推送_炼气三千年的白起的博客-程序员秘密

谷歌订阅消息推送https://console.cloud.google.com/home/dashboard?project=onreading-300308 中的服务账号最下买的添加秘钥,点击添加秘钥后会下载json文件,放在服务的相关位置 https://console.cloud.google.com/cloudpubsub/topic/list?project=onreading-300308 里面创建主题:并赋予google-play-developer-notificati.

7-16 矩阵行、列、对角线和的最大值 (20分)_求一个3*3矩阵每行、每列及对角线和的最大值。_青衫酒的博客-程序员秘密

求一个3*3矩阵每行、每列及对角线和的最大值。输入格式:在一行输入9个整数。输出格式:在一行输出每行、每列及对角线和的最大值。输入样例:在这里给出一组输入。例如:3 6 5 9 8 2 1 4 5输出样例:在这里给出相应的输出。例如:19原理:题目意思为,求3*3矩阵的每一行的和,每一列的和,主对线元素的和,副对角线的和,最后求出其中的最大值。 我的写法是,把这些和求出来后,放入列表中,最后用max()函数求出最大值。3*3矩阵的下标:(不使用二...

HIDL 简单介绍_lei7143的博客-程序员秘密

Android HAL类型 在此之前的ANDROID版本当中Android HAL没有什么特殊的特殊的,也么有什么分类,但是从android 8.0开始,Android重构了HAL与Android FW之间的联系结构,所以Android HAL会被区分成以下2种类型: 1,Binderized HALs,从名字上应该是指Binder化的HAL,HAL都被写成了binder service,Andr...

tensorflow学习笔记(六):TF.contrib.learn大杂烩_我愛大泡泡的博客-程序员秘密

这一节介绍一个常用的高级API:tf.contrib_learn。这个API使配置、训练和计算变得更简单。现在依然是依照官方教程进行一些学习和补充。而且程序依然会放在github里。而且从这里开始一直是按照最新的tensorflow版本(目前是r1.2)来进行。一、API简略浏览  在写程序之前依然先看一下API中的类、函数和方法。   这里 有???的是因为实在基础太差有的没有接触

windows和linux下读取文件换行符的一个坑——\r\n和\n_你行你上天的博客-程序员秘密

      拿同事的一个windows下的C程序,在Linux下跑,结果不正确。定位为读取.ini配置文件错误。该配置文件是在windows下编辑的,网上查到资料,说是windows和linux下对换行符处理不同导致的。      博客https://blog.csdn.net/stpeace/article/details/45767245说的很详细,主要意思是如下:       Win...

sles11 sp2下安装powerpath_sles-11-sp2_jjwspj的博客-程序员秘密

环境:系统:sles11 sp2磁阵:EMC AX4-5连接:每个服务器2块HBA卡report1:~ # rpm  -ivh  EMCPower.LINUX-5.7.0.00.00-421.SLES11SP2.x86_64.rpmPreparing...                ########################################### [1

随便推点

玩转ADB命令(ADB命令使用大全)_qq_43358922的博客-程序员秘密

此文章内容整合自网络,欢迎转载。我相信做Android开发的朋友都用过ADB命令,但是也只是限于安装应用push文件和设备重启相关,根深的也不知道了,其实我们完全可以了解多一点,有一些不常用的场景我们至少应该知道它可以做到,比如,我们知道adb install 却不知道adb shell am start。前者是用来安装软件,后者用来打开软件,后者的一个使用场景让我对他重视:公司定制Andro...

数据平滑处理之log1p()和exmp1()_np.log1p计算得到结果后怎么复原_CtrlZ1的博客-程序员秘密

今天在做题的时候学到了一点有用的东西,所以这里做个记录分享一下,有关数据预处理的两个函数问题——log1p、expm1优点:在数据预处理时首先可以对偏度比较大的数据用log1p函数进行转化,使其更加服从高斯分布,此步处理可能会使我们后续的分类结果得到一个更好的结果;平滑处理很容易被忽略掉,导致模型的结果总是达不到一定的标准,同样使用逼格更高的log1p能避免复值得问题——复值指一个自变量对...

https://www.acwing.com/problem/content/799/_acwing官网入口_伊利达雷审判官的博客-程序员秘密

#include &lt;iostream&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;const int N = 1e5;#define int long longint a[N],b[N];signed main(){ int n,m; cin&gt;&gt;n&gt;&gt;m; for (int i = 0; i &lt; n; i ++ ) cin.

k-平均算法(k-means算法)(k均值算法)例题_kmeans算法简单例题_笑哈皮的博客-程序员秘密

k-平均算法(k-means算法)(k均值算法)例题簇的数目k=2下表数据表(n=8)行数据

第2章 环境配置_HouJi1的博客-程序员秘密

1.工具安装1Notepad软件的安装和配置 为了让我们写的程序错误看起来更直接,我们安装一款高级记事本软件。 Notepad软件的安装和配置 设置 – 首选项 – 新建 – 默认语言和编码2.环境变量配置 2.1案例说明 为什么要配置 - 程序的编...

SpringCloud之--Quartz2定时器_springcloud 定时器插件 quartz_小达哥的垃圾桶的博客-程序员秘密

/*** * Quartz设置项目全局的定时任务 * @Component注解的意义 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。一般公共的方法我会用上这个注解 */@Componentpublic class ServiceQuartz { @Scheduled(cron = &quot;0 0 0 * * ?&quot;) // 每天0点执行一次 pu...

推荐文章

热门文章

相关标签