关于uniapp开发安卓sdk的aar,用来控制pda的rfid的扫描

250 阅读3分钟

首先你得询问sdk商家给的aar包是不是支持uniapp

如果提供的aar包的方法里面使用了uniapp的 @UniJSMethod(uiThread = true)

里面暴露的方法如@UniJSMethod(uiThread = true) public void getCode() { }

那么这个aar的包只需要放在nativeplugins建立文件夹放在android里,然后这个文件夹的package.json配置好就可以使用,如图

image.png

image.png 然后在自定义基座里打包,在页面里使用下面代码,需要根据你的上面图片的name里的名称填写,然后使用里面对应的方法。

`
const ble = uni.requireNativePlugin('ScanModule');
const init = () => {
	ble.init({}, result => {
		const msg = JSON.stringify(result);
		msgs.value = msg
		console.log(msg);
	});
}

-------------------------------------分割线----------------------------------------

然后第二种方法,就是aar的包厂家给的aar是原生的没有暴露,那么你就有两种方法解决,

一种你使用android studio,在开发一个使用android的包把厂家给arr的API方法做一个暴露, 暴露的方法是@UniJSMethod(uiThread = true),打包成aar文件。然后按照👆上面配置就可以使用。。。。。。这种我研究了一下,但我kotlin和android开发水平不行搞了三天成功了一半。

然后我就用了uniapp的uts方法成功了。下面是教程

在uni_modules里面新建uni_modules插件,选择uts插件(名字你随便起) 把厂家给的aar文件放到libs里面 如图(我的是三个)

image.png

然后重点来了! 查看api文档,看看你需要的api他的方法来自哪个类

找不到类的找厂家给的demo或者aar(我记得好像可以(用android studio打开解压的aar))全局搜索api查看类, 然后在index.uts里面,引入他,在注入uts的实例

  import ReaderCtrlManager from "com.olc.reader.ReaderCtrlManager"

  const context = UTSAndroid.getAppContext()

   const readerCtrlManager = ReaderCtrlManager.getInstance(context);

然后下面就可以使用ReaderCtrlManager里面的方法了, 注意有的aar文件回调方法是类下面的方法,但uts没法和android一样直接使用这个方法,就只能引入他的回调方法

  import Stub from 'com.olc.reader.service.IInitCallback.Stub';

然后创建一个回调在在扩展这个方法,

(这步是必须的,不然uts识别会一直报错导致无法使用这个插件,如果aar不是用类下面的方法生成的回调,可以用implements代替extends使用且不需要constructor() { super(); }这行代码,具体情况看你的包)

       class initCallback extends Stub {
                  constructor() {
	        super();
           }
          override  result(success : boolean) : void {
	  console.log(success);
       }

然后就封装个方法(用于页面调取使用),里面可以直接使用你需要的api方法,并new一个你刚才class扩展的回调(具体传入几个参,可以直接ctrl加鼠标点方法,注意有的参是kotlin写法)

       export function ContinueInventoryR2000(options : MyApiStatus) {
       readerCtrlManager.InitUHF(new initCallback(), true)
       }

如果pda触发api会调用initCallback的回调,那么上面的 override result()或对应的就接收到消息,然后返回信息的方法就在InitUHF对应的initCallback方法里面,比如上面的result里面就可以这样写

             override  result(success : boolean) : void {
	
       
                 const res : MyApiResult = {
			type: 1,
			code: true,
		  	msg: success
		    };
	     }

然后页面里就这样接收

import {  ContinueInventoryR2000 }  from '@/uni_modules/rfid-plugin';


const huoqu = () => {
	ContinueInventoryR2000({
		result: (res) => {	
			console.log(res);
		}

	})
}
           

这样就可以在页面里面拿到sdk的api对应触发的返回值了,如果是持续触发 每触发就返回一次可以在方法上加上 @UTSJS.keepAlive

完结!!!!