uni-appH5Android混合开发三 || uni-app调用Android原生方法的三种方式

news2024/12/23 12:34:50

前言:

关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式。

uni-app跨平台框架介绍和快速入门

uni-app跨平台框架介绍和快速入门

一、H5+方法调用android原生方法

H5+ Android开发规范官方文档:

HTML5+ API Reference

H5端调用Android activity 并获取activity返回过来的数据:

//获取当前Activity,使用H5的方式调用android原生方法,从而启动activity
var main = plus.android.runtimeMainActivity();

//invoke: 调用对象(类对象/实例对象)的方法,调用Android原生方法        

plus.android.invoke('com.pingAnBank.payment.PingAnPaymentHelper', 'StartCallPosPayment', paymentMoney,orderNumber, main, paymentType);

//requestCode请求码,即调用startActivityForResult()传递过去的值(一般为int,标志不同的支付类型)
//resultCode  结果码,结果码用于标识返回数据来自哪个新Activity
//data Intent中所携带的数据
main.onActivityResult = function(requestCode, resultCode, data) {


//解析android 的activity回传过来的数据
plus.android.importClass(data);
var bundle = data.getExtras();
plus.android.importClass(bundle);

//获取activity回传过来的参数值
var amount = bundle.getString("amount"); //支付金额
var traceNo = bundle.getString("traceNo"); //支付流水号

}
调用Android方法说明:plus.android.invoke('com.pingAnBank.payment.PingAnPaymentHelper', 'StartCallPosPayment', paymentMoney,orderNumber, main, paymentType);
com.pingAnBank.payment.PingAnPaymentHelper:Android中的内部类名
StartCallPosPayment:Android中的内部类名中的方法名
paymentMoney,orderNumber, paymentType:方法所需的参数
main:当前页面的Activity

二、uniapp原生插件调用Android原生方法

Android原生插件开发教程:开发者须知 | uni小程序SDK

实现功能:通过点击uni-app页面中的按钮传递参数,调用android原生代码,然后Android原生代码处理数据,返回到uniapp页面展示。

uni-app代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<template>

    <view class="content">

       

        <view @click="callAndroidWay">android原生方法调用</view>

         

    </view>

</template>

<script>

    // 导入自己定义的插件js

    var elitetyc = require('../plugin.js');

    export default {

        data() {

            return {

                 plugins: elitetyc

            }

        },

        onLoad() {

  

        },

        methods: {

             callAndroidWay(){

              this.plugins.StartCallPosPayment(

                  "这段文字是uniapp传过来的",

                  function(result) {

                      uni.showToast({title:JSON.stringify(result),icon:'none',duration:5000});

                  },

                  function(result) {

                      uni.showToast({title:result,icon:"none",duration:5000});

                  }

              );

             }

        }

    }

</script>

plugin.js插件代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

function(root, factory) { 

if (typeof exports == 'object' && typeof module != 'undefined') { 

    module.exports = factory() 

else if (typeof define == 'function' && define.amd) { 

    define(factory) 

else 

    document.addEventListener('plusready'function(){ 

    // 这里是定义插件的名称

    var moduleName = 'elitetyc';  

     

    root.plus[moduleName] = factory() 

    },false); 

}(thisfunction() { 

//在此处定义自己的方法 (这里也是插件的名称,可以看到在后面的)

var _BARCODE = 'elitetyc'

var plugintest = { 

    // 这里定义了一个名叫StartCallPosPayment的方法,传递三个参数,后面两个是回调函数

    StartCallPosPayment: function(num, successCallback, errorCallback) {

        var success = typeof successCallback !== 'function' null function(args) {

                successCallback(args);

            },

            fail = typeof errorCallback !== 'function' null function(code) {

                errorCallback(code);

            };

      // 回调ID,后面原生代码中会用到,就好像你调用我,我有结果了,我该知道我把数据返回给谁把?这个id就是这个作用

        var callbackID = plus.bridge.callbackId(success, fail);

      // 在上面有讲到过,这里需要注意的是前两个参数,第一个参数是插件类别名,后面再原生代码中的dcloud_properties.xml文件中会用到第二个参数(HelloAndroidWay),是android原生代码中的方法名要一致

        return plus.bridge.exec(_BARCODE, "HelloAndroidWay", [callbackID, num]);

    }

}; 

return plugintest; 

}); 

Android代码:

我们需要在Android项目中新建一个java文件,在对应的类中什么一个HelloAndroidWay的方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/**

   * 定义一个名为HelloAndroidWay的方法

   * @param pWebview

   * @param array

   */

  public void HelloAndroidWay(IWebview pWebview, JSONArray array) {

    //获取回调ID

    String CallBackID = array.optString(0);

    //        获取参数并计算(这里模拟原生处理)

    String newstring = "你好,这个字符串来自android原生代码,您传过来的参数是:" + array.optString(1);

    //        构建回传参数

    JSONArray newArray = new JSONArray();

    newArray.put(newstring);

    //        JSUtil.execCallback(IWebview pWebViewImpl,String pCallbackId,String pMessage,int pStatus,boolean pKeepCallback)

    //        参数:

    //        pWebViewImpl - webview对象

    //        pCallbackId - 回调方法ID

    //        pMessage - 回调信息

    //        pStatus - 回调code值 如:OK、ERROR

    //        pKeepCallback - js层回调function是否要保存

    // 第一个参数是当前函数的入参,直接传入, 第二个是根据入参获取的回调id,第三个是回调的数据,是一个json数组

    JSUtil.execCallback(pWebview, CallBackID, newstring, JSUtil.OK, false);

  }

 参考文章:

uniapp原生插件开发之调用原生方法(android)

三、WebView简单实现Android与H5互调

WebView简介:

  要实现Android与H5互调,WebView是一个很重要的控件,WebView可以很好地帮助我们展示html页面,所以有必要先了解一下WebView。

关于使用WebView简单实现Android与H5互调的参考文章参考下面文章:

WebView详解与简单实现Android与H5互调_webview实现h5横屏-CSDN博客

uni-app&H5&Android混合开发教程汇总

uni-app&H5&Android混合开发一 || 最全面的uni-app离线打包Android平台教程

uni-app&H5&Android混合开发二 || 使用Android Studio打包应用APK

uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式

【新手指南】Android Studio中应用App的相关配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32开发三、GPIO

部分引脚可容忍5V&#xff0c;容忍5V的意思是:可以在这个端口输入5V的电压&#xff0c;也认为是高电平 但是对于输出而言&#xff0c;最大就只能输出3.3V&#xff0c;因为供电就只有3.3V 具体哪些端口能容忍5V&#xff0c;可以参考一下STM32的引脚定义 不带FT的&#xff0c;就只…

Java通过百度地图API获取定位-普通IP定位

项目中有一个登录邮箱提醒的功能&#xff0c;需要根据IP地址获取定位信息&#xff0c;从而更好地提示用户账号登录的所在地。为此&#xff0c;花费了一些时间来实现这个功能。 在CSDN搜索了一下&#xff0c;发现关于获取定位的文章说明都不够详细&#xff0c;于是决定自己创作一…

CAP与BASE分布式理论

一、分布式理论 1.CAP理论 CAP理论是说对于分布式数据存储&#xff0c;最多只能同时满足一致性&#xff08;C&#xff0c;Consistency&#xff09;、可用性&#xff08;A&#xff0c; Availability&#xff09;、分区容忍性&#xff08;P&#xff0c;Partition Tolerance&…

编程式导航

目录 一、问题引入 二、基本跳转 1.path路径跳转&#xff08;简易方便&#xff09; 2.name命名路由跳转&#xff08;适合path路径长的场景&#xff09; 三、路由传参 1.path路径跳转传参 &#xff08;1&#xff09;query传参 &#xff08;2&#xff09;动态路由传参 2.…

揭秘VSCode魔法工具箱:HTML5 CSS3超强插件集合 + Css Reset与Normalize.css的终极对决

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍HTML5、CSS3常用的vscode插件&#x1f34e;1 HTML 标签同步重命名– Auto…

每日一题1:从表中创建DataFrame

本文通过一道题来对创建DataFrame知识点进行拓展&#xff0c;方便以后直接调用。下面先对知识点进行介绍&#xff1a; 在Python中&#xff0c;使用pandas库创建DataFrame有多种方法&#xff0c;这里列举几种常见的创建方式&#xff1a; 一、常见创建方式 1. 从二维列表创建 …

Android之给Button上添加按压效果

一、配置stateListAnimator参数实现按压效果 1、按钮控件 <Buttonandroid:id"id/mBtnLogin"android:layout_width"match_parent"android:layout_height"48dp"android:background"drawable/shape_jfrb_login_button"android:state…

融知财经:期货和现货的区别是什么?哪个风险大?

期货和现货在交易对象等方面存在明显的区别。期货交易是一种衍生金融工具&#xff0c;主要用于价格发现、风险管理和投机&#xff0c;而现货交易则是商品和服务的实际买卖。在选择进行期货交易还是现货交易时&#xff0c;投资者需要根据自己的需求和市场情况来决定。 期货和现货…

如何访问远程MySQL数据库服务器?

访问远程MySQL数据库服务器是一项常见的任务&#xff0c;它允许我们在不同的地点通过网络连接到MySQL服务器&#xff0c;并进行数据库管理和数据处理操作。我们将重点介绍一种名为【天联】的组网技术&#xff0c;该技术提供了一系列优势&#xff0c;使远程访问MySQL数据库服务器…

javac编译web项目中的src

对于单个文件的且不引用其他类文件的java源码用javac编译大家都很熟悉即 javac hello.java, 服务器未安装idea&#xff0c;现在在服务器里面直接编译src目录 1 idea项目结构如下 2 web目录为最终部署的代码 WEB-INF下面没有 classes 目录 3 使用javac 编译src javac -encod…

Nachi那智不二越机器人维修技术合集

一、Nachi机械手维护基础知识 1. 定期检查&#xff1a;定期检查机器人的各个部件&#xff0c;如机械手伺服电机、机器人减速器、机械臂传感器等&#xff0c;确保其运行正常。 2. 清洁与润滑&#xff1a;定期清洁Nachi工业机器人表面和内部&#xff0c;并使用合适的润滑油进行润…

在线旅游网站,基于 SpringBoot+Vue+MySQL 开发的前后端分离的在线旅游网站设计实现

目录 一. 前言 二. 功能模块 2.1. 登录界面 2.2. 管理员功能模块 2.3. 用户功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;旅游网站当然…

OpenHarmony usb打开报错“usb fail error code = -3, error msg = LIBUSB_ERROR_ACCESS”

一、前言&#xff1a;最近公司项目需求&#xff0c;定位要求使用国产系统&#xff0c;国产系统无非就是 统信os &#xff0c;麒麟OS, 还有这两年比较热的 OpenHarmony。于是&#xff0c;老板要求公司产品适配OpenHarmony , 跟上时代步伐。 二、在开发中使用 usb 通讯时&#x…

党务政务服务热线|基于SSM的党务政务服务热线平台(源码+数据库+文档)

目录 基于SprinBootvue的党务政务服务热线平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; …

Ubuntu搭建VsCode C++ 开发环境

Ubuntu搭建VsCode C 开发环境 安装VS Code 使用命令来安装VS Code&#xff1a;他会下载vscode的最新版本。 sudo snap install --classic code如果不使用命令 的方式 在官网下载vscode安装包&#xff08; 后缀为 .deb的包 &#xff09;之后&#xff08;可以选择版本 &#x…

克服 Prometheus 单值数据模型的局限性:GreptimeDB 的新路径

引言 Prometheus 已经成为监控和报警生态系统的基石&#xff0c;在高效、直接地处理实时指标&#xff08;Metric&#xff09;方面有着强大的表现。Prometheus 的核心是一个包含单个值和一系列标签的数据模型。这种设计在提升简单性和适应性的同时&#xff0c;也带来了一些挑战…

HarmonyOS NEXT星河版之美团外卖点餐功能实战(下)

文章目录 一、购物车逻辑1.1 购物车及加减菜1.2 菜品的加减---方案一1.3 菜品的加减---方案二1.4 购物车View完善1.5 清空购物车1.5 购物车数量和价格 二、小结 一、购物车逻辑 1.1 购物车及加减菜 在utils目录下新建CartStore.ets文件&#xff0c;如下&#xff1a; import …

Dubbo2.x迁移3.x过程及原理

Dubbo2.x迁移3.x过程及原理 1.Dubbo2.x迁移3.x1.1 快速升级步骤1.2 Provider 端升级过程详解1.2.1 双注册带来的资源消耗 1.3 Consumer 端升级过程1.3.1 APPLICATION_FIRST策略1.3.2 双订阅带来的资源消耗1.3.3 消费端更细粒度的控制 1.4 迁移状态的收敛1.4.1 不同的升级策略影…

一键局域网共享工具

一键局域网共享工具&#xff1a;实现文件快速共享的新选择 在数字化时代&#xff0c;文件共享已成为我们日常工作和生活中的重要需求。无论是在家庭还是在办公环境中&#xff0c;我们经常需要在不同的设备之间传输文件。为了满足这一需求&#xff0c;一键局域网共享工具应运而…

Leetcode—239. 滑动窗口最大值【困难】

2024每日刷题&#xff08;132&#xff09; Leetcode—239. 滑动窗口最大值 算法思想 用vector会超时的&#xff0c;用deque最好&#xff01; 实现代码 class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {deque<int> …