package com.megvii.idcardlib.util; import android.content.Context; import android.graphics.Bitmap; import android.hardware.Camera; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.telephony.TelephonyManager; import android.util.Base64; import android.view.Gravity; import android.widget.Toast; import com.megvii.idcardlib.R; import com.megvii.idcardquality.IDCardQualityResult; import com.megvii.idcardquality.bean.IDCardAttr; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.UUID; /** * Created by binghezhouke on 15-8-12. */ public class Util { public static Toast toast; /** * 输出toast */ public static void showToast(Context context, String str) { if (context != null) { if (toast != null) { toast.cancel(); } toast = Toast.makeText(context, str, Toast.LENGTH_SHORT); // 可以控制toast显示的位�? toast.setGravity(Gravity.TOP, 0, 30); toast.show(); } } /** * 取消弹出toast */ public static void cancleToast(Context context) { if (context != null) { if (toast != null) { toast.cancel(); } } } public static String getUUIDString(Context mContext) { String KEY_UUID = "key_uuid"; SharedUtil sharedUtil = new SharedUtil(mContext); String uuid = sharedUtil.getStringValueByKey(KEY_UUID); if (uuid != null && uuid.trim().length() != 0) return uuid; uuid = UUID.randomUUID().toString(); uuid = Base64.encodeToString(uuid.getBytes(), Base64.DEFAULT); sharedUtil.saveStringValue(KEY_UUID, uuid); return uuid; } public static String getPhoneNumber(Context mContext) { TelephonyManager phoneMgr = (TelephonyManager) mContext .getSystemService(Context.TELEPHONY_SERVICE); return phoneMgr.getLine1Number(); } public static String getDeviceID(Context mContext) { TelephonyManager tm = (TelephonyManager) mContext .getSystemService(Context.TELEPHONY_SERVICE); return tm.getDeviceId(); } public static String getMacAddress(Context mContext) { WifiManager wifi = (WifiManager) mContext .getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); String address = info.getMacAddress(); if(address != null && address.length() > 0){ address = address.replace(":", ""); } return address; } public static Camera.Size getNearestRatioSize(Camera.Parameters para, final int screenWidth, final int screenHeight) { List<Camera.Size> supportedSize = para.getSupportedPreviewSizes(); for (Camera.Size tmp : supportedSize) { if (tmp.width == 1280 && tmp.height == 720) { return tmp; } } Collections.sort(supportedSize, new Comparator<Camera.Size>() { @Override public int compare(Camera.Size lhs, Camera.Size rhs) { int diff1 = (((int) ((1000 * (Math.abs(lhs.width / (float) lhs.height - screenWidth / (float) screenHeight))))) << 16) - lhs.width; int diff2 = (((int) (1000 * (Math.abs(rhs.width / (float) rhs.height - screenWidth / (float) screenHeight)))) << 16) - rhs.width; return diff1 - diff2; } }); return supportedSize.get(0); } public static String getTimeStr() { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmss"); return simpleDateFormat.format(new Date()); } public static void closeStreamSilently(OutputStream os) { if (os != null) { try { os.close(); } catch (IOException e) { } } } public static byte[] bmp2byteArr(Bitmap bmp) { if (bmp == null || bmp.isRecycled()) return null; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG,90, byteArrayOutputStream); Util.closeStreamSilently(byteArrayOutputStream); return byteArrayOutputStream.toByteArray(); } public static String errorType2HumanStr(IDCardQualityResult.IDCardFailedType type, IDCardAttr.IDCardSide side) { String result = null; switch (type) { case QUALITY_FAILED_TYPE_NOIDCARD: result = "请将身份证置于提示框内"; break; case QUALITY_FAILED_TYPE_BLUR: result = "请点击屏幕对焦"; break; case QUALITY_FAILED_TYPE_BRIGHTNESSTOOHIGH: result = "太亮"; break; case QUALITY_FAILED_TYPE_BRIGHTNESSTOOLOW: result = "太暗"; break; case QUALITY_FAILED_TYPE_OUTSIDETHEROI: result = "请将身份证与提示框对齐"; break; case QUALITY_FAILED_TYPE_SIZETOOLARGE: result = "请将身份证与提示框对齐"; break; case QUALITY_FAILED_TYPE_SIZETOOSMALL: result = "请将身份证与提示框对齐"; break; case QUALITY_FAILED_TYPE_SPECULARHIGHLIGHT: result = "请调整拍摄位置,以去除光斑"; break; case QUALITY_FAILED_TYPE_TILT: result = "请将身份证摆正"; break; case QUALITY_FAILED_TYPE_SHADOW: result = "请调整拍摄位置,以去除阴影"; break; case QUALITY_FAILED_TYPE_WRONGSIDE: if (side == IDCardAttr.IDCardSide.IDCARD_SIDE_BACK) result = "请翻到国徽面"; else { result = "请翻到人像面"; } break; } return result; } public static byte[] readModel(Context context) { InputStream inputStream = null; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int count = -1; try { inputStream = context.getResources().openRawResource(R.raw.idcardmodel); while ((count = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, 0, count); } byteArrayOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return byteArrayOutputStream.toByteArray(); } }