VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/BaseApplication.java
@@ -98,5 +98,15 @@ return !connected; } public boolean networkAvailable() { boolean connected = false; ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) { connected = true; } return connected; } } VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java
@@ -128,7 +128,6 @@ } initDb(); initSqlMap(); TestDao.getInstance().test(); } public static MainActivity getInstance() { VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/dialog/SurveillancePhotoDialog.java
@@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; import cn.com.basic.face.base.BaseApplication; import cn.com.basic.face.base.MainActivity; import cn.com.basic.face.dialog.wheelview.adapter.BaseWheelAdapter; import cn.com.basic.face.dialog.wheelview.widget.WheelView; @@ -26,6 +27,7 @@ import cn.com.basic.face.util.Constant; import cn.com.basic.face.util.OkClickedListener; import cn.com.basic.face.util.SurveillanceQueryItemUtil; import cn.com.basic.face.util.UnknownSurveillanceQueryItemUtil; import cn.com.basic.face.widget.surveilance.SurveillancePhotoSelectListView; public class SurveillancePhotoDialog extends PopupWindow { @@ -39,10 +41,18 @@ View view = LayoutInflater.from(MainActivity.getInstance()).inflate(R.layout.dialog_surveillance_photo_select,null); ViewUtils.inject(this, view); if (CommonVariables.Register.VISITOR_REGISTER_SELECTED) { dialog_surveillance_photo_select_list_view.show(SurveillanceQueryItemUtil.getInstance().getAllUnregisterVisitorTwoRowsForSelect(selectedId)); if (BaseApplication.getInstance().networkAvailable()) { if (CommonVariables.Register.VISITOR_REGISTER_SELECTED) { dialog_surveillance_photo_select_list_view.show(SurveillanceQueryItemUtil.getInstance().getAllUnregisterVisitorTwoRowsForSelect(selectedId)); } else { dialog_surveillance_photo_select_list_view.show(SurveillanceQueryItemUtil.getInstance().getAllUnregisterAttenderTwoRowsForSelect(selectedId)); } } else { dialog_surveillance_photo_select_list_view.show(SurveillanceQueryItemUtil.getInstance().getAllUnregisterAttenderTwoRowsForSelect(selectedId)); if (CommonVariables.Register.VISITOR_REGISTER_SELECTED) { dialog_surveillance_photo_select_list_view.show(UnknownSurveillanceQueryItemUtil.getInstance().getAllUnregisterVisitorTwoRowsForSelect(selectedId)); } else { dialog_surveillance_photo_select_list_view.show(UnknownSurveillanceQueryItemUtil.getInstance().getAllUnregisterAttenderTwoRowsForSelect(selectedId)); } } setTitleAndList(type); WheelView.WheelViewStyle style = new WheelView.WheelViewStyle(); VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/common/CommonVariables.java
@@ -73,6 +73,7 @@ public static final int VISIT_ATTENDANCE_IN = 5; public static final int VISIT_ATTENDANCE_OUT = 6; public static final int VISIT_ATTENDANCE_BLANK = 7; public static final int VISIT_UNKNOWN_ITEM_TYPE = 8; public static final int REGISTER_CELL_VIEW_INDEX = 0; public static final int CHECK_IN_CELL_VIEW_INDEX = 1; @@ -112,7 +113,7 @@ public static boolean FACE_SERVER = false; public static boolean ID_CARD = false; public static boolean EMULATOR = false; public static boolean EMULATOR = true; public static boolean androidOffline() { return true; VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/discern/query/item/UnknownQueryItem.java
New file @@ -0,0 +1,32 @@ package cn.com.basic.face.discern.query.item; public class UnknownQueryItem { private String rawDataPath; private String cameraInOrOut; private String createTime; public String getRawDataPath() { return rawDataPath; } public void setRawDataPath(String rawDataPath) { this.rawDataPath = rawDataPath; } public String getCameraInOrOut() { return cameraInOrOut; } public void setCameraInOrOut(String cameraInOrOut) { this.cameraInOrOut = cameraInOrOut; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; } } VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/DictionaryMng.java
@@ -7,6 +7,7 @@ import cn.com.basic.face.dialog.CountryDialog; import cn.com.basic.face.dialog.SelectDialog; import cn.com.basic.face.discern.query.condition.DictionaryQueryCondition; import cn.com.basic.face.service.sqlite.TestDao; import cn.com.basic.face.util.AppApi; import org.xutils.http.RequestParams; @@ -37,6 +38,7 @@ if (!BaseApplication.deviceAvailable) { return; } TestDao.getInstance().test(); loadCountries(); loadIdTypeList(); loadGenderList(); VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/SurveillanceMng.java
@@ -11,9 +11,12 @@ import cn.com.basic.face.base.MainActivity; import cn.com.basic.face.discern.common.BaseCommonCallBack; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; import cn.com.basic.face.discern.query.item.UnknownQueryItem; import cn.com.basic.face.service.sqlite.SurveillanceDao; import cn.com.basic.face.util.AppApi; import cn.com.basic.face.util.FileUtil; import cn.com.basic.face.util.SurveillanceQueryItemUtil; import cn.com.basic.face.util.UnknownSurveillanceQueryItemUtil; public class SurveillanceMng { @@ -31,7 +34,11 @@ MainActivity.getInstance().runOnUiThread(new Runnable() { @Override public void run() { SurveillanceQueryItemUtil.getInstance().removeTimeoutItemAndShow(); if (BaseApplication.getInstance().networkAvailable()) { SurveillanceQueryItemUtil.getInstance().removeTimeoutItemAndShow(); } else { UnknownSurveillanceQueryItemUtil.getInstance().removeTimeoutItemAndShow(); } } }); Thread.sleep(1000*60*5); @@ -93,4 +100,14 @@ } } public void sendOfflineUnknownToInternet() { UnknownQueryItem item = SurveillanceDao.getInstance().readOfflineUnknownFromLocal(); if (item == null) { return; } } } VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/service/sqlite/SurveillanceDao.java
@@ -1,5 +1,7 @@ package cn.com.basic.face.service.sqlite; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import java.text.SimpleDateFormat; @@ -7,9 +9,13 @@ import java.util.List; import java.util.UUID; import cn.com.basic.face.base.Config; import cn.com.basic.face.discern.query.item.SurveillancePhotoQueryItem; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; import cn.com.basic.face.discern.query.item.UnknownQueryItem; import cn.com.basic.face.util.FileUtil; import cn.com.basic.face.util.SurveillanceQueryItemUtil; import cn.com.basic.face.util.UnknownSurveillanceQueryItemUtil; public class SurveillanceDao { @@ -17,35 +23,52 @@ public static SurveillanceDao getInstance() { return instance; } //companyId //offline_ (headPicture, cameraInOrOut, createTime, visitId) public void addBitmap(final List<SurveillanceQueryItem> bitmapList, final byte[] byteArray, int len, final String cameraInOrOut, byte[] surveillancePhotoBytes) { for (SurveillanceQueryItem item : bitmapList) { Bitmap bitmap = item.getBitmap(); String fileName = UUID.randomUUID().toString()+".bmp"; FileUtil.writeToFile(fileName, new byte[]{}); public void saveOfflineUnknownToLocal(final List<SurveillanceQueryItem> bitmapList, final byte[] rawData, final String cameraInOrOut) { if (bitmapList == null || bitmapList.size() == 0) { return; } String rawDataFileName = UUID.randomUUID().toString()+""; FileUtil.writeToFile(rawDataFileName, rawData); String headPicture = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String createTime = sdf.format(new Date()); String sql = "insert offline_temp(head_picture, camera_in_or_out, create_time, visit_id) values('"+ headPicture+"','"+ String sql = "insert offline_unknown(raw_data_path, camera_in_or_out, create_time) values('"+ rawDataFileName+"','"+ cameraInOrOut+"','"+ createTime+"','"+ "null" +"')"; //存入数据库 //把图片存入本地文件 "null" +"')"; SQLiteDatabase db = Config.sqlMap.getDb(); db.beginTransaction(); db.execSQL(sql); db.endTransaction(); UnknownSurveillanceQueryItemUtil.getInstance().addItems(bitmapList); //人员注册可以选择本地图片 //同步临时表 //同步访客登记表 //删除本地文件(循环删除) } public UnknownQueryItem readOfflineUnknownFromLocal() { UnknownQueryItem item = null; String sql = "select raw_data,camera_in_or_out,create_time from offline_unknown order by create_time create_time limit 1"; SQLiteDatabase db = Config.sqlMap.getDb(); db.beginTransaction(); Cursor c = db.rawQuery(sql, new String[]{}); if (c.moveToFirst()) { item = new UnknownQueryItem(); item.setRawDataPath(c.getString(c.getColumnIndex("raw_data_path"))); item.setCameraInOrOut(c.getString(c.getColumnIndex("camera_in_or_out"))); item.setCreateTime(c.getString(c.getColumnIndex("create_time"))); } c.close(); db.endTransaction(); return item; } } VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/FileUtil.java
@@ -13,6 +13,16 @@ public static File writeToFile(String fileName, byte[] fileBytes) { try { writeToFile(fileName, fileBytes, 0, fileBytes.length); }catch (Exception e) { e.printStackTrace(); } return null; } public static File writeToFile(String fileName, byte[] fileBytes, int offset, int size) { try { if (fileBytes == null) { fileBytes = new byte[]{}; } @@ -24,7 +34,7 @@ } file.createNewFile(); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(dir, fileName))); bos.write(fileBytes); bos.write(fileBytes, offset, size); bos.flush(); bos.close(); return new File(dir, fileName); VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/RtspFaceNative.java
@@ -1,18 +1,17 @@ package cn.com.basic.face.util; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import android.widget.ImageButton; import android.graphics.Bitmap; import android.widget.ImageView; import java.util.Date; import java.util.List; import cn.com.basic.face.base.BaseApplication; import cn.com.basic.face.discern.common.CommonVariables; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; import cn.com.basic.face.service.SurveillanceMng; import cn.com.basic.face.service.sqlite.SurveillanceDao; import java.nio.ByteBuffer; @@ -144,16 +143,23 @@ //byteBuffer.rewind(); bitmap.copyPixelsFromBuffer(byteBuffer); // String str = Base64.encodeToString(item.image, offset, size, Base64.DEFAULT); // System.out.println(str.length()); // System.out.println(str); // surveillanceQueryItem.setBase64Image(str); surveillanceQueryItem.setNativeImg(item); surveillanceQueryItem.setBitmap(bitmap); surveillanceQueryItem.setWidth(item.width+""); surveillanceQueryItem.setHeight(item.height+""); surveillanceQueryItem.setCreateTime(new Date()); surveillanceQueryItem.setInOrOutCamera(cameraIdx+""); if (BaseApplication.getInstance().networkNotAvailable()) { surveillanceQueryItem.setRegisterOrCheckIn(CommonVariables.Surveillance.VISIT_UNKNOWN_ITEM_TYPE); } bitmapList.add(surveillanceQueryItem); } SurveillanceMng.getInstance().addBitmap(bitmapList, faceListPb.arr, s, cameraIdx+"", new byte[]{}); if (BaseApplication.getInstance().networkAvailable()) { SurveillanceMng.getInstance().addBitmap(bitmapList, faceListPb.arr, s, cameraIdx+"", new byte[]{}); } else { SurveillanceDao.getInstance().saveOfflineUnknownToLocal(bitmapList, faceListPb.arr, cameraIdx+""); } }catch(Exception e){ e.printStackTrace(); VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/util/UnknownSurveillanceQueryItemUtil.java
New file @@ -0,0 +1,53 @@ package cn.com.basic.face.util; import java.util.ArrayList; import java.util.Date; import java.util.List; import cn.com.basic.face.discern.common.CommonVariables; import cn.com.basic.face.discern.query.item.SurveillanceQueryItem; import cn.com.basic.face.fragment.SurveillanceFragment; public class UnknownSurveillanceQueryItemUtil { private static UnknownSurveillanceQueryItemUtil instance = new UnknownSurveillanceQueryItemUtil(); public static UnknownSurveillanceQueryItemUtil getInstance() { return instance; } List<SurveillanceQueryItem> allItems = new ArrayList<>(); public void addItems(List<SurveillanceQueryItem> unknownItems) { allItems.addAll(unknownItems); } public void removeTimeoutItemAndShow() { List itemsToRemove = new ArrayList(); for (SurveillanceQueryItem item : allItems) { if (item.getRegisterOrCheckIn() == CommonVariables.Surveillance.VISIT_UNKNOWN_ITEM_TYPE) { Date now = new Date(); Date createTime = item.getCreateTime(); double minutes = (now.getTime() - createTime.getTime())*1.0 / 1000 / 60; if (minutes >= 5) { itemsToRemove.add(item); } } } allItems.removeAll(itemsToRemove); SurveillanceFragment.getInstance().get_fragment_supervisory_bottom_visitor_list_view().show(UnknownSurveillanceQueryItemUtil.getInstance().getUnknownTwoRows()); SurveillanceFragment.getInstance().get_fragment_supervisory_bottom_attendance_list_view().show(new ArrayList()); } private List getUnknownTwoRows() { return allItems; } public List getAllUnregisterVisitorTwoRowsForSelect(long selectedId) { return allItems; } public List getAllUnregisterAttenderTwoRowsForSelect(long selectedId) { return allItems; } }