package com.basic.project.idcardservice; import android.app.Service; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.IBinder; import android.os.SystemClock; import android.util.Log; import android.widget.Toast; import com.basic.project.idcardservice.idcard.AppConfig; import com.basic.project.idcardservice.idcard.FileStorageHelper; import com.basic.project.idcardservice.idcard.ReadUtil; import com.byid.android.IDCard; import java.io.ByteArrayOutputStream; import java.io.Serializable; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.locks.Lock; public class ReadIDCardService extends Service { private volatile boolean inReader = false; //1是usb模式 0是串口模式 5.1.1 public ReadUtil readUtil; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { close = false; FileStorageHelper.copyFilesFromRaw(this, R.raw.base, "base.dat", AppConfig.RootFile); FileStorageHelper.copyFilesFromRaw(this, R.raw.license, "license.lic", AppConfig.RootFile); readUtil = new ReadUtil(this, 1); Log.e("project.id.card", "onCreate" + Thread.currentThread().getId()); } @Override public int onStartCommand(Intent intent, int flags, int startId) { String type = intent.getStringExtra("type"); Log.e("project.id.card", "onStartCommand " + Thread.currentThread().getId() + " " + type); switch (type) { case "start_service": startReader(); break; case "stop_service": stopReader(); break; case "close_service": closeReader(); break; default: break; } return super.onStartCommand(intent, flags, startId); } private boolean close = false; private void closeReader() { synchronized (this) { if (!close) { close = true; } else { return; } } inReader = false; Log.e("project.id.card", "closeReader " + Thread.currentThread().getId()); readUtil.closeUSBDevice(); Intent i = new Intent(); i.putExtra("close", true); i.setPackage("com.basic.security"); i.setAction("read.id.card.data"); sendBroadcast(i); stopSelf(); } private void startReader() { if (!inReader) { Log.e("project.id.card", "start"); inReader = true; new Thread(new Runnable() { @Override public void run() { while (inReader) { SystemClock.sleep(5*1000); if (readUtil.isPort()) { Log.e("project.id.card", "1"); IDCard idCard = readUtil.readCard(); Log.e("project.id.card", "2"); if (idCard != null) { Log.e("project.id.card", idCard.getIdNum()); Bitmap headBitmap = BitmapFactory.decodeFile(idCard.getIdPhoto()); IdCard c = new IdCard(); c.birthday = getTimeStamp(idCard.getIdDate(), "yyyyMMdd"); c.cardNumber = idCard.getIdNum(); c.gender = idCard.getIdSex(); c.name = idCard.getIdName(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); headBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); c.jpgData = stream.toByteArray(); Intent i = new Intent(); i.putExtra("birthday", c.birthday); i.putExtra("cardNumber", c.cardNumber); i.putExtra("gender", c.gender); i.putExtra("name", c.name); i.putExtra("jpgData", c.jpgData); i.setPackage("com.basic.security"); i.setAction("read.id.card.data"); sendBroadcast(i); } Log.e("project.id.card", "3"); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } Log.e("project.id.card", "4"); } else { Log.e("project.id.card", "连接usb设备失败,开始关闭"); //Toast.makeText(getApplicationContext(), "连接usb设备失败", Toast.LENGTH_SHORT).show(); closeReader(); } } } }).start(); } else { Log.e("project.id.card", "inReader = true!"); } } private void stopReader() { if (inReader) { Log.e("project.id.card", "stop"); inReader = false; } else { Log.e("project.id.card", "inReader = false!"); } } private static long getTimeStamp(String time, String format) { SimpleDateFormat dateFormat = new SimpleDateFormat(format); Date date = new Date(); try { date = dateFormat.parse(time); } catch (ParseException e) { e.printStackTrace(); } return date.getTime(); } }