|  |  | 
 |  |  | import android.widget.TextView; | 
 |  |  | import android.widget.Toast; | 
 |  |  |  | 
 |  |  |  | 
 |  |  | import com.dayu.recharge.R; | 
 |  |  | import com.dayu.recharge.view.ViewfinderView; | 
 |  |  | import com.yunmai.cc.idcard.controler.CameraManager; | 
 |  |  | 
 |  |  | import com.yunmai.cc.idcard.controler.OcrManager; | 
 |  |  | import com.yunmai.cc.idcard.vo.IdCardInfoNew; | 
 |  |  |  | 
 |  |  | import java.io.UnsupportedEncodingException; | 
 |  |  |  | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 视频识别类 | 
 |  |  |  *  | 
 |  |  |  * | 
 |  |  |  * @author fangcm 2013-03-18 | 
 |  |  |  *  | 
 |  |  |  */ | 
 |  |  |  | 
 |  |  | public class CameraActivity extends BaseActivity implements SurfaceHolder.Callback { | 
 |  |  | public class CameraActivity extends Activity implements SurfaceHolder.Callback { | 
 |  |  |  | 
 |  |  |     private final String TAG = "cc_idcard"; | 
 |  |  |     private final String TAG = "cc_idcard"; | 
 |  |  |  | 
 |  |  |     private TextView tvTips; | 
 |  |  |     private SurfaceView sv_preview; | 
 |  |  |     private SurfaceHolder surfaceHolder; | 
 |  |  |     private CameraManager cameraManager; | 
 |  |  |     private boolean autoFoucs = true; | 
 |  |  |     private ViewfinderView finderView; | 
 |  |  |     private OcrManager ocrManager; | 
 |  |  |     private Rect rect; | 
 |  |  |     private boolean cameraError = false; | 
 |  |  |     // private boolean over = false; | 
 |  |  |     private TextView tvTips; | 
 |  |  |     private SurfaceView sv_preview; | 
 |  |  |     private SurfaceHolder surfaceHolder; | 
 |  |  |     private CameraManager cameraManager; | 
 |  |  |     private boolean autoFoucs = true; | 
 |  |  |     private ViewfinderView finderView; | 
 |  |  |     private OcrManager ocrManager; | 
 |  |  |     private Rect rect; | 
 |  |  |     private boolean cameraError = false; | 
 |  |  |     // private boolean over = false; | 
 |  |  |  | 
 |  |  |     private Button btnFlash, btnCancel; | 
 |  |  |     private ImageView imgTips; | 
 |  |  |     private ImageView iv, ivHead; | 
 |  |  |     private int typeFront = 1;// 0不区分 ,1正面,2背面 | 
 |  |  |     private Button btnFlash, btnCancel; | 
 |  |  |     private ImageView imgTips; | 
 |  |  |     private ImageView iv, ivHead; | 
 |  |  |     private int typeFront = 0;// 0不区分 ,1正面,2背面 | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     protected void onCreate(Bundle savedInstanceState) { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         super.onCreate(savedInstanceState); | 
 |  |  |         setContentView(R.layout.camera); | 
 |  |  |     @Override | 
 |  |  |     protected void onCreate(Bundle savedInstanceState) { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         super.onCreate(savedInstanceState); | 
 |  |  |         setContentView(R.layout.camera); | 
 |  |  |  | 
 |  |  |         typeFront = this.getIntent().getIntExtra("typeFront", 0); | 
 |  |  |         initView(); | 
 |  |  |         cameraManager = new CameraManager(getBaseContext(), mHandler); | 
 |  |  |         mCameraOpenThread.start(); | 
 |  |  |         try { | 
 |  |  |             mCameraOpenThread.join(); | 
 |  |  |             mCameraOpenThread = null; | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             // TODO Auto-generated catch block | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             cameraError = true; | 
 |  |  |         } | 
 |  |  |         if (cameraError) { | 
 |  |  |             Toast.makeText(getBaseContext(), "照相机未启动!", Toast.LENGTH_SHORT).show(); | 
 |  |  |             finish(); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         setParameters(); | 
 |  |  |         typeFront = this.getIntent().getIntExtra("typeFront", 0); | 
 |  |  |         initView(); | 
 |  |  |         cameraManager = new CameraManager(getBaseContext(), mHandler); | 
 |  |  |         mCameraOpenThread.start(); | 
 |  |  |         try { | 
 |  |  |             mCameraOpenThread.join(); | 
 |  |  |             mCameraOpenThread = null; | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             // TODO Auto-generated catch block | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             cameraError = true; | 
 |  |  |         } | 
 |  |  |         if (cameraError) { | 
 |  |  |             Toast.makeText(getBaseContext(), "照相机未启动!", Toast.LENGTH_SHORT).show(); | 
 |  |  |             finish(); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         setParameters(); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private Thread mCameraOpenThread = new Thread(new Runnable() { | 
 |  |  |         @Override | 
 |  |  |         public void run() { | 
 |  |  |             try { | 
 |  |  |                 cameraManager.openCamera(); | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 // TODO Auto-generated catch block | 
 |  |  |                 e.printStackTrace(); | 
 |  |  |                 cameraError = true; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |     private Thread mCameraOpenThread = new Thread(new Runnable() { | 
 |  |  |         @Override | 
 |  |  |         public void run() { | 
 |  |  |             try { | 
 |  |  |                 cameraManager.openCamera(); | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 // TODO Auto-generated catch block | 
 |  |  |                 e.printStackTrace(); | 
 |  |  |                 cameraError = true; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     private void setParameters() { | 
 |  |  |     private void setParameters() { | 
 |  |  |  | 
 |  |  |         WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); | 
 |  |  |         Display display = manager.getDefaultDisplay(); | 
 |  |  |         int wWidth = display.getWidth(); | 
 |  |  |         int wHeight = display.getHeight(); | 
 |  |  |         WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); | 
 |  |  |         Display display = manager.getDefaultDisplay(); | 
 |  |  |         int wWidth = display.getWidth(); | 
 |  |  |         int wHeight = display.getHeight(); | 
 |  |  |  | 
 |  |  |         cameraManager.setCameraFlashModel(Camera.Parameters.FLASH_MODE_OFF); | 
 |  |  |         cameraManager.setCameraFlashModel(Camera.Parameters.FLASH_MODE_OFF); | 
 |  |  |  | 
 |  |  |         float ps = wWidth * 1.0f / wHeight; | 
 |  |  |         cameraManager.setPreviewSize(ps); | 
 |  |  |         float ps = wWidth * 1.0f / wHeight; | 
 |  |  |         cameraManager.setPreviewSize(ps); | 
 |  |  |  | 
 |  |  |         int pWidth = cameraManager.getPreviewWidth(); | 
 |  |  |         int pHeight = cameraManager.getPreviewHeight(); | 
 |  |  |         if (pWidth == 0 || pHeight == 0) { | 
 |  |  |             Toast.makeText(getBaseContext(), "照相机未启动!!", Toast.LENGTH_SHORT).show(); | 
 |  |  |             finish(); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         Log.i(TAG, pWidth + "<--------W----Preview-----H------->" + pHeight); | 
 |  |  |         Log.i(TAG, wWidth + "<--------W----WindowManager-----H------->" + wHeight); | 
 |  |  |         int pWidth = cameraManager.getPreviewWidth(); | 
 |  |  |         int pHeight = cameraManager.getPreviewHeight(); | 
 |  |  |         if (pWidth == 0 || pHeight == 0) { | 
 |  |  |             Toast.makeText(getBaseContext(), "照相机未启动!!", Toast.LENGTH_SHORT).show(); | 
 |  |  |             finish(); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         Log.i(TAG, pWidth + "<--------W----Preview-----H------->" + pHeight); | 
 |  |  |         Log.i(TAG, wWidth + "<--------W----WindowManager-----H------->" + wHeight); | 
 |  |  |  | 
 |  |  |         int tempWidth = pWidth; | 
 |  |  |         int tempHeidht = pHeight; | 
 |  |  |         float x = 100.0f; | 
 |  |  |         int tempW = pWidth; | 
 |  |  |         int tempH = pHeight; | 
 |  |  |         if (wWidth > pWidth && wHeight > pHeight) { | 
 |  |  |             while (wWidth > tempW && wHeight > tempH) { | 
 |  |  |                 x++; | 
 |  |  |                 Log.d(TAG, "---xx----->" + x / 100.0); | 
 |  |  |                 tempW = (int) (pWidth * x / 100.0); | 
 |  |  |                 tempH = (int) (pHeight * x / 100.0); | 
 |  |  |                 if (wWidth > tempW && wHeight > tempH) { | 
 |  |  |                     tempWidth = tempW; | 
 |  |  |                     tempHeidht = tempH; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             Log.d(TAG, "<------11--wWidth > pWidth && wHeight > pHeight------>"); | 
 |  |  |         } else { | 
 |  |  |             while (tempWidth > wWidth || tempHeidht > wHeight) { | 
 |  |  |                 x--; | 
 |  |  |                 Log.d(TAG, "---xx----->" + x / 100.0); | 
 |  |  |                 tempWidth = (int) (pWidth * x / 100.0); | 
 |  |  |                 tempHeidht = (int) (pHeight * x / 100.0); | 
 |  |  |             } | 
 |  |  |             Log.d(TAG, "<-----22---tempWidth > wWidth || tempHeidht > wHeight------>"); | 
 |  |  |         } | 
 |  |  |         int tempWidth = pWidth; | 
 |  |  |         int tempHeidht = pHeight; | 
 |  |  |         float x = 100.0f; | 
 |  |  |         int tempW = pWidth; | 
 |  |  |         int tempH = pHeight; | 
 |  |  |         if (wWidth > pWidth && wHeight > pHeight) { | 
 |  |  |             while (wWidth > tempW && wHeight > tempH) { | 
 |  |  |                 x++; | 
 |  |  |                 Log.d(TAG, "---xx----->" + x / 100.0); | 
 |  |  |                 tempW = (int) (pWidth * x / 100.0); | 
 |  |  |                 tempH = (int) (pHeight * x / 100.0); | 
 |  |  |                 if (wWidth > tempW && wHeight > tempH) { | 
 |  |  |                     tempWidth = tempW; | 
 |  |  |                     tempHeidht = tempH; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             Log.d(TAG, "<------11--wWidth > pWidth && wHeight > pHeight------>"); | 
 |  |  |         } else { | 
 |  |  |             while (tempWidth > wWidth || tempHeidht > wHeight) { | 
 |  |  |                 x--; | 
 |  |  |                 Log.d(TAG, "---xx----->" + x / 100.0); | 
 |  |  |                 tempWidth = (int) (pWidth * x / 100.0); | 
 |  |  |                 tempHeidht = (int) (pHeight * x / 100.0); | 
 |  |  |             } | 
 |  |  |             Log.d(TAG, "<-----22---tempWidth > wWidth || tempHeidht > wHeight------>"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Log.d(TAG, tempWidth + "<--------W----setParameters-----H------->" + tempHeidht); | 
 |  |  |         // tempWidth = 854; | 
 |  |  |         // tempHeidht = 480; | 
 |  |  |         ViewGroup.LayoutParams lp = sv_preview.getLayoutParams(); | 
 |  |  |         lp.width = tempWidth; | 
 |  |  |         lp.height = tempHeidht; | 
 |  |  |         sv_preview.getHolder().setFixedSize(tempWidth, tempHeidht); | 
 |  |  |         sv_preview.setLayoutParams(lp); | 
 |  |  |         Log.d(TAG, tempWidth + "<--------W----setParameters-----H------->" + tempHeidht); | 
 |  |  |         // tempWidth = 854; | 
 |  |  |         // tempHeidht = 480; | 
 |  |  |         ViewGroup.LayoutParams lp = sv_preview.getLayoutParams(); | 
 |  |  |         lp.width = tempWidth; | 
 |  |  |         lp.height = tempHeidht; | 
 |  |  |         sv_preview.getHolder().setFixedSize(tempWidth, tempHeidht); | 
 |  |  |         sv_preview.setLayoutParams(lp); | 
 |  |  |  | 
 |  |  |         surfaceHolder = sv_preview.getHolder(); | 
 |  |  |         surfaceHolder.addCallback(CameraActivity.this); | 
 |  |  |         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); | 
 |  |  |         surfaceHolder = sv_preview.getHolder(); | 
 |  |  |         surfaceHolder.addCallback(CameraActivity.this); | 
 |  |  |         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); | 
 |  |  |  | 
 |  |  |         float[] img = finderView.initFinder(tempWidth, tempHeidht, mHandler, typeFront); | 
 |  |  |         float[] img = finderView.initFinder(tempWidth, tempHeidht, mHandler, typeFront); | 
 |  |  |  | 
 |  |  |         imgTips.setY(img[0]); | 
 |  |  |         imgTips.setX(img[1]); | 
 |  |  |         imgTips.setY(img[0]); | 
 |  |  |         imgTips.setX(img[1]); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void initView() { | 
 |  |  |         sv_preview = (SurfaceView) findViewById(R.id.camera_sv); | 
 |  |  |         finderView = (ViewfinderView) findViewById(R.id.camera_finderView); | 
 |  |  |         tvTips = (TextView) findViewById(R.id.tv_tips); | 
 |  |  |         btnCancel = (Button) findViewById(R.id.bt_cancel); | 
 |  |  |         btnFlash = (Button) findViewById(R.id.bt_flash); | 
 |  |  |         imgTips = (ImageView) findViewById(R.id.iv_tips); | 
 |  |  |         switch (typeFront) { | 
 |  |  |         case 0: | 
 |  |  |             imgTips.setVisibility(View.GONE); | 
 |  |  |             break; | 
 |  |  |         case 1: | 
 |  |  |             imgTips.setBackgroundResource(R.mipmap.people_face); | 
 |  |  |             break; | 
 |  |  |         case 2: | 
 |  |  |             imgTips.setBackgroundResource(R.mipmap.emblem); | 
 |  |  |             break; | 
 |  |  |     private void initView() { | 
 |  |  |         sv_preview = (SurfaceView) findViewById(R.id.camera_sv); | 
 |  |  |         finderView = (ViewfinderView) findViewById(R.id.camera_finderView); | 
 |  |  |         tvTips = (TextView) findViewById(R.id.tv_tips); | 
 |  |  |         btnCancel = (Button) findViewById(R.id.bt_cancel); | 
 |  |  |         btnFlash = (Button) findViewById(R.id.bt_flash); | 
 |  |  |         imgTips = (ImageView) findViewById(R.id.iv_tips); | 
 |  |  |         switch (typeFront) { | 
 |  |  |             case 0: | 
 |  |  |                 imgTips.setVisibility(View.GONE); | 
 |  |  |                 break; | 
 |  |  |             case 1: | 
 |  |  |                 imgTips.setBackgroundResource(R.mipmap.people_face); | 
 |  |  |                 break; | 
 |  |  |             case 2: | 
 |  |  |                 imgTips.setBackgroundResource(R.mipmap.emblem); | 
 |  |  |                 break; | 
 |  |  |  | 
 |  |  |         default: | 
 |  |  |             break; | 
 |  |  |         } | 
 |  |  |             default: | 
 |  |  |                 break; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         btnFlash.setOnClickListener(listener); | 
 |  |  |         btnCancel.setOnClickListener(listener); | 
 |  |  |     } | 
 |  |  |         btnFlash.setOnClickListener(listener); | 
 |  |  |         btnCancel.setOnClickListener(listener); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private boolean isFlashOn = false; | 
 |  |  |     private boolean isFlashOn = false; | 
 |  |  |  | 
 |  |  |     private OnClickListener listener = new OnClickListener() { | 
 |  |  |     private OnClickListener listener = new OnClickListener() { | 
 |  |  |  | 
 |  |  |         @Override | 
 |  |  |         public void onClick(View v) { | 
 |  |  |             // TODO Auto-generated method stub | 
 |  |  |             switch (v.getId()) { | 
 |  |  |             case R.id.bt_cancel: | 
 |  |  |                 setResult(998); | 
 |  |  |                 finish(); | 
 |  |  |                 break; | 
 |  |  |             case R.id.bt_flash: | 
 |  |  |                 if (isFlashOn) { | 
 |  |  |                     try { | 
 |  |  |                         if (cameraManager.closeFlashlight()) { | 
 |  |  |                             btnFlash.setBackgroundDrawable(getResources().getDrawable(R.mipmap.flash_on_s)); | 
 |  |  |                             isFlashOn = false; | 
 |  |  |                         } | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                         // TODO: handle exception | 
 |  |  |                     } | 
 |  |  |         @Override | 
 |  |  |         public void onClick(View v) { | 
 |  |  |             // TODO Auto-generated method stub | 
 |  |  |             switch (v.getId()) { | 
 |  |  |                 case R.id.bt_cancel: | 
 |  |  |                     setResult(998); | 
 |  |  |                     finish(); | 
 |  |  |                     break; | 
 |  |  |                 case R.id.bt_flash: | 
 |  |  |                     if (isFlashOn) { | 
 |  |  |                         try { | 
 |  |  |                             if (cameraManager.closeFlashlight()) { | 
 |  |  |                                 btnFlash.setBackgroundDrawable(getResources().getDrawable(R.mipmap.flash_on_s)); | 
 |  |  |                                 isFlashOn = false; | 
 |  |  |                             } | 
 |  |  |                         } catch (Exception e) { | 
 |  |  |                             // TODO: handle exception | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                 } else { | 
 |  |  |                     try { | 
 |  |  |                         if (cameraManager.openFlashlight()) { | 
 |  |  |                             btnFlash.setBackgroundDrawable(getResources().getDrawable(R.mipmap.flash_off_s)); | 
 |  |  |                             isFlashOn = true; | 
 |  |  |                         } | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                         // TODO: handle exception | 
 |  |  |                     } | 
 |  |  |                     } else { | 
 |  |  |                         try { | 
 |  |  |                             if (cameraManager.openFlashlight()) { | 
 |  |  |                                 btnFlash.setBackgroundDrawable(getResources().getDrawable(R.mipmap.flash_off_s)); | 
 |  |  |                                 isFlashOn = true; | 
 |  |  |                             } | 
 |  |  |                         } catch (Exception e) { | 
 |  |  |                             // TODO: handle exception | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |  | 
 |  |  |             default: | 
 |  |  |                 break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     }; | 
 |  |  |                 default: | 
 |  |  |                     break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     private Handler mHandler = new Handler() { | 
 |  |  |     private Handler mHandler = new Handler() { | 
 |  |  |  | 
 |  |  |         @Override | 
 |  |  |         public void handleMessage(Message msg) { | 
 |  |  |             // TODO Auto-generated method stub | 
 |  |  |             super.handleMessage(msg); | 
 |  |  |             switch (msg.what) { | 
 |  |  |             case OcrConstant.TAKE_PREVIEW_DATA_OK: | 
 |  |  |         @Override | 
 |  |  |         public void handleMessage(Message msg) { | 
 |  |  |             // TODO Auto-generated method stub | 
 |  |  |             super.handleMessage(msg); | 
 |  |  |             switch (msg.what) { | 
 |  |  |                 case OcrConstant.TAKE_PREVIEW_DATA_OK: | 
 |  |  |                     Log.d("yxl", "TAKE_PREVIEW_DATA_OK"); | 
 |  |  |                     if (ocrManager == null) { | 
 |  |  |                         ocrManager = new OcrManager(mHandler, CameraActivity.this); | 
 |  |  |                         try { | 
 |  |  |                             rect = cameraManager.getViewfinder(finderView.getFinder()); | 
 |  |  |                         } catch (Exception e) { | 
 |  |  |                             // TODO: handle exception | 
 |  |  |                             return; | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                 if (ocrManager == null) { | 
 |  |  |                     ocrManager = new OcrManager(mHandler, CameraActivity.this); | 
 |  |  |                     try { | 
 |  |  |                         rect = cameraManager.getViewfinder(finderView.getFinder()); | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                         // TODO: handle exception | 
 |  |  |                         return; | 
 |  |  |                     } | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 byte[] data_p = (byte[]) msg.obj; | 
 |  |  |                 if (data_p != null && data_p.length > 0) { | 
 |  |  |                     // if(over){ | 
 |  |  |                     // return; | 
 |  |  |                     // } | 
 |  |  |                     ocrManager.recognIDCard(data_p, cameraManager.getPreviewWidth(), cameraManager.getPreviewHeight(), | 
 |  |  |                             rect, 0, typeFront); | 
 |  |  |                     mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 100); | 
 |  |  |                 } else { | 
 |  |  |                     finderView.setLineRect(0); | 
 |  |  |                     Toast.makeText(getBaseContext(), "相机出现问题,请重启手机!", Toast.LENGTH_SHORT).show(); | 
 |  |  |                     mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |             case OcrConstant.RECOGN_OK: | 
 |  |  |                 mHandler.removeMessages(OcrConstant.TAKE_PREVIEW_DATA_OK); | 
 |  |  |                 mHandler.removeMessages(OcrConstant.START_AUTOFOCUS); | 
 |  |  |                     byte[] data_p = (byte[]) msg.obj; | 
 |  |  |                     if (data_p != null && data_p.length > 0) { | 
 |  |  |                         // if(over){ | 
 |  |  |                         // return; | 
 |  |  |                         // } | 
 |  |  |                         ocrManager.recognIDCard(data_p, cameraManager.getPreviewWidth(), cameraManager.getPreviewHeight(), | 
 |  |  |                                 rect, 0, typeFront); | 
 |  |  |                         mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 100); | 
 |  |  |                     } else { | 
 |  |  |                         finderView.setLineRect(0); | 
 |  |  |                         Toast.makeText(getBaseContext(), "相机出现问题,请重启手机!", Toast.LENGTH_SHORT).show(); | 
 |  |  |                         mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 case OcrConstant.RECOGN_OK: | 
 |  |  |                     Log.d("yxl", "RECOGN_OK"); | 
 |  |  |                     mHandler.removeMessages(OcrConstant.TAKE_PREVIEW_DATA_OK); | 
 |  |  |                     mHandler.removeMessages(OcrConstant.START_AUTOFOCUS); | 
 |  |  | //                String imgPath = "/sdcard/aidtest.jpg"; | 
 |  |  | //                String headPath = "/sdcard/aidheadtest.jpg"; | 
 |  |  |  | 
 |  |  |                 byte[] headPath = new byte[2048 * 1024 * 3]; | 
 |  |  |                 byte[] imgPath = new byte[2048 * 1024 * 3]; | 
 |  |  |                 int[] headRect = new int[8]; | 
 |  |  |                 int[] imgRect = new int[8]; | 
 |  |  |                     byte[] headPath = new byte[2048 * 1024 * 2]; | 
 |  |  |                     byte[] imgPath = new byte[2048 * 1024 * 2]; | 
 |  |  |                     int[] headRect = new int[8]; | 
 |  |  |                     int[] imgRect = new int[8]; | 
 |  |  |  | 
 |  |  |                 IdCardInfoNew idCardInfo = ocrManager.getResultToByte(imgPath, imgRect, headPath, headRect); | 
 |  |  |                     IdCardInfoNew idCardInfo = ocrManager.getResultToByte(imgPath, imgRect, headPath, headRect); | 
 |  |  |                     try { | 
 |  |  |                         String OCRResult = new String(idCardInfo.getCharInfo(), "gbk"); | 
 |  |  |                         Intent intent = new Intent(); | 
 |  |  |                         intent.putExtra("OCRResult", OCRResult); | 
 |  |  |                         setResult(RESULT_OK, intent); | 
 |  |  |                     } catch (UnsupportedEncodingException e) { | 
 |  |  |                         throw new RuntimeException(e); | 
 |  |  |                     } | 
 |  |  | //                IdCardInfo idCardInfo = ocrManager.getResult(imgPath, headPath); | 
 |  |  |                 Intent data2 = new Intent(); | 
 |  |  |                 data2.putExtra("idcardinfo", idCardInfo); | 
 |  |  |                 setResult(200, data2); | 
 |  |  | //                AppDemo.setResult(idCardInfo); | 
 |  |  | //                Intent data2 = new Intent(); | 
 |  |  | //                data2.putExtra("idcardinfo", idCardInfo); | 
 |  |  | //                setResult(200, data2); | 
 |  |  |                     finish(); | 
 |  |  |                     break; | 
 |  |  |                 case OcrConstant.REPEAT_AUTOFOCUS: | 
 |  |  |                     Log.d("yxl", "REPEAT_AUTOFOCUS"); | 
 |  |  |  | 
 |  |  |                 finish(); | 
 |  |  |                     cameraManager.autoFoucs(); | 
 |  |  |                     mHandler.sendEmptyMessageDelayed(OcrConstant.REPEAT_AUTOFOCUS, 2000); | 
 |  |  |                     break; | 
 |  |  |                 case OcrConstant.RECOGN_EG_TIME_OUT: | 
 |  |  |                     Log.d("yxl", "RECOGN_EG_TIME_OUT"); | 
 |  |  |                     Toast.makeText(getBaseContext(), "引擎过期,请尽快更新!", Toast.LENGTH_LONG).show(); | 
 |  |  |                     finish(); | 
 |  |  |                     break; | 
 |  |  |                 case OcrConstant.RECOGN_EG_LICENSE: | 
 |  |  |                     Log.d("yxl", "RECOGN_EG_LICENSE"); | 
 |  |  |  | 
 |  |  |                 break; | 
 |  |  |             case OcrConstant.REPEAT_AUTOFOCUS: | 
 |  |  |                 cameraManager.autoFoucs(); | 
 |  |  |                 mHandler.sendEmptyMessageDelayed(OcrConstant.REPEAT_AUTOFOCUS, 2000); | 
 |  |  |                 break; | 
 |  |  |             case OcrConstant.RECOGN_EG_TIME_OUT: | 
 |  |  |                 Toast.makeText(getBaseContext(), "引擎过期,请尽快更新!", Toast.LENGTH_LONG).show(); | 
 |  |  |                 finish(); | 
 |  |  |                 break; | 
 |  |  |             case OcrConstant.RECOGN_EG_LICENSE: | 
 |  |  |                 int ret = -1; | 
 |  |  |                 if (msg.obj != null) { | 
 |  |  |                     ret = (Integer) msg.obj; | 
 |  |  |                 } | 
 |  |  |                 Toast.makeText(getBaseContext(), "授权失败-->" + ret, Toast.LENGTH_LONG).show(); | 
 |  |  |                 finish(); | 
 |  |  |                 break; | 
 |  |  |             case OcrConstant.RECOGN_EG_INIT_ERROR: | 
 |  |  |                 Toast.makeText(getBaseContext(), "引擎初始化失败!", Toast.LENGTH_LONG).show(); | 
 |  |  |                 finish(); | 
 |  |  |                 break; | 
 |  |  |             case OcrConstant.START_AUTOFOCUS: | 
 |  |  |                 if (autoFoucs) { | 
 |  |  |                     cameraManager.autoFoucs(); | 
 |  |  |                     autoFoucs = false; | 
 |  |  |                     mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); | 
 |  |  |                     mHandler.sendEmptyMessageDelayed(OcrConstant.REPEAT_AUTOFOCUS, 1500); | 
 |  |  |                 } else { | 
 |  |  |                     cameraManager.autoFocusAndPreviewCallback(); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |             case OcrConstant.RECOGN_LINE_IN_RECT: | 
 |  |  |                 int restult = (Integer) msg.obj; | 
 |  |  |                 finderView.setLineRect(restult); | 
 |  |  |                 break; | 
 |  |  |             case OcrConstant.RECOGN_TIPS: | 
 |  |  |                 int tips = (Integer) msg.obj; | 
 |  |  |                 switch (tips) { | 
 |  |  |                 case 1000: | 
 |  |  |                     tvTips.setText("请将身份证置于此区域\r\n尝试对齐边缘"); | 
 |  |  |                     break; | 
 |  |  |                 case 1001: | 
 |  |  |                     tvTips.setText("距离稍近,请尝试远点"); | 
 |  |  |                     break; | 
 |  |  |                 case 1002: | 
 |  |  |                     tvTips.setText("距离稍远,请尝试靠近"); | 
 |  |  |                     break; | 
 |  |  |                 case 1003: | 
 |  |  |                     // tvTips.setText("图像模糊,请调整距离"); | 
 |  |  |                     break; | 
 |  |  |                 case 1004: | 
 |  |  |                     tvTips.setText("图像倾斜,请保持水平拍摄"); | 
 |  |  |                     break; | 
 |  |  |                 case 1005: | 
 |  |  |                     tvTips.setText("请将身份证置于此区域\r\n尝试对齐边缘"); | 
 |  |  |                     break; | 
 |  |  |                 case 1006: | 
 |  |  |                     tvTips.setText("请将身份证正面至于此区域"); | 
 |  |  |                     break; | 
 |  |  |                 case 1007: | 
 |  |  |                     tvTips.setText("请将身份证反面至于此区域"); | 
 |  |  |                     break; | 
 |  |  |                     int ret = -1; | 
 |  |  |                     if (msg.obj != null) { | 
 |  |  |                         ret = (Integer) msg.obj; | 
 |  |  |                     } | 
 |  |  |                     Toast.makeText(getBaseContext(), "授权失败-->" + ret, Toast.LENGTH_LONG).show(); | 
 |  |  |                     finish(); | 
 |  |  |                     break; | 
 |  |  |                 case OcrConstant.RECOGN_EG_INIT_ERROR: | 
 |  |  |                     Log.d("yxl", "RECOGN_EG_INIT_ERROR"); | 
 |  |  |  | 
 |  |  |                 default: | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |                     Toast.makeText(getBaseContext(), "引擎初始化失败!", Toast.LENGTH_LONG).show(); | 
 |  |  |                     finish(); | 
 |  |  |                     break; | 
 |  |  |                 case OcrConstant.START_AUTOFOCUS: | 
 |  |  |                     Log.d("yxl", "START_AUTOFOCUS"); | 
 |  |  |  | 
 |  |  |                 break; | 
 |  |  |             default: | 
 |  |  |                 cameraManager.initDisplay(); | 
 |  |  |                 mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); | 
 |  |  |                 Toast.makeText(getBaseContext(), "<>" + msg.what, Toast.LENGTH_SHORT).show(); | 
 |  |  |                 break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |                     if (autoFoucs) { | 
 |  |  |                         cameraManager.autoFoucs(); | 
 |  |  |                         autoFoucs = false; | 
 |  |  |                         mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); | 
 |  |  |                         mHandler.sendEmptyMessageDelayed(OcrConstant.REPEAT_AUTOFOCUS, 1500); | 
 |  |  |                     } else { | 
 |  |  |                         cameraManager.autoFocusAndPreviewCallback(); | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 case OcrConstant.RECOGN_LINE_IN_RECT: | 
 |  |  |                     Log.d("yxl", "RECOGN_LINE_IN_RECT"); | 
 |  |  |  | 
 |  |  |     }; | 
 |  |  |                     int restult = (Integer) msg.obj; | 
 |  |  |                     finderView.setLineRect(restult); | 
 |  |  |                     break; | 
 |  |  |                 case OcrConstant.RECOGN_TIPS: | 
 |  |  |                     Log.d("yxl", "RECOGN_TIPS"); | 
 |  |  |                     int tips = (Integer) msg.obj; | 
 |  |  |                     switch (tips) { | 
 |  |  |                         case 1000: | 
 |  |  |                             tvTips.setText("请将身份证置于此区域\r\n尝试对齐边缘"); | 
 |  |  |                             break; | 
 |  |  |                         case 1001: | 
 |  |  |                             tvTips.setText("距离稍近,请尝试远点"); | 
 |  |  |                             break; | 
 |  |  |                         case 1002: | 
 |  |  |                             tvTips.setText("距离稍远,请尝试靠近"); | 
 |  |  |                             break; | 
 |  |  |                         case 1003: | 
 |  |  |                             // tvTips.setText("图像模糊,请调整距离"); | 
 |  |  |                             break; | 
 |  |  |                         case 1004: | 
 |  |  |                             tvTips.setText("图像倾斜,请保持水平拍摄"); | 
 |  |  |                             break; | 
 |  |  |                         case 1005: | 
 |  |  |                             tvTips.setText("请将身份证置于此区域\r\n尝试对齐边缘"); | 
 |  |  |                             break; | 
 |  |  |                         case 1006: | 
 |  |  |                             tvTips.setText("请将身份证正面至于此区域"); | 
 |  |  |                             break; | 
 |  |  |                         case 1007: | 
 |  |  |                             tvTips.setText("请将身份证反面至于此区域"); | 
 |  |  |                             break; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void surfaceCreated(SurfaceHolder holder) { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         Log.d(TAG, "surfaceCreated"); | 
 |  |  |         if (!cameraManager.cameraOpened()) { | 
 |  |  |             cameraManager.openCamera(); | 
 |  |  |             setParameters(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |                         default: | 
 |  |  |                             break; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         if (holder.getSurface() == null) { | 
 |  |  |             Log.d(TAG, "holder.getSurface() == null"); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         Log.v(TAG, "surfaceChanged. w=" + width + ". h=" + height); | 
 |  |  |         surfaceHolder = holder; | 
 |  |  |         cameraManager.setPreviewDisplay(surfaceHolder); | 
 |  |  |         cameraManager.initDisplay(); | 
 |  |  |         mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); | 
 |  |  |                     break; | 
 |  |  |                 default: | 
 |  |  |                     Log.d("yxl", "default"); | 
 |  |  |                     cameraManager.initDisplay(); | 
 |  |  |                     mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); | 
 |  |  |                     Toast.makeText(getBaseContext(), "<>" + msg.what, Toast.LENGTH_SHORT).show(); | 
 |  |  |                     break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void surfaceDestroyed(SurfaceHolder holder) { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         Log.d(TAG, "surfaceDestroyed"); | 
 |  |  |         try { | 
 |  |  |             cameraManager.closeCamera(); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             // TODO: handle exception | 
 |  |  |         } | 
 |  |  |     @Override | 
 |  |  |     public void surfaceCreated(SurfaceHolder holder) { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         Log.d(TAG, "surfaceCreated"); | 
 |  |  |         if (!cameraManager.cameraOpened()) { | 
 |  |  |             cameraManager.openCamera(); | 
 |  |  |             setParameters(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |         surfaceHolder = null; | 
 |  |  |     } | 
 |  |  |     @Override | 
 |  |  |     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         if (holder.getSurface() == null) { | 
 |  |  |             Log.d(TAG, "holder.getSurface() == null"); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         Log.v(TAG, "surfaceChanged. w=" + width + ". h=" + height); | 
 |  |  |         surfaceHolder = holder; | 
 |  |  |         cameraManager.setPreviewDisplay(surfaceHolder); | 
 |  |  |         cameraManager.initDisplay(); | 
 |  |  |         mHandler.sendEmptyMessageDelayed(OcrConstant.START_AUTOFOCUS, 500); | 
 |  |  |  | 
 |  |  |     private void finishAll() { | 
 |  |  |         if (cameraManager != null) { | 
 |  |  |             try { | 
 |  |  |                 cameraManager.closeCamera(); | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 // TODO: handle exception | 
 |  |  |             } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     @Override | 
 |  |  |     public void surfaceDestroyed(SurfaceHolder holder) { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         Log.d(TAG, "surfaceDestroyed"); | 
 |  |  |         try { | 
 |  |  |             cameraManager.closeCamera(); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             // TODO: handle exception | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |         surfaceHolder = null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     protected void onDestroy() { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         super.onDestroy(); | 
 |  |  |         mHandler.removeMessages(OcrConstant.TAKE_PREVIEW_DATA_OK); | 
 |  |  |         mHandler.removeMessages(OcrConstant.START_AUTOFOCUS); | 
 |  |  |         finishAll(); | 
 |  |  |     private void finishAll() { | 
 |  |  |         if (cameraManager != null) { | 
 |  |  |             try { | 
 |  |  |                 cameraManager.closeCamera(); | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 // TODO: handle exception | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     protected void onDestroy() { | 
 |  |  |         // TODO Auto-generated method stub | 
 |  |  |         super.onDestroy(); | 
 |  |  |         mHandler.removeMessages(OcrConstant.TAKE_PREVIEW_DATA_OK); | 
 |  |  |         mHandler.removeMessages(OcrConstant.START_AUTOFOCUS); | 
 |  |  |         finishAll(); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |