uniapp 调用原生(android)安卓的方法并方法

Posted 分享录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uniapp 调用原生(android)安卓的方法并方法相关的知识,希望对你有一定的参考价值。

需要实现的功能:

点击uniapp页面view,传递参数,调用android原生代码,然后原生代码处理数据,返回到uniapp页面

uniapp 代码:

<template>
<view class="content">


<view @click="androidNative">点击调用android原生方法</view>


</view>
</template>
<script>
// 导入自己定义的插件js
// var elitetyc = require('../../common/plugin.js');
export default {data() {return {plugins: elitetyc}},onLoad() {

},methods: {androidNative(){this.plugins.CalcNameAddNumFunction("这段文字是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(){// 修改此处为插件命名 注释---1
var moduleName = 'elitetyc';

root.plus[moduleName] = factory()},false);}}(this, function() {//在此处定义自己的方法 注释---2
var _BARCODE = 'elitetyc';var plugintest = {// 这里定义了一个名叫CalcNameAddNumFunction的方法,传递三个参数,后面两个是回调函数
CalcNameAddNumFunction: function(num, successCallback, errorCallback) {var success = typeof successCallback !== 'function' ? null : function(args) {successCallback(args);},fail = typeof errorCallback !== 'function' ? null : function(code) {errorCallback(code);};// 注释---3
var callbackID = plus.bridge.callbackId(success, fail);// 注释---4
return plus.bridge.exec(_BARCODE, "calcMyNameAddNum", [callbackID, num]);}};return plugintest;});

注释讲解:

  • 注释1:这里是定义插件的名称

  • 注释2:这里也是插件的名称,可以看到在后面的

 

plus.bridge.exec(_BARCODE, "calcMyNameAddNum", [callbackID, num]); // 官方讲解有同步与异步,我这里只用了异步void plus.bridge.execSync( String service, String action, Array<String> args ); service: 插件类别名,对应dcloud_properties.xml的feature name。action: 调用android端插件方法名称。对应java文件的方法名。args:参数列表。 void plus.bridge.exec( String service, String action, Array<String> args ); service: 插件类别名,对应dcloud_properties.xml的feature name。action: 调用android端插件方法名称。对应java文件的方法名。args:参数列表。


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

  • 注释4:在上面有讲到过,这里需要注意的是前两个参数,第一个参数是插件类别名,后面再原生代码中的dcloud_properties.xml文件中会用到
    第二个参数,是android原生代码中的方法名要一致
    3.到这里uniapp页面差不多都编写完成了,我们使用android studio导入sdk中的插件项目示例HBuilder-Integrate-AS

安卓代码:

新建一个java文件,并且继承自:StandardFeature ,我写好的代码如下,功能很简单,主要就是为了完成uniapp调用原生,实际的可以根据自己业务来搞

package io.dcloud.simple; import org.json.JSONArray; import io.dcloud.common.DHInterface.IWebview;import io.dcloud.common.DHInterface.StandardFeature;import io.dcloud.common.util.JSUtil; public class ElitetycPluginTest extends StandardFeature {  /** * 定义一个方法 将自己的名字加上数字进行返回 * @param pWebview * @param array */ public void calcMyNameAddNum(IWebview pWebview, JSONArray array){// 获取回调ID String CallBackID = array.optString(0);// 获取参数并计算(这里模拟原生处理) String newstring = "我是原生代码返回::"+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); }}

这里的方法名calcMyNameAddNum需要和plugin.js中的plus.bridge.exec( String service, String action, Array<String> args ); 方法的action参数一致,必须一模一样

 

修改安卓配置文件:把uniapp打包好的原生代码按官网说的导好,

  • 修改dclould_properties.xml ,在里面新建

<feature name="elitetyc" value="com.example.H5PlusPlugin.ElitetycPluginTest"/>

 

然后点击运行即可  就没了

------------END-----------

更多原创文章请扫描上面(微信内长按可识别二维码访问我的个人网站(https://www.xubingtao.cn),或者打开我的微信小程序: 可以评论以及在线客服反馈问题,其他平台小程序APP请访问:https://www.xubingtao.cn/?p=1675祝大家生活愉快!

以上是关于uniapp 调用原生(android)安卓的方法并方法的主要内容,如果未能解决你的问题,请参考以下文章

adb/安卓/按键精灵/autojs/uniapp/ec打开SchemeURL的方法及常用SchemeURL整理

uniapp原生插件开发-android端-component扩展

写app uni-app比原生安卓快吗

UniApp调用SDK原生接口

UniApp调用SDK原生接口

uniapp原生插件开发问题汇总