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" />
相关文章
|
2月前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
JavaScript Java Android开发
uniapp通过蓝牙传输数据 (安卓)
uniapp通过蓝牙传输数据 (安卓)
74 1
|
2月前
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
767 0
|
2月前
|
Android开发
UniApp Android 页面拖动,去掉半圆形阴影
UniApp Android 页面拖动,去掉半圆形阴影
72 0
|
25天前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的安卓的微博客系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的安卓的微博客系统附带文章和源代码部署视频讲解等
27 2
|
10天前
|
jenkins 持续交付 开发工具
Android使用Jenkins打包自动维护sdk版本号
Android使用Jenkins打包自动维护sdk版本号
14 0
|
11天前
|
Java Linux 开发工具
由" failed to run the android sdk manager"引起的一系列问题 android
由" failed to run the android sdk manager"引起的一系列问题 android
|
18天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的安卓的微博客系统的详细设计和实现
基于SpringBoot+Vue+uniapp的安卓的微博客系统的详细设计和实现
11 0
|
18天前
|
开发工具 Android开发 Windows
Android Studio安装Unable to access Android SDK add-on list处理方法
Android Studio安装Unable to access Android SDK add-on list处理方法
21 0
|
2月前
|
Java 开发工具 Maven
Android SDK开发的那些事(1),已整理成文档
Android SDK开发的那些事(1),已整理成文档