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

相关文章
|
8月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
156 0
|
4月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
788 0
|
6月前
|
存储 Linux 容器
【Container App】在容器中抓取网络包的方法
本文介绍在Azure Container App中安装tcpdump抓取网络包,并通过Storage Account上传抓包文件的方法。内容包括使用curl和nc测试外部接口连通性、长Ping端口、安装tcpdump、抓取网络包、以及通过crul命令上传文件至Azure Storage。适用于需要分析网络请求和排查网络问题的场景。
221 1
|
6月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
718 4
|
7月前
|
定位技术 API
《仿盒马》app开发技术分享-- 原生地图展示(26)
上一节我们实现了获取当前用户的位置,并且成功的拿到了经纬度,这一节我们就要根据拿到的经纬度,结合我们其他的知识点来实现地图的展示。
187 4
|
9月前
|
数据采集 JSON 网络安全
移动端数据抓取:Android App的TLS流量解密方案
本文介绍了一种通过TLS流量解密技术抓取知乎App热榜数据的方法。利用Charles Proxy解密HTTPS流量,分析App与服务器通信内容;结合Python Requests库模拟请求,配置特定请求头以绕过反爬机制。同时使用代理IP隐藏真实IP地址,确保抓取稳定。最终成功提取热榜标题、内容简介、链接等信息,为分析热点话题和用户趋势提供数据支持。此方法也可应用于其他Android App的数据采集,但需注意选择可靠的代理服务。
405 11
移动端数据抓取:Android App的TLS流量解密方案
|
8月前
|
API Go 网络架构
【Azure Logic App】特殊的方法来停止正常步骤无法停止的Workflow Job
本文介绍了一种特殊方法,用于解决标准版Logic App在异常情况下无法正常停止的问题。当点击Cancel按钮报错“WorkflowRunCanNotBeCancelled”时,可通过以下步骤解决:进入Logic App的Kudu页面,定位到`C:\home\site\wwwroot`目录下的`host.json`文件,添加`Jobs.SuspendedJobPartition`和`Jobs.CleanupJobPartition`参数,并以大写格式设置值为`&quot;&lt;WORKFLOWID&gt;:2D&lt;RUNID&gt;&quot;`。调整后可成功停止异常Job
252 18
|
3月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
367 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
372 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
821 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡

热门文章

最新文章