SUNMI

6452 단어

SUMIN 스캔 및 인쇄 요약


1 스캔 드라이브 호출


1 sumins 드라이버 호출은 다음과 같습니다.
private void initScan() {
    Intent intent = new Intent("com.summi.scan");
    intent.setPackage("com.sunmi.sunmiqrcodescanner");
    intent.putExtra("CURRENT_PPI", 0X0003);//     

    //M1 V1    800*480,PPI_1920_1080 = 0X0001;PPI_1280_720 =

    //0X0002;PPI_BEST = 0X0003;

    intent.putExtra("PLAY_SOUND", true);//             true

    intent.putExtra("PLAY_VIBRATE", false);

    //      ,  false,  M1           ,V1   

    intent.putExtra("IDENTIFY_INVERSE_QR_CODE", true);//        ,  true

    intent.putExtra("IDENTIFY_MORE_CODE", false);//           ,  false

    intent.putExtra("IS_SHOW_SETTING", true);//            ,  true

    intent.putExtra("IS_SHOW_ALBUM", true);//              ,  true

    startActivityForResult(intent, Decode);

}

2 스캔이 끝난 후에 우리가 직접 가는 방법은onActivityResult() 방법입니다. 여기서 우리가 스캔한 정보를 얻을 수 있고 정보를 처리할 수 있습니다. 코드는 다음과 같습니다.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 2 && data != null) {
        Bundle bundle = data.getExtras();
        ArrayList> result = (ArrayList>) bundle

                .getSerializable("data");
        Iterator> it = result.iterator();
        while (it.hasNext()) {

            HashMap hashMap = it.next();

            String value = hashMap.get("VALUE");
            String[] split = value.split("=");
            orderId = split[1];

            //        ,       ,              ,        0  ,       
            getAvalibaleCount(orderId);

        }
    }
}

2 인쇄 인터페이스 초기화

    :
/**
 *          
 */
private void initRPrint() {
    callback = new ICallback.Stub() {


        @Override
        public void onRunResult(boolean isSuccess) throws RemoteException {

        }

        @Override
        public void onReturnString(String result) throws RemoteException {
            Log.i("Aaa", "printlength:" + value + "
"); } @Override public void onRaiseException(int code, final String msg) throws RemoteException { Log.i("aaa", "onRaiseException: " + msg); runOnUiThread(new Runnable() { @Override public void run() { // info.append("onRaiseException = " + msg + "
"); } }); } }; init(); } private void init() { Intent intent = new Intent(); intent.setPackage("woyou.aidlservice.jiuiv5"); intent.setAction("woyou.aidlservice.jiuiv5.IWoyouService"); startService(intent); bindService(intent, servicect2, Context.BIND_AUTO_CREATE); } ServiceConnection servicect2 = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { woyouService = IWoyouService.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { woyouService = null; } };

3 인쇄를 위한 드라이버 호출

 Bitmap mBitmap;

private void rPrientTicket() {
    ThreadPoolManager.getInstance().executeTask(new Runnable() {
        @Override
        public void run() {

            if (mBitmap == null) {
                mBitmap = BitmapFactory.decodeResource(getResources(), R.raw.test);
            }
            try {
              //                ,       
                woyouService.printText("    :" + productNam + "
", callback); // } }); }

4 QR코드 생성

             ,                 
//     
private void showQR() {
    ThreadPoolManager.getInstance().executeTask(new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                //                     ,       imageview 
                //               
                Bitmap bitmap = BytesUtil.createBitmap(value, 240);
                iv_qr.setImageBitmap(bitmap);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
}

5 QR코드를 생성하는 스레드 탱크 관리 클래스

/**
  *      
  */
 public class ThreadPoolManager {
private ExecutorService service;
private ThreadPoolManager() {
    int num = Runtime.getRuntime().availableProcessors() * 20;
    service = Executors.newFixedThreadPool(num);
}
private static final ThreadPoolManager manager = new 
    ThreadPoolManager();
public static ThreadPoolManager getInstance() {
    return manager;
}
public void executeTask(Runnable runnable) {
    service.execute(runnable);
      }
      }   

QR코드 생성 키트

//          ,      imageview 
public static Bitmap createBitmap(String data,int size){
    try {
        Hashtable hints = new Hashtable();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        //      ,       
        BitMatrix bitMatrix = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, size, size, hints);
        int[] pixels = new int[size * size];
        //            ,          ,
        //  for            
        for (int y = 0; y < size; y++) {
            for (int x = 0; x < size; x++) {
                if (bitMatrix.get(x, y)) {
                    pixels[y * size + x] = 0xff000000;
                } else {
                    pixels[y * size + x] = 0xffffffff;
                }
            }
        }
        //          ,  ARGB_8888
        Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, size, 0, 0, size, size);

        return bitmap;

    } catch (WriterException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

요약: 배치의 ImageView 너비를 설정하여 필요한 크기의 QR코드를 표시할 수 있습니다.

좋은 웹페이지 즐겨찾기