您的位置:

Android开发中JS调用原生方法的实现

一、WebView中JavaScript与原生的交互方式

在Android开发中,我们常常需要在WebView中展示HTML页面,而HTML页面中经常需要与Native代码进行交互,例如获取本地存储、启动其他应用等操作。WebView支持使用JavaScript与原生进行交互,具体有两种方式:

1、通过addJavascriptInterface()将Java对象注册到JavaScript对象中。

// Java 代码
public class JsInterface {
    private Context mContext;
    
    public JsInterface(Context context) {
        mContext = context;
    }
    
    @JavascriptInterface
    public void showToast(String msg) {
        Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
    }
}

// 将Java对象注册到JavaScript对象中
webView.addJavascriptInterface(new JsInterface(this), "android");

这样,在JavaScript中就可以通过android.showToast()方法调用原生的弹窗操作。

2、通过WebViewClient重写shouldOverrideUrlLoading()方法,在URL中添加协议,使WebView能够识别到执行原生代码的操作。

// Java 代码
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("jsbridge:")) {
            // 解析执行的方法,并调用Native方法
            return true;
        }
        return super.shouldOverrideUrlLoading(view, url);
    }
});

// JavaScript 代码
window.location.href = "jsbridge://showToast?msg='Hello World'";

这样,WebView就能够解析出协议中的方法名和参数,执行原生代码。

二、使用第三方库BridgeWebView实现JavaScript与原生的交互

除了原生提供的交互方式外,我们还可以使用第三方库BridgeWebView来简化这个过程。

BridgeWebView实现了JavaScript与原生代码的自动注册及执行,并提供了更简单的API让开发者调用。

// Java 代码
webView = findViewById(R.id.bridgeWebView);
webView.setDefaultHandler(new DefaultHandler()); // 设置默认的JS处理器

// 注册原生方法并处理调用
webView.registerHandler("showToast", new BridgeHandler() {
    @Override
    public void handler(String data, CallBackFunction function) {
        Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();
    }
});

// JavaScript 代码
bridge.callHandler("showToast", "Hello World", function(response) {
    // 处理回调
});

这样,在JavaScript中就可以通过bridge.callHandler()方法调用原生方法,并且可以处理回调。

三、使用React Native WebView进行原生与JS的交互

在React Native中,WebView提供了与原生代码进行交互的方式。首先在JavaScript中可以创建WebView的onMessage属性,用于监听原生代码发送过来的消息。

// JavaScript 代码
 {
        // 处理原生发送的消息
    }}
/>

  

然后,在原生代码中通过WebView的postMessage方法发送消息给JavaScript。

// Java 代码
webView.postWebMessage(new WebMessage("Hello World"));

React Native WebView还提供了更方便的API来实现JavaScript与原生的交互,例如调用相机、音频、位置等系统服务,并处理设备硬件事件,如按键事件、陀螺仪事件等。

四、总结

以上是Android开发中实现JavaScript与原生代码的交互的几种方式,开发者可以根据具体场景选择适合自己的方法。

Android开发中JS调用原生方法的实现

2023-05-14
js调用android原生代码,js调用Android

本文目录一览: 1、Android AgentWeb Android和Js交互 2、JS怎样调用Android本地原生方法 3、原生APP中js怎样与Android和ios进行交互 4、JS 调用an

2023-12-08
android调用js中的值,js开发android应用

本文目录一览: 1、android怎样调用js文件里面的方法 2、android 怎么调用js方法 3、android如何调用js文件里面的方法并获得返回指呢 4、在android中怎样调用本地js文

2023-12-08
android的js框架(android js引擎)

本文目录一览: 1、Android真的推荐用MVI模式?MVI和MVVM有什么区别? 2、在Android上怎样实现JAVA和JS交互 3、android 混合开发 用什么框架好 4、Android如

2023-12-08
ios原生调用jsapi,ios原生app

本文目录一览: 1、如何用js调用ios 2、iOS - OC 与 JS 交互六种方式总结 3、原生APP中js怎样与Android和ios进行交互 4、如何用JS调用几十万原生API 如何用js调用

2023-12-08
Android JS交互详解

2023-05-21
android支持js吗(android js)

本文目录一览: 1、android中用javascript吗 2、js的框架能用到android开发中吗?比如echart,moment,art template.... 3、安卓手机有没有浏览器支持

2023-12-08
媲美原生动画的Android JSON实现方法

2023-05-16
Android日历开发全方位详解

2023-05-19
使用Android Studio轻松实现无线调试

2023-05-14
Android JSBridge实现原理和使用方法

一、什么是Android JSBridge Android JSBridge是一种可以实现Android应用与H5页面之间相互通信的桥梁技术。通过JSBridge,H5页面可以调用Android应用中

2023-12-08
js中调用java的方法,java调用js代码 实例

本文目录一览: 1、怎么实现javascript中调用java类中的方法 2、如何在JAVASCRIPT调用Android JAVA函数 3、js怎么调用JAVA方法 怎么实现javascript中调

2023-12-08
Android Studio快速开发实用技巧

2023-05-14
提高Android Studio开发效率的方法

2023-05-14
Android Studio NDK详解:加速移动应用的原生

移动应用开发中,各种开发框架和语言多种多样,常用的有Java、Kotlin和Swift等。但有时候,我们需要使用C或C++语言编写一些性能更高的原生代码,以获取更好的用户体验。Android Stud

2023-12-08
Android应用中MD5的加密原理与应用

MD5加密算法是常用的一种密码加密方式,它可以将任意长度的消息通过一个不可逆的算法变为一个128位的长度值,通常用于数据校验、数字签名、密码存储等领域。在Android应用中,MD5加密算法也能够得到

2023-12-08
Android Canvas 开发详解

2023-05-18
提高原生Android系统性能的方法

2023-05-14
Android WebView与JavaScript互动的实

一、WebView类及其内置函数 WebView是Android提供的一个可以用来展示网页的控件,能够很好地兼容各种网页,例如HTML5、js和CSS等。除了展示网页,WebView还可以和JavaS

2023-12-08
Android开发的文本居中实现方法

2023-05-14