Gprinter Android SDK旨在佳博用戶更快速,更高效的在Android平臺下開發和使用佳博打印機。若是您在使用SDK中碰到問題,或者發現BUG,請留言java
1、下載GprinterSDKV2.0 eclipse
GprinterSDKV2.0可打電話到0756-3866865,填寫客戶資料後,便可得到。ide
2、安裝Gplink打印機驅動測試
在GprinterSDKV2.0文件夾中,能夠看到Gplink.apk的軟件,在手機或平板上安裝此軟件。Gplink提供打印服務。spa
3、導入Android例程code
在eclipse,導入GprinterClient工程,如下對此例程進行說明,用戶開發時能夠先研究此例程,再進行開發blog
4、gprinter-v2.0.jar和commons-lang-2.6文件接口
能夠看到在GprinterClient工程中能夠開到libs文件夾中有兩個文件gprinter-v2.0.jar和commons-lang-2.6,如圖1圖片
圖1ip
gprinter-v2.0.jar,是用來提供打印時所需的API,API的詳細說明能夠查看手冊
commons-lang-2.6.JAR,是用來處理base64的操做。
若是是用eclipse開發,新建工程,將gprinter-v2.0.jar和commons-lang-2.6拷貝到工程的libs文件夾下便可。
5、GpService.aidl文件
能夠看到在scr中,com.gprinter.aidl包中有個GpService.aidl的文件,是用來和Gplink提供的服務進行交互的,如圖2
圖2
GpService.aidl文件說明,具體的方法說明請看 GprinterSDKV2.0文件夾中的GpService.aidl說明文檔
package com.gprinter.aidl;
interface GpService{
void openPortConfigurationDialog(); //打開端口鏈接對話框
int printeTestPage(int PrinterId); // 打印測試頁
int queryPrinterStatus(int PrinterId); //查詢打印機狀態
int getPrinterCommandType(int PrinterId); //查詢打印機指令類型
int sendEscCommand(int PrinterId, String b64);//發送ESC指令
int sendTscCommand(int PrinterId, String b64); //發送TSC指令
}
若是是用eclipse開發,在工程的src中增長com.gprinter.aidl包,在包中加入GpService.aidl文件便可
6、綁定打印服務
能夠看到,在MainAcitivty.java的onCreate方法中的對GpService進行了綁定
private GpService mGpService;
private static final String DEBUG_TAG = "MainActivity";
private PrinterServiceConnection conn = null;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e(DEBUG_TAG, "onCreate"); connection(); } private void connection() { conn = new PrinterServiceConnection(); Intent intent = new Intent("com.gprinter.aidl.GpPrintService"); bindService(intent, conn, Context.BIND_AUTO_CREATE); // 綁定服務 } 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); } };
7、實現打印機的操做
一、在openPortDialogueClicked方法,能夠打開端口鏈接對話框
public void openPortDialogueClicked(View view) { try { mGpService.openPortConfigurationDialog(); // 點擊鏈接打印機時,須要打印機錯誤燈不閃爍的狀況下才能鏈接 } catch (RemoteException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }
打開對話框後,能夠看到以下畫面,如圖3,此對話框能夠對藍牙、USB、網口打印機進行鏈接操做。
圖3
打印機開機,選擇正確的端口,若是是usb接口則須要otg的轉接線鏈接usb打印機。再點擊鏈接按鈕,則能夠鏈接到佳博打印機。
二、在printTestPageClicked實現打印測試頁
public void printTestPageClicked(View view) { try { int rel = mGpService.printeTestPage(mPrinterIndex); // Log.i("ServiceConnection", "rel " + rel); 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 e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }
若是鏈接的是票據打印機則測試頁內容如圖4:
圖4
若是鏈接的是標籤打印機則測試頁內容如圖5:
圖5
三、在getPrinterStatusClicked中能夠獲取打印機當前狀態。每次執行打印以前需獲取打印機狀態,打印機正常纔可以再發送命令給打印機
public void getPrinterStatusClicked(View view) { try { int status = mGpService.queryPrinterStatus(mPrinterIndex); 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(); } }
四、在getPrinterCommandTypeClicked中能夠獲取打印機的指令類型,票據打印機爲ESC指令,標籤打印機爲TSC指令
public void getPrinterCommandTypeClicked(View view) { 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(); } }
五、在printReceiptClicked發送票據,每次打印以前查詢打印機狀態
public void printReceiptClicked(View view) { try { int type = mGpService.getPrinterCommandType(mPrinterIndex); if (type == GpCom.ESC_COMMAND) { int status = mGpService.queryPrinterStatus(mPrinterIndex); if (status == GpCom.STATE_NO_ERR) { sendReceipt(); } else{ Toast.makeText(getApplicationContext(), "打印機錯誤!", Toast.LENGTH_SHORT).show(); } } } catch (RemoteException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }
票據的內容編輯,按照ESC指令編寫,能夠參考EscComand API說明文件
void sendReceipt(){ 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.addPrintAndLineFeed(); 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(); } }
打印效果如圖6
圖6
六、在printLabelClicked發送標籤,每次打印以前查詢打印機狀態
public void printLabelClicked(View view) { try { int type = mGpService.getPrinterCommandType(mPrinterIndex); if (type == GpCom.TSC_COMMAND) { int status = mGpService.queryPrinterStatus(mPrinterIndex); if (status ==GpCom.STATE_NO_ERR) { sendLabel(); } else{ Toast.makeText(getApplicationContext(), "打印機錯誤!", Toast.LENGTH_SHORT).show(); } } } catch (RemoteException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }
標籤的內容編輯,按照TSC指令發送,能夠參考TscComand API說明文件
void sendLabel(){ 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.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(); } }
圖7