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" />
相关文章
|
10月前
|
JavaScript Java Android开发
uniapp通过蓝牙传输数据 (安卓)
uniapp通过蓝牙传输数据 (安卓)
439 1
|
3月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
124 11
|
10月前
|
Android开发
UniApp Android 页面拖动,去掉半圆形阴影
UniApp Android 页面拖动,去掉半圆形阴影
162 0
|
7月前
|
开发工具 图形学 Android开发
Unity与安卓丨unity报错:SDK Tools version 0.0 < 26.1.1
Unity与安卓丨unity报错:SDK Tools version 0.0 < 26.1.1
|
7月前
|
开发工具 Android开发
|
9月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的安卓的微博客系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的安卓的微博客系统附带文章和源代码部署视频讲解等
65 2
|
8月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
83 0
|
9月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的安卓的微博客系统的详细设计和实现
基于SpringBoot+Vue+uniapp的安卓的微博客系统的详细设计和实现
53 0
|
监控 Java 开发工具
基于Eclipse+SDK+ADT+DDMS的安卓开发环境完整搭建过程
基于Eclipse+SDK+ADT+DDMS的安卓开发环境完整搭建过程
124 0
基于Eclipse+SDK+ADT+DDMS的安卓开发环境完整搭建过程
|
API Android开发
uniapp开发安卓应用踩坑记
字体图标在app上不显示,直接在iconfont上生成的代码,url链接里是以 // 开头的,不是完整的网址路径。 解决方案:在字体图标引用路径前面要加上https:,否则在app上不显示
158 0

热门文章

最新文章

  • 1
    【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
  • 2
    uniapp 极速上手鸿蒙开发
  • 3
    uniapp云打包ios应用证书的获取方法,生成指南
  • 4
    Android历史版本与APK文件结构
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 8
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 10
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 1
    【Azure Service Bus】分享使用 Python Service Bus SDK 输出SDK内操作日志
    36
  • 2
    【Azure Storage Account】利用App Service作为反向代理, 并使用.NET Storage Account SDK实现上传/下载操作
    23
  • 3
    【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    91
  • 4
    CompreFace:Star6.1k,Github上火爆的轻量化且强大的人脸识别库,api,sdk都支持
    54
  • 5
    【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
    29
  • 6
    【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    56
  • 7
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    178
  • 8
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    179
  • 9
    【01】完整开发即构美颜sdk的uni官方uts插件—让所有开发者可以直接使用即构美颜sdk的能力-优雅草卓伊凡
    80
  • 10
    AutoTalk第十三期-应知必会的自动化工具-阿里云SDK支持策略(一)
    65