Gprinter Android SDK V2.1 使用说明

  Gprinter Android SDK旨在佳博用户更快速,更高效的在Android平台下开发和使用佳博打印机。如果您在使用SDK中碰到问题,或者发现BUG,请留言

一、下载GprinterSDKV2.1

  GprinterSDKV2.1可打电话到0756-3866865,填写客户资料后,即可获得。

二、新建工程,导入gprinter-2.1.jar

  向工程的libs文件中拷贝gprinter-2.1.jar

三、注册服务

  在AndroidManifest文件中添加服务,gprinter-2.1.jar中提供了打印服务

  <service
            android:name="com.gprinter.service.GpPrintService"
            android:label="GpPrintService"
            android:process=":remote"
            android:enabled="true"
            android:exported="true"
             >
            <intent-filter>
                <action android:name="com.gprinter.aidl.GpPrintService" />
            </intent-filter>
        </service>  

四、添加aidl文件

  新建包,包名为com.gprinter.aidl,向包中添加文件,文件名为GpService。aidl内容为

package com.gprinter.aidl;
interface GpService{
    int openPort(int PrinterId,int PortType,String DeviceName,int PortNumber);
    void closePort(int PrinterId);
    int getPrinterConnectStatus(int PrinterId);
    int printeTestPage(int PrinterId);
    int queryPrinterStatus(int PrinterId,int Timesout);
    int getPrinterCommandType(int PrinterId);
    int sendEscCommand(int PrinterId, String b64);
    int sendTscCommand(int PrinterId, String  b64);
}       

五、启动并绑定GpPrintService服务

在OnCreate中启动并绑定服务

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(DEBUG_TAG, "onCreate");
        startService();
        connection();
    }

启动服务

private void startService() {
        Intent i= new Intent(this, GpPrintService.class);
        startService(i);
         try {
             Thread.sleep(1000);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
    }

绑定服务

private GpService mGpService = null;
private PrinterServiceConnection conn = null;
class PrinterServiceConnection implements ServiceConnection {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.i("ServiceConnection", "onServiceDisconnected() called");
            mGpService = null;
        }
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mGpService =GpService.Stub.asInterface(service);
        }
    };
private void connection() {
        conn = new PrinterServiceConnection();
        Intent intent = new Intent("com.gprinter.aidl.GpPrintService");
        bindService(intent, conn, Context.BIND_AUTO_CREATE); // bindService
    }

六、使用打印服务的AIDL接口,接口的详细描述请看GpService.aidl说明

打开和关闭端口操作

1、 注册状态接收广播,通过此广播可以获取当前端口的连接状态

广播接收的Intent,

GpPrintService.PRINTER_ID  返回打印机的ID序号

GpPrintService.CONNECT_STATUS  返回状态

GpPrintService可以同时连接三台打印机,可以通过此广播获取到哪台打印机处于何种状态

public static final String ACTION_CONNECT_STATUS = "action.connect.status";private void registerBroadcast() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_CONNECT_STATUS);
        this.registerReceiver(PrinterStatusBroadcastReceiver, filter);
    }
private BroadcastReceiver PrinterStatusBroadcastReceiver = new BroadcastReceiver() {
        @Override
    public void onReceive(Context context, Intent intent) {
            if (ACTION_CONNECT_STATUS.equals(intent.getAction())) {
                int type = intent.getIntExtra(GpPrintService.CONNECT_STATUS, 0);
                int id = intent.getIntExtra(GpPrintService.PRINTER_ID, 0);
                Log.d(DEBUG_TAG, "connect status " + type);
                if (type == GpDevice.STATE_CONNECTING) {
                } else if (type == GpDevice.STATE_NONE) {

                } else if (type == GpDevice.STATE_VALID_PRINTER) {

                } else if (type == GpDevice.STATE_INVALID_PRINTER) {

                }
            }
        }
    };

2、调用打开端口 int openPort(int PrinterId,int PortType,String DeviceName,int PortNumber);如果端口已经连接则会返回ERROR_CODE.DEVICE_ALREADY_OPEN,端口打开过程中的连接状态通过上面的广播返回

3、调用关闭端口int closePort(int PrinterId);端口关闭过程中的连接状态通过上面的广播返回,断开连接后再次调用连接,需延时1-10s时间再次连接,否则可能连接不上,具体情况视平板固件而定

获取打印机状态  

1、通过调用 int getPrinterConnectStatus(int PrinterId);可以获取打印机的连接状态

2、通过调用 int queryPrinterStatus(int PrinterId,int Timesout);可以获取打印机的错误状态

    try {
            int status = mGpService.queryPrinterStatus(mPrinterIndex,500);
            String str = new String();
            if (status == GpCom.STATE_NO_ERR) {
                str = "打印机正常";
            } else if ((byte) (status & GpCom.STATE_OFFLINE) > 0) {
                str = "打印机脱机";
            } else if ((byte) (status & GpCom.STATE_PAPER_ERR) > 0) {
                str = "打印机缺纸";
            } else if ((byte) (status & GpCom.STATE_COVER_OPEN) > 0) {
                str = "打印机开盖";
            } else if ((byte) (status & GpCom.STATE_ERR_OCCURS) > 0) {
                str = "打印机出错";
            }
            Toast.makeText(getApplicationContext(),
                    "打印机:" + ‘0‘ + " 状态:" + str, Toast.LENGTH_SHORT).show();
        } catch (RemoteException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

3、通过调用 int getPrinterCommandType(int PrinterId);可以获取打印机的命令类型,佳博打印机分为票据打印机和标签打印机

    try {
            int type = mGpService.getPrinterCommandType(mPrinterIndex);
            if (type == GpCom.ESC_COMMAND) {
                Toast.makeText(getApplicationContext(), "打印机使用ESC命令",
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplicationContext(), "打印机使用TSC命令",
                        Toast.LENGTH_SHORT).show();
            }
        } catch (RemoteException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

打印测试页

1、如果打印机连接成功后可以通过int printeTestPage(int PrinterId); 打印测试页。

向打印机发送数据

1、如果连接的为标签打印机则调用int sendTscCommand(int PrinterId, String  b64); 发送数据

2、如果连接的为票据打印机则调用int sendEscCommand(int PrinterId, String  b64); 发送数据

发送数据之前 需查询打印机的状态

票据打印机测试页内容如图1:

图1

标签打印机测试页内容如图2:

图2

七、打印机命令格式说明

1、票据的内容编辑,按照ESC指令编写,可以参考EscComand API说明文件打印效果如图3 

        EscCommand esc = new EscCommand();
        esc.addPrintAndFeedLines((byte)3);
        esc.addSelectJustification(JUSTIFICATION.CENTER);//设置打印居中
        esc.addSelectPrintModes(FONT.FONTA, ENABLE.OFF,ENABLE.ON, ENABLE.ON, ENABLE.OFF);//设置为倍高倍宽
        esc.addText("Sample\n");   //  打印文字
        esc.addPrintAndLineFeed();

        /*打印文字*/
        esc.addSelectPrintModes(FONT.FONTA, ENABLE.OFF,ENABLE.OFF, ENABLE.OFF, ENABLE.OFF);//取消倍高倍宽
        esc.addSelectJustification(JUSTIFICATION.LEFT);//设置打印左对齐
        esc.addText("Print text\n");   //  打印文字
        esc.addText("Welcome to use Gprinter!\n");   //  打印文字
        esc.addPrintAndLineFeed();
        /*打印图片*/
        esc.addText("Print bitmap!\n");   //  打印文字
        Bitmap b = BitmapFactory.decodeResource(getResources(),
                R.drawable.gprinter);
        esc.addRastBitImage(b,b.getWidth(),0);   //打印图片

        /*打印一维条码*/
        esc.addText("Print code128\n");   //  打印文字
        esc.addSelectPrintingPositionForHRICharacters(HRI_POSITION.BELOW);//设置条码可识别字符位置在条码下方
        esc.addSetBarcodeHeight((byte)60); //设置条码高度为60点
        esc.addCODE128("Gprinter");  //打印Code128码
        esc.addPrintAndLineFeed();

        /*QRCode命令打印
            此命令只在支持QRCode命令打印的机型才能使用。
            在不支持二维码指令打印的机型上,则需要发送二维条码图片
        */
        esc.addText("Print QRcode\n");   //  打印文字
        esc.addSelectErrorCorrectionLevelForQRCode((byte)0x31); //设置纠错等级
        esc.addSelectSizeOfModuleForQRCode((byte)3);//设置qrcode模块大小
        esc.addStoreQRCodeData("www.gprinter.com.cn");//设置qrcode内容
        esc.addPrintQRCode();//打印QRCode
        esc.addPrintAndLineFeed();

        /*打印文字*/
        esc.addSelectJustification(JUSTIFICATION.CENTER);//设置打印左对齐
        esc.addText("Completed!\r\n");   //  打印结束
        esc.addPrintAndFeedLines((byte)8);

        Vector<Byte> datas = esc.getCommand(); //发送数据
        Byte[] Bytes = datas.toArray(new Byte[datas.size()]);
        byte[] bytes = ArrayUtils.toPrimitive(Bytes);
        String str = Base64.encodeToString(bytes, Base64.DEFAULT);
        int rel;
        try {
            rel = mGpService.sendEscCommand(mPrinterIndex, str);
            GpCom.ERROR_CODE r=GpCom.ERROR_CODE.values()[rel];
            if(r != GpCom.ERROR_CODE.SUCCESS){
                Toast.makeText(getApplicationContext(),GpCom.getErrorText(r),
                        Toast.LENGTH_SHORT).show();
                  }
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

图3

2、标签的内容编辑,按照TSC指令发送,可以参考TscComand API说明文件

TscCommand tsc = new TscCommand();
        tsc.addSize(60, 60); //设置标签尺寸,按照实际尺寸设置
        tsc.addGap(0);           //设置标签间隙,按照实际尺寸设置,如果为无间隙纸则设置为0
        tsc.addDirection(DIRECTION.BACKWARD,MIRROR.NORMAL);//设置打印方向
        tsc.addReference(0, 0);//设置原点坐标
         tsc.addTear(ENABLE.ON); //撕纸模式开启
        tsc.addCls();// 清除打印缓冲区
        //绘制简体中文
         tsc.addText(20,20,FONTTYPE.SIMPLIFIED_CHINESE,ROTATION.ROTATION_0,FONTMUL.MUL_1,FONTMUL.MUL_1,"Welcome to use Gprinter!");
         //绘制图片
        Bitmap b = BitmapFactory.decodeResource(getResources(),
                R.drawable.gprinter);
        tsc.addBitmap(20,50, BITMAP_MODE.OVERWRITE, b.getWidth(),b);

        tsc.addQRCode(250, 80, EEC.LEVEL_L,5,ROTATION.ROTATION_0, " www.gprinter.com.cn");
         //绘制一维条码
         tsc.add1DBarcode(20,250, BARCODETYPE.CODE128, 100, READABEL.EANBEL, ROTATION.ROTATION_0, "Gprinter");
        tsc.addPrint(1,1); // 打印标签
        tsc.addSound(2, 100); //打印标签后 蜂鸣器响

        Vector<Byte> datas = tsc.getCommand(); //发送数据
        Byte[] Bytes = datas.toArray(new Byte[datas.size()]);
        byte[] bytes = ArrayUtils.toPrimitive(Bytes);
        String str = Base64.encodeToString(bytes, Base64.DEFAULT);
        int rel;
        try {
            rel = mGpService.sendTscCommand(mPrinterIndex, str);
            GpCom.ERROR_CODE r=GpCom.ERROR_CODE.values()[rel];
            if(r != GpCom.ERROR_CODE.SUCCESS){
                Toast.makeText(getApplicationContext(),GpCom.getErrorText(r),
                        Toast.LENGTH_SHORT).show();
                  }
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

图4

  

时间: 2024-10-12 17:34:54

Gprinter Android SDK V2.1 使用说明的相关文章

Gprinter Android SDK V2.0 使用说明

Gprinter Android SDK旨在佳博用户更快速,更高效的在Android平台下开发和使用佳博打印机.如果您在使用SDK中碰到问题,或者发现BUG,请留言 一.下载GprinterSDKV2.0  GprinterSDKV2.0可打电话到0756-3866865,填写客户资料后,即可获得. 二.安装Gplink打印机驱动 在GprinterSDKV2.0文件夹中,可以看到Gplink.apk的软件,在手机或平板上安装此软件.Gplink提供打印服务,可以解决一台手机多个应用同时调用一台

Gprinter Android SDK V2.1.4 使用说明

佳博打印机Android的SDK开发包,已更新到Gprinter Android SDK V2.1.4. IOS的SDK开发包更新为GprinterSDKandDemoforIOS_v1.0.8. 根据客户的需求,加入了新的功能及修复了一些BUG. 有需要加QQ:2485328844 获取

Gprinter Android SDK V1.0 使用说明

Gprinter Android SDK旨在佳博用户更快速,更高效的在Android平台下开发和使用佳博打印机.如果您在使用SDK中碰到问题,或者发现BUG,请随时联系我,发送邮箱到[email protected] 一.下载GprinterSDK  GprinterSDK可在佳博打印机官网下载http://www.gainscha.cn/cn/download.aspx?current=down或点击GprinterSDK,即可下载. 一.将gprinter.jar导入到工程 在eclipse

Android应用之——最新版本SDK V2.4实现QQ第三方登录

为什么要写这篇博客呢?因为,我在做这个第三方登录的时候,找了很多资料,发现要么就是过时了,要么就是说的很不清楚,很罗嗦,而且很多都是一些小demo,不是什么实例,甚至连腾讯官方的文档都有这个问题,文档中很多地方用的不是最新的sdk写的示例,用最新版本的sdk发现根本没法达到预期的效果,很多api已经发生了变化,demo还是用的原来的api中的方法,最坑爹是demo下载下来还要一个支持的库文件,但是sdk中又没有提供.. 自己跌跌撞撞,查找资料,整合,弄了几个小时,终于把它给整出来了,用在了开发的

Android 关于百度地图Android SDK几处修正使用说明(非官方)

本篇主要是因为最近在学习使用百度地图,发现了一些问题,跟大伙分享一下. 1.根据android sdk开发指南中"Hello World"的例子,构建一个基础的地图页面,如果大家完全按照示例代码中所写的那样,是不会执行成功的,会有以下问题的错误提示"java.lang.RuntimeException: Unable to instantiate activity ComponentInfo" 这个问题出现的原因是 在第二步,配置Activity部分,android

高德Android SDK 2d地图zoomlevel Bug一种解决方案

在Android 2D地图SDK V2.2.0中,存在一个bug ,当getCameraPositon().zoom得到的值都是3.0,如果在应用中不得不用这一版本的2D地图,又必须取得这个值时(如果非必须不推荐哈),这里有一个不是很传统的方式去获取,通过在地图上添加一个TileOverlay,这个Overlay呢,不加载任何新的图层或者数据,仅仅是为了取得最新的level级别: 代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

unable to access android sdk add-on list

转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50563122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的收货! 造成这个问题的原因可能有多种,下面两种方法,我亲自测试后可用,如果都不行,请在评论里告诉我,我会尽快帮你分析解决.左侧的文章分类中,Android Studio编译构建错误记录了我开发中遇到的所有编译构建错误,这些方法都经过我亲测,如有任何疑问,评论告诉我. 错误信息: 第一次安装完AS,出

Android SDK eclipse开发工具全套离线下载

Android Tool sAndroid SDK在线更新镜像服务器 下载地址: http://www.bcoder.cn/?p=640 中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/IPV6: http://mirrors.opencas.org 端口:80 IPV4/IPV6: http://mirrors.opencas.ac.cn 端口:80 上海GDG镜像服务器地址: http://sdk.gdgshan

vs2015 Android SDK

It was not possible to complete an automatic installation. This might be due to a problem with your network, proxy servers or an unsolvable installation conflict. At this point, you can continue the installation by manually downloading and installing