前言:

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

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

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

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

  1. //获取当前Activity,使用H5的方式调用android原生方法,从而启动activity
  2. var main = plus.android.runtimeMainActivity();
  3.  
  4. //invoke: 调用对象(类对象/实例对象)的方法,调用Android原生方法
  5.  
  6. plus.android.invoke('com.pingAnBank.payment.PingAnPaymentHelper', 'StartCallPosPayment', paymentMoney,orderNumber, main, paymentType);
  7.  
  8. //requestCode请求码,即调用startActivityForResult()传递过去的值(一般为int,标志不同的支付类型)
  9. //resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
  10. //data Intent中所携带的数据
  11. main.onActivityResult = function(requestCode, resultCode, data) {
  12.  
  13. //解析android 的activity回传过来的数据
  14. plus.android.importClass(data);
  15. var bundle = data.getExtras();
  16. plus.android.importClass(bundle);
  17.  
  18. //获取activity回传过来的参数值
  19. var amount = bundle.getString("amount"); //支付金额
  20. var traceNo = bundle.getString("traceNo"); //支付流水号
  21.  
  22. }
  1. 调用Android方法说明:plus.android.invoke('com.pingAnBank.payment.PingAnPaymentHelper', 'StartCallPosPayment', paymentMoney,orderNumber, main, paymentType);
    com.pingAnBank.payment.PingAnPaymentHelperAndroid中的内部类名
    StartCallPosPaymentAndroid中的内部类名中的方法名
    paymentMoney,orderNumber, paymentType:方法所需的参数
    main:当前页面的Activity

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

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

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

uni-app代码:

  1. <template>
  2. <view class="content">
  3.  
  4. <view @click="callAndroidWay">android原生方法调用</view>
  5.  
  6. </view>
  7. </template>
  8. <script>
  9. // 导入自己定义的插件js
  10. var elitetyc = require('../plugin.js');
  11. export default {
  12. data() {
  13. return {
  14. plugins: elitetyc
  15. }
  16. },
  17. onLoad() {
  18.  
  19. },
  20. methods: {
  21. callAndroidWay(){
  22. this.plugins.StartCallPosPayment(
  23. "这段文字是uniapp传过来的",
  24. function(result) {
  25. uni.showToast({title:JSON.stringify(result),icon:'none',duration:5000});
  26. },
  27. function(result) {
  28. uni.showToast({title:result,icon:"none",duration:5000});
  29. }
  30. );
  31. }
  32. }
  33. }
  34. </script>

plugin.js插件代码:

  1. ! function(root, factory) {
  2. if (typeof exports == 'object' && typeof module != 'undefined') {
  3. module.exports = factory()
  4. } else if (typeof define == 'function' && define.amd) {
  5. define(factory)
  6. } else {
  7. document.addEventListener('plusready', function(){
  8. // 这里是定义插件的名称
  9. var moduleName = 'elitetyc';
  10.  
  11. root.plus[moduleName] = factory()
  12. },false);
  13. }
  14. }(this, function() {
  15. //在此处定义自己的方法 (这里也是插件的名称,可以看到在后面的)
  16. var _BARCODE = 'elitetyc';
  17. var plugintest = {
  18. // 这里定义了一个名叫StartCallPosPayment的方法,传递三个参数,后面两个是回调函数
  19. StartCallPosPayment: function(num, successCallback, errorCallback) {
  20. var success = typeof successCallback !== 'function' ? null : function(args) {
  21. successCallback(args);
  22. },
  23. fail = typeof errorCallback !== 'function' ? null : function(code) {
  24. errorCallback(code);
  25. };
  26. // 回调ID,后面原生代码中会用到,就好像你调用我,我有结果了,我该知道我把数据返回给谁把?这个id就是这个作用
  27. var callbackID = plus.bridge.callbackId(success, fail);
  28. // 在上面有讲到过,这里需要注意的是前两个参数,第一个参数是插件类别名,后面再原生代码中的dcloud_properties.xml文件中会用到第二个参数(HelloAndroidWay),是android原生代码中的方法名要一致
  29. return plus.bridge.exec(_BARCODE, "HelloAndroidWay", [callbackID, num]);
  30. }
  31. };
  32. return plugintest;
  33. });

Android代码:

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

  1. /**
  2. * 定义一个名为HelloAndroidWay的方法
  3. * @param pWebview
  4. * @param array
  5. */
  6. public void HelloAndroidWay(IWebview pWebview, JSONArray array) {
  7. //获取回调ID
  8. String CallBackID = array.optString(0);
  9. // 获取参数并计算(这里模拟原生处理)
  10. String newstring = "你好,这个字符串来自android原生代码,您传过来的参数是:" + array.optString(1);
  11. // 构建回传参数
  12. JSONArray newArray = new JSONArray();
  13. newArray.put(newstring);
  14. // JSUtil.execCallback(IWebview pWebViewImpl,String pCallbackId,String pMessage,int pStatus,boolean pKeepCallback)
  15. // 参数:
  16. // pWebViewImpl - webview对象
  17. // pCallbackId - 回调方法ID
  18. // pMessage - 回调信息
  19. // pStatus - 回调code值 如:OK、ERROR
  20. // pKeepCallback - js层回调function是否要保存
  21.  
  22. // 第一个参数是当前函数的入参,直接传入, 第二个是根据入参获取的回调id,第三个是回调的数据,是一个json数组
  23. JSUtil.execCallback(pWebview, CallBackID, newstring, JSUtil.OK, false);
  24. }

参考文章:

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

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

WebView简介:

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

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

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

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的相关配置

uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式的更多相关文章

  1. 基于ionic+angulajs的混合开发实现地铁APP

    基于ionic+angulajs的混合开发实现地铁APP 注:本博文为博主原创,转载时请注明出处. 项目源码地址:https://github.com/zhangxy1035/SubwayMap 一. ...

  2. Android混合开发,html5自己主动更新爬过的坑

    如今使用混合开发的公司越来越多,尽管出现了一些新技术,比方Facebook的react native.阿里的weex,但依旧阻挡不了一些公司採用h5的决心.当然,这也是从多方面考虑的选择. 在三年前就 ...

  3. 【Flutter 混合开发】添加 Flutter 到 Android Activity

    Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...

  4. 【Flutter 混合开发】添加 Flutter 到 Android Fragment

    Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...

  5. Android应用开发中三种常见的图片压缩方法

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap com ...

  6. [Hybrid App]--Android混合开发,Android、Js的交互

    AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...

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

    前言: 为什么会写这么一个教程,因为很久之前做过一个对接银行POS我们的系统是使用的H5开发的app应用.但是假如对结果银行相关业务的小伙伴应该都清楚,银行的业务相对于其他的对接方而言安全性比较高,而 ...

  8. ios&h5混合开发项目仿app页面跳转优化

    前言:本人原本是ios开发工程师,但由于现今H5的兴起,行内刮起了一阵混合开发的风气,趁着这股劲,我也学了前端开发,不说研究的多深,但也能胜任日常的开发工作.长话短说,现今的混合开发应该还处于摸索阶段 ...

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

    前言: 在上一章节我们已经讲了如何uni-app离线打包Android平台教程,这一章就该来讲讲如何使用Android Studio打包应用APK提供给Android手机安装使用了. 第一步.首先打开 ...

随机推荐

  1. 高效Tensor张量生成

    高效Tensor张量生成 Efficient Tensor Creation 从C++中的Excel数据中创建Tensor张量的方法有很多种,在简单性和性能之间都有不同的折衷.本文讨论了一些方法及其权 ...

  2. Java中List和Map的区别

    一.List和Map 1.特点 (1).List 1.可以允许重复的对象. 2.可以插入多个null元素. 3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序. 4.常用的实现类有 ...

  3. Python爬虫入门:Urllib parse库使用详解(二)

    文字转载:https://www.jianshu.com/p/e4a9e64082ef,转载内容仅供学习 如有侵权,请联系删除 获取url参数 urlparse 和 parse_qs ParseRes ...

  4. 用MAILX 发送邮件

    使用 25 端口发送 mail 编辑/etc/mail.rc 文件,添加以下信息vi /etc/mail.rc set from=xxx@163.com smtp=smtp.163.comset sm ...

  5. UF_EVAL 曲线或边分析

    Open C UF_EVAL_ask_arc  圆形曲线或边分析,得到曲线或边的信息UF_EVAL_ask_ellipse  椭圆曲线或边分析,得到曲线或边的信息UF_EVAL_ask_hyperbo ...

  6. [.NET大牛之路 001] .NET 其名

    本文来自『.NET大牛之路』星球的分享 大家好,这是 .NET 大牛这路的第 1 篇文章.大家期待已久的课程今天正式开始了.既然我们整个体系课程都将围绕 .NET 展开,那我们今天就先聊一聊 .NET ...

  7. Springboot集成Spring Security实现JWT认证

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 Spring Security作为成熟且强大的安全框架,得到许多大厂的青睐.而作为前后端分离的SSO方案,JWT ...

  8. 一个线上 Maven 诡异问题排查过程

    å. 前言 现在的大部分 Java 应用基本都是通过 Maven 进行组织的,不论是分布式应用还是单体集群应用往往都会通过一个 父 POM 加若干子 POM 完成项目的组织.然而这种多应用多模块的拆分 ...

  9. 入门Kubernetes - .Net Core 运行

    前言: 之前文章 对Kubernetes 的一些基础概念及在windows下的环境搭建,接下来把.Net Core 运行到Kubernetes 中,在实际的操作中,对Kubernetes 的进一步学习 ...

  10. CosId 1.0.0 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...