uniapp调用芯烨xprinter打印机安卓sdk

简介: uniapp调用芯烨xprinter打印机安卓sdk

因为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() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                myBinder= (IMyBinder) service;
                callback.invokeAndKeepAlive("connect");
            }
            @Override
            public void onServiceDisconnected(ComponentName name) {
                callback.invokeAndKeepAlive("disconnect");
            }
        };
        //bind service,get imyBinder
        Intent 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() {
            @Override
            public void OnSucceed() {
                callback.invoke("succeed");
            }
            @Override
            public 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() {
            @Override
            public void OnSucceed() {
                callback.invoke("succeed");
            }
            @Override
            public void OnFailed() {
                callback.invoke("failed");
            }
        });
        return true;
    }
    @JSMethod(uiThread = false)
    public boolean write(byte[] bytes,final UniJSCallback callback) {
        myBinder.Write(bytes, new TaskCallback() {
            @Override
            public void OnSucceed() {
                callback.invoke("succeed");
            }
            @Override
            public void OnFailed() {
                callback.invoke("failed");
            }
        });
        return true;
    }
    @JSMethod(uiThread = false)
    public boolean writeSendData(final List<byte[]> byteList, final UniJSCallback callback) {
        myBinder.WriteSendData(new TaskCallback() {
            @Override
            public void OnSucceed() {
                callback.invoke("succeed");
            }
            @Override
            public void OnFailed() {
                callback.invoke("failed");
            }
        }, new ProcessData() {
            @Override
            public 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" />
相关文章
|
开发工具 Android开发
uniapp调用芯烨xprinter打印机安卓sdk
uniapp调用芯烨xprinter打印机安卓sdk
547 0
|
缓存 Ubuntu Linux
WSL2(4) Ubuntu中无法使用snap解决办法
WSL2(4) Ubuntu中无法使用snap解决办法
934 0
uniapp组件库uview1的u-button的问题,u-button多次点击只触发事件一次
uniapp组件库uview1的u-button的问题,u-button多次点击只触发事件一次
577 0
|
存储 监控 Linux
|
11月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
282 4
|
Java Maven
[Java ] jdk升级 bug java: -source 8 中不支持 instanceof 中的模式匹配 (请使用 -source 16 或更高版本以启用 instanceof 中的模式匹配)
[Java ] jdk升级 bug java: -source 8 中不支持 instanceof 中的模式匹配 (请使用 -source 16 或更高版本以启用 instanceof 中的模式匹配)
837 0
|
12月前
|
搜索推荐 Java 数据处理
|
Android开发 Kotlin
Android面试题之kotlin中怎么限制一个函数参数的取值范围和取值类型等
在Kotlin中,限制函数参数可通过类型系统、泛型、条件检查、数据类、密封类和注解实现。例如,使用枚举限制参数为特定值,泛型约束确保参数为Number子类,条件检查如`require`确保参数在特定范围内,数据类封装可添加验证,密封类限制为一组预定义值,注解结合第三方库如Bean Validation进行校验。
260 6
|
移动开发 JavaScript 前端开发
【绝技揭秘】从零到英雄:解锁UniApp H5项目中的二维码生成与扫描秘籍,让你的应用瞬间变身扫码达人!
【8月更文挑战第20天】二维码在移动应用中无处不在。本文详述了在UniApp H5项目中实现二维码生成与扫描的方法。通过对比插件`uni-app-qrcode`和JavaScript库`qrcode-generator`生成二维码的方式,以及使用插件`@juggle/resize-observer`和HTML5的MediaDevices API进行扫描的技术方案,帮助开发者挑选最佳实践。无论是插件的便捷性还是原生JavaScript的灵活性,都能满足不同项目需求。
684 0
|
移动开发 前端开发 API
uniapp实现条码扫描 可开闪光灯,原生H5调用,不需要任何sdk。
一维码识别功能使用的是Quagga这个库。调用摄像头使用的 navigator.mediaDevices.getUserMedia 这个H5的api。通过 video 和 canvas 把摄像头获取到的数据展现到页面上,同时调用监听Quagga解析。
1374 0