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

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

前言:

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

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

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

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

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

https://www.html5plus.org/doc/zh_cn/android.html

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

1336199-20210724005612122-346465180.png

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

Android原生插件开发教程:https://nativesupport.dcloud.net.cn/NativePlugin/course/android

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

uni-app代码:

<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插件代码:

! 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); 
} 
}(this, function() { 
//在此处定义自己的方法 (这里也是插件的名称,可以看到在后面的)
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的方法。

/**
   * 定义一个名为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);
  }

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

WebView简介:

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

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

https://blog.csdn.net/qq_24530405/article/details/52067474

相关文章
|
3月前
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
231 0
安卓项目:app注册/登录界面设计
|
1天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
家政服务小程序APP开发,做好上门家政最快的方法是什么?
在家政服务领域,打造成功的平台并非易事。本文分享了三个关键步骤:避免初期盲目投入、采用低成本获客方式、建立有效的阿姨筛选机制。遵循这些方法,可助你避开常见陷阱,成为行业头部平台。
|
3月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
398 0
mqc
|
Android开发
Android开发中,那些让你相见恨晚的方法、类或接口
1.getParent().requestDisallowInterceptTouchEvent(true);剥夺父view 对touch 事件的处理权,谁用谁知道。 2.ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue); 用于根据一个起始颜色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现类似于微信底部栏滑动颜色渐变。
mqc
3539 0
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
25天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
51 19
|
2月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
26天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
54 14
|
29天前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。