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>
相关推荐
2501_915106329 小时前
当 altool 退出历史舞台,iOS 上传链路的演变与替代方案的工程实践
android·ios·小程序·https·uni-app·iphone·webview
共享家95279 小时前
MySQL 数据类型
android·数据库·mysql
前端不太难9 小时前
RN 版本升级、第三方库兼容、Android/iOS 崩溃(实战博文 — 从 0.63 升到 0.72)
android·ios·react
00后程序员张9 小时前
Transporter 的局限与替代路径,iOS 上传流程在多平台团队中的演进
android·ios·小程序·https·uni-app·iphone·webview
习惯就好zz10 小时前
如何解包 Android boot.img 并检查 UART 是否启用
android·linux·dtc·3588·dts·解包·dtb
lwprain10 小时前
uniapp使用uniview-plus性能问题处理
uni-app
00后程序员张10 小时前
Python 抓包工具全面解析,从网络监听、协议解析到底层数据流捕获的多层调试方案
开发语言·网络·python·ios·小程序·uni-app·iphone
每次的天空10 小时前
Android车机开发——内存优化操作
android·学习·设计模式
Digitally10 小时前
设置完成后,将数据从安卓设备传输到 iPhone
android·ios·iphone
独行soc10 小时前
2025年渗透测试面试题总结-276(题目+回答)
android·网络·python·安全·web安全·网络安全·渗透测试