因为xprinter的安卓sdk需要在安卓项目里配置service,但是uniapp里云打包无法配置service,所以只能用原生插件离线打包的形式开发。https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
UniPlugin-Hello-AS安卓项目引入 PosPrinterSDK.jar
1.android自定义插件代码
package com.yf.xprinter;import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;import com.taobao.weex.annotation.JSMethod;import net.posprinter.posprinterface.IMyBinder;
import net.posprinter.posprinterface.ProcessData;
import net.posprinter.posprinterface.TaskCallback;
import net.posprinter.service.PosprinterService;
import net.posprinter.utils.PosPrinterDev;
import net.posprinter.utils.StringUtils;import java.util.HashMap;
import java.util.List;import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;public class print extends UniModule {@JSMethod(uiThread = false)public String getVersion() {return "V20210622";}private static IMyBinder myBinder;private static ServiceConnection mSerconnection;@JSMethod(uiThread = false)public boolean serviceConnection(final UniJSCallback callback) {mSerconnection= new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {myBinder= (IMyBinder) service;callback.invokeAndKeepAlive("connect");}@Overridepublic void onServiceDisconnected(ComponentName name) {callback.invokeAndKeepAlive("disconnect");}};//bind service,get imyBinderIntent intent =new Intent(mWXSDKInstance.getContext(), PosprinterService.class);Activity activity = (Activity )mWXSDKInstance.getContext();activity.bindService(intent,mSerconnection,Activity.BIND_AUTO_CREATE);return true;}@JSMethod(uiThread = false)public List<String> getUsbPathNames() {return PosPrinterDev.GetUsbPathNames(mWXSDKInstance.getContext());}@JSMethod(uiThread = false)public boolean connectUsbPort(String usbAddress,final UniJSCallback callback) {myBinder.ConnectUsbPort(mWXSDKInstance.getContext(),usbAddress, new TaskCallback() {@Overridepublic void OnSucceed() {callback.invoke("succeed");}@Overridepublic void OnFailed() {callback.invoke("failed");}});return true;}@JSMethod(uiThread = false)public boolean testWrite(final UniJSCallback callback) {byte[] bytes= StringUtils.strTobytes("1234567890qwertyuiopakjbdscm nkjdv mcdskjb");myBinder.Write(bytes, new TaskCallback() {@Overridepublic void OnSucceed() {callback.invoke("succeed");}@Overridepublic void OnFailed() {callback.invoke("failed");}});return true;}@JSMethod(uiThread = false)public boolean write(byte[] bytes,final UniJSCallback callback) {myBinder.Write(bytes, new TaskCallback() {@Overridepublic void OnSucceed() {callback.invoke("succeed");}@Overridepublic void OnFailed() {callback.invoke("failed");}});return true;}@JSMethod(uiThread = false)public boolean writeSendData(final List<byte[]> byteList, final UniJSCallback callback) {myBinder.WriteSendData(new TaskCallback() {@Overridepublic void OnSucceed() {callback.invoke("succeed");}@Overridepublic void OnFailed() {callback.invoke("failed");}}, new ProcessData() {@Overridepublic List<byte[]> processDataBeforeSend() {return byteList;}});return true;}}
2.uniapp页面代码
<template><view><view><button @click="getversion()">getversion</button><button @click="serviceConnection()">serviceConnection</button><input style="width: 100%;" v-model="usbport"/><button @click="getUsbPathNames()">getUsbPathNames</button><button @click="connectUsbPort()">connectUsbPort</button><button @click="testWrite()">testWrite</button><button @click="printText()">printText</button></view><text v-for="(item,index) in msglist">{{item}}\n</text></view>
</template>
<script>const xprinter = uni.requireNativePlugin('zzzili-xprinter');export default {data() {return {msglist: [],usbport:'/dev/bus/usb/002/008'}},onLoad() {this.msglist.push('start test print')},methods: {getversion: function() {this.msglist.push(xprinter.getVersion()); },serviceConnection: function() {var that = this;var result = xprinter.serviceConnection(function(res){console.log(res);that.msglist.push(res);}); this.msglist.push(JSON.stringify(result));},getUsbPathNames: function() {var that = this;var result = xprinter.getUsbPathNames(); this.msglist.push(JSON.stringify(result)); },connectUsbPort: function() {var that = this;var result = xprinter.connectUsbPort(this.usbport,function(res){console.log(res);that.msglist.push(res);}); this.msglist.push(result); },printText: function() {var that = this;var str = "123456789zbc";var result = xprinter.write(str.getBytes(),function(res){console.log(res);that.msglist.push(res);}); this.msglist.push(result); },testWrite: function() {var that = this;var result = xprinter.testWrite(function(res){console.log(res);that.msglist.push(res);}); this.msglist.push(result); },}}
</script>
<style>
</style>
3.安卓项目AndroidManifest.xml文件中增加配置
<service android:name="net.posprinter.service.PosprinterService" />