uniapp调用原生android插件传递回调函数

在混合开发中,uniapp调用android原生的方法,原生方法在处理过程中无法同步给js返回数据,异步执行,那么可以使用传递uniapp回调函数实现

一、编写android的方法

复制代码
public class MyLibraryPlugin  extends UniModule {
    
    private UniJSCallback mCallback;

    /**
     * @param args
     * @param callback  回调函数
     *  UniJSCallback用于js和java交互的类
     */
    @UniJSMethod(uiThread = true)
    public void  doTaskAsync(String args, UniJSCallback callback) {
        this.mCallback = callback;
        obtainSyncResult();
    }

    /**
     * 模拟耗时的异步任务
     */
    public void obtainSyncResult() {
        if (mCallback != null) {
            new Thread(() -> {
                try {
                    Thread.sleep(5000);
                    JSONObject res = new JSONObject();
                    res.put("code", "200");
                    res.put("data", "这是原生方法调用uni的回调函数的参数");
                    ///这是至关重要的一步,执行回调,回调参数只支持字符串,无法传递对象
                    mCallback.invoke(res.toString());
                    ///mCallback.invokeAndKeepAlive(res.toString());
                } catch (Exception e) {
                    e.fillInStackTrace();
                }
            }).start();
        }
    }
}

二、uniapp调用插件异步任务

复制代码
<template>
	<view class="content">
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
		<view class="text-area" style="margin-top: 20px;">
			<button @click="testCallBack()">测试回调接口</button>
		</view>		
	</view>
</template>

<script>
	export default {
		data() {
			return { 
				title:"uniapp调用原生接口传递回调函数Demo"
			}
		},
		methods: {
          testCallBack(){
			    const  libPlugin =  uni.requireNativePlugin("MyLibraryPlugin");
                  传入匿名回调函数
			    libPlugin.doTaskAsync("uniappArgs", (ret) => {
					console.log("clickNative---ret-->" + JSON.stringify(ret))
				});
		  },
		}
	}
</script>
相关推荐
编程圈子14 分钟前
操作系统学习14 IDT + PIC + 键盘中断
android·学习·计算机外设
齊家治國平天下7 小时前
Android 14 Vehicle HAL (VHAL) 设计与实现深度解析
android·aaos·carservice·车载开发·android 14·vhal·vehicle hal
AFinalStone13 小时前
Android 7系统网络(八)应用API层—ConnectivityManager使用与实战调试
android·网络
plainGeekDev13 小时前
kapt 替换为 KSP
android·java·kotlin
蜡台14 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
阿pin17 小时前
Android随笔-SharedPreferences
android·sp
阿pin17 小时前
Android随笔-DataStore
android·datastore
茶栀(*´I`*)18 小时前
Android 测试入门指南:ADB 基础配置与常用设备管理命令解析
android·adb
ihuyigui20 小时前
海外酒店预订短信接口
android·java·运维·服务器·前端·后端·架构
gxgldyh20 小时前
Android Framework源码解析(七):BootAnimation 启动流程解析——开机动画是如何显示出来的?
android