package com.dayu.rechargeqh.utils; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; import android.widget.Toast; import com.dayu.rechargeqh.R; import com.dayu.rechargeqh.bean.TableItem; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import woyou.aidlservice.jiuiv5.ICallback; import woyou.aidlservice.jiuiv5.IWoyouService; public class AidlUtil { private static final String SERVICE_PACKAGE = "woyou.aidlservice.jiuiv5"; private static final String SERVICE_ACTION = "woyou.aidlservice.jiuiv5.IWoyouService"; private IWoyouService woyouService; private static AidlUtil mAidlUtil = new AidlUtil(); private Context context; private AidlUtil() { } public static AidlUtil getInstance() { return mAidlUtil; } /** * 连接服务 * * @param context context */ public void connectPrinterService(Context context) { this.context = context.getApplicationContext(); Intent intent = new Intent(); intent.setPackage(SERVICE_PACKAGE); intent.setAction(SERVICE_ACTION); context.getApplicationContext().startService(intent); context.getApplicationContext().bindService(intent, connService, Context.BIND_AUTO_CREATE); } /** * 断开服务 * * @param context context */ public void disconnectPrinterService(Context context) { if (woyouService != null) { context.getApplicationContext().unbindService(connService); woyouService = null; } } public boolean isConnect() { return woyouService != null; } private ServiceConnection connService = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { woyouService = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { woyouService = IWoyouService.Stub.asInterface(service); } }; public ICallback generateCB(final PrinterCallback printerCallback) { return new ICallback.Stub() { @Override public void onRunResult(boolean isSuccess) throws RemoteException { } @Override public void onReturnString(String result) throws RemoteException { printerCallback.onReturnString(result); } @Override public void onRaiseException(int code, String msg) throws RemoteException { } }; } /** * 设置打印浓度 */ private int[] darkness = new int[]{0x0600, 0x0500, 0x0400, 0x0300, 0x0200, 0x0100, 0, 0xffff, 0xfeff, 0xfdff, 0xfcff, 0xfbff, 0xfaff}; public void setDarkness(int index) { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } int k = darkness[index]; try { woyouService.sendRAWData(ESCUtil.setPrinterDarkness(k), null); woyouService.printerSelfChecking(null); } catch (RemoteException e) { e.printStackTrace(); } } /** * 取得打印机系统信息,放在list中 * * @return list */ public List getPrinterInfo(PrinterCallback printerCallback) { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return null; } List info = new ArrayList<>(); try { woyouService.getPrintedLength(generateCB(printerCallback)); info.add(woyouService.getPrinterSerialNo()); info.add(woyouService.getPrinterModal()); info.add(woyouService.getPrinterVersion()); info.add(printerCallback.getResult()); info.add(""); //info.add(woyouService.getServiceVersion()); PackageManager packageManager = context.getPackageManager(); try { PackageInfo packageInfo = packageManager.getPackageInfo(SERVICE_PACKAGE, 0); if (packageInfo != null) { info.add(packageInfo.versionName); info.add(packageInfo.versionCode + ""); } else { info.add(""); info.add(""); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } catch (RemoteException e) { e.printStackTrace(); } return info; } /** * 初始化打印机 */ public void initPrinter() { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } try { woyouService.printerInit(null); } catch (RemoteException e) { e.printStackTrace(); } } /** * 打印二维码 */ public void printQr(String data, int modulesize, int errorlevel) { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } try { woyouService.setAlignment(1, null); woyouService.printQRCode(data, modulesize, errorlevel, null); woyouService.lineWrap(3, null); } catch (RemoteException e) { e.printStackTrace(); } } /** * 打印条形码 */ public void printBarCode(String data, int symbology, int height, int width, int textposition) { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } try { woyouService.printBarCode(data, symbology, height, width, textposition, null); woyouService.lineWrap(3, null); } catch (RemoteException e) { e.printStackTrace(); } } /** * 打印文字 */ public void printText(String content, float size, boolean isBold, boolean isUnderLine) { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } try { if (isBold) { woyouService.sendRAWData(ESCUtil.boldOn(), null); } else { woyouService.sendRAWData(ESCUtil.boldOff(), null); } if (isUnderLine) { woyouService.sendRAWData(ESCUtil.underlineWithOneDotWidthOn(), null); } else { woyouService.sendRAWData(ESCUtil.underlineOff(), null); } woyouService.printTextWithFont(content, null, size, null); woyouService.lineWrap(3, null); } catch (RemoteException e) { e.printStackTrace(); } } /* *打印图片 */ public void printBitmap(Bitmap bitmap) { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } try { woyouService.setAlignment(1, null); woyouService.printBitmap(bitmap, null); woyouService.lineWrap(3, null); } catch (RemoteException e) { e.printStackTrace(); } } /** * 打印图片和文字按照指定排列顺序 */ public void printBitmap(Bitmap bitmap, int orientation) { if (woyouService == null) { Toast.makeText(context, "打印服务已断开!", Toast.LENGTH_LONG).show(); return; } try { if (orientation == 0) { woyouService.printBitmap(bitmap, null); woyouService.printText("横向排列\n", null); woyouService.printBitmap(bitmap, null); woyouService.printText("横向排列\n", null); } else { woyouService.printBitmap(bitmap, null); woyouService.printText("\n纵向排列\n", null); woyouService.printBitmap(bitmap, null); woyouService.printText("\n纵向排列\n", null); } woyouService.lineWrap(3, null); } catch (RemoteException e) { e.printStackTrace(); } } /** * 打印表格 */ public void printTable(LinkedList list) { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } try { for (TableItem tableItem : list) { Log.i("kaltin", "printTable: " + tableItem.getText()[0] + tableItem.getText()[1] + tableItem.getText()[2]); woyouService.printColumnsString(tableItem.getText(), tableItem.getWidth(), tableItem.getAlign(), null); } woyouService.lineWrap(3, null); } catch (RemoteException e) { e.printStackTrace(); } } /* * 空打三行! */ public void print3Line() { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } try { woyouService.lineWrap(3, null); } catch (RemoteException e) { e.printStackTrace(); } } public void sendRawData(byte[] data) { if (woyouService == null) { Toast.makeText(context, R.string.toast_2, Toast.LENGTH_LONG).show(); return; } try { woyouService.sendRAWData(data, null); } catch (RemoteException e) { e.printStackTrace(); } } }