From 4a8ff39b0fab0627ef8f7459587d514cc01c3676 Mon Sep 17 00:00:00 2001 From: rk <94314517@qq.com> Date: 星期一, 20 十月 2025 10:52:02 +0800 Subject: [PATCH] Merge branch 'wuhuyancao' of http://139.186.142.91:10010/r/productDev/dmvisit into wuhuyancao --- keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java | 1186 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,186 insertions(+), 0 deletions(-) diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java new file mode 100644 index 0000000..fcac3d4 --- /dev/null +++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/main/MainActivity.java @@ -0,0 +1,1186 @@ +package com.doumee.keyCabinet.ui.main; + +import android.app.ActivityManager; +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.hardware.Camera; +import android.hardware.usb.UsbDevice; +import android.hardware.usb.UsbManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.TextUtils; +import android.text.style.TextAppearanceSpan; +import android.util.DisplayMetrics; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.lifecycle.Observer; + +import com.alibaba.fastjson.JSON; +import com.baidu.idl.main.facesdk.model.BDFaceSDKCommon; +import com.bigkoo.convenientbanner.holder.CBViewHolderCreator; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.DataSource; +import com.bumptech.glide.load.engine.GlideException; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.SimpleTarget; +import com.bumptech.glide.request.target.Target; +import com.bumptech.glide.request.transition.Transition; +import com.doumee.keyCabinet.BuildConfig; +import com.doumee.keyCabinet.base.BannerPicResponsePara; +import com.doumee.keyCabinet.bean.FaceUserBean; +import com.doumee.keyCabinet.bean.LoginBean; +import com.doumee.keyCabinet.databinding.MainActivityBinding; +import com.doumee.keyCabinet.event.GetFacesEvent; +import com.doumee.keyCabinet.event.HeartEvent; +import com.doumee.keyCabinet.event.KeyDoorEvent; +import com.doumee.keyCabinet.event.KeyResultEvent; +import com.doumee.keyCabinet.event.KeyStatusListener; +import com.doumee.keyCabinet.event.OpenGridEvent; +import com.doumee.keyCabinet.event.ReLoginEvent; +import com.doumee.keyCabinet.event.TimeClockEvent; +import com.doumee.keyCabinet.ui.face.ActivationActivity; +import com.doumee.keyCabinet.ui.face.FaceActivity; +import com.doumee.keyCabinet.ui.guide.GuideActivity; +import com.doumee.keyCabinet.ui.keyCabinet.ChangeUrlActivity; +import com.doumee.keyCabinet.ui.keyCabinet.KeyCabinetActivity; +import com.doumee.keyCabinet.ui.keyCabinet.ManageLoginActivity; +import com.doumee.keyCabinet.ui.service.FaceUpdateService; +import com.doumee.keyCabinet.ui.service.HeartbeatService; +import com.doumee.keyCabinet.ui.face.AddFaceActivity; +import com.doumee.keyCabinet.ui.face.ErrActivity; +import com.doumee.keyCabinet.ui.face.UserInfoManager; +import com.doumee.keyCabinet.ui.face.UserManagerActivity; +import com.doumee.keyCabinet.ui.view.BannerViewImageHolder; +import com.doumee.keyCabinet.utils.BraceletLogUtils; +import com.doumee.keyCabinet.utils.CrashHandler; +import com.doumee.keyCabinet.utils.LMobileInfo; +import com.doumee.keyCabinet.utils.TimeUtils; +import com.doumee.keyCabinet.utils.face.FaceSDKManager; +import com.doumee.keyCabinet.utils.face.FaceUtils; +import com.doumee.keyCabinet.utils.face.GateConfigUtils; +import com.doumee.keyCabinet.utils.face.ImportFileManager; +import com.doumee.keyCabinet.utils.face.RegisterConfigUtils; +import com.doumee.keyCabinet.utils.face.model.SingleBaseConfig; +import com.doumee.keyCabinet.utils.i485.SerialPortModel; +import com.doumee.keyCabinet.utils.i485.SerialPortReadObserver; +import com.doumee.keyCabinet.utils.i485.SportUtils; +import com.doumee.keyCabinet.utils.update.PermissionUtils; +import com.doumee.keyCabinet.utils.update.PermissiondDialog; +import com.doumee.keyCabinet.utils.update.UpdateUtil; +import com.doumee.lib_coremodel.bean.event.ActionEventData; +import com.doumee.keyCabinet.MApplication; +import com.doumee.keyCabinet.R; +import com.doumee.keyCabinet.base.MyBaseActivity; +import com.doumee.keyCabinet.bean.MemberBean; +import com.doumee.keyCabinet.utils.AdListResponseParam; +import com.doumee.lib_coremodel.http.utils.GsonTools; +import com.doumee.lib_coremodel.util.SpUtil; +import com.doumee.lib_coremodel.util.StringUtil; +import com.example.datalibrary.api.FaceApi; +import com.example.datalibrary.listener.DBLoadListener; +import com.example.datalibrary.listener.SdkInitListener; +import com.example.datalibrary.model.ImportFeatureResult; +import com.example.datalibrary.model.User; +import com.example.datalibrary.view.PreviewTexture; +import com.yanzhenjie.permission.runtime.Permission; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Logger; +import org.greenrobot.eventbus.Subscribe; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import dagger.hilt.android.AndroidEntryPoint; +import timber.log.Timber; + +import static android.Manifest.permission.RECEIVE_BOOT_COMPLETED; + +@AndroidEntryPoint +public class MainActivity extends MyBaseActivity<MainVM, MainActivityBinding> { + private List<AdListResponseParam> lbs = new ArrayList<>(); + //鏄惁宸叉縺娲� + public static boolean isFaceOk = false; + private boolean isActivation = false; + private boolean isDBLoad; + private PopupWindow popupWindow; + private Future future; + + //鐩告満鐩稿叧 + private Camera[] mCamera; + private PreviewTexture[] previewTextures; + private static final int PREFER_WIDTH = 640; + private static final int PREFER_HEIGHT = 480; + //鏄惁鏈夎鏇存柊浜鸿劯 + private boolean isNeedUpdateFace; + //鏄惁姝e湪鏇存柊涓� + private boolean isUpdatingFace; + private boolean isUpdateVersion; + private int downCount = 0; + private Long lastDownTime; + private Long showTime; + + private Handler handler = new Handler(){ + @Override + public void handleMessage(@NonNull Message msg) { + if(!isFinishing()){ + switch (msg.what) { + case 0: + //initM(); + TimeUtils.updateTimeUi(getVM().dayObs, getVM().timeObs); + handler.sendEmptyMessageDelayed(0, 1000); + EventBus.getDefault().post(new TimeClockEvent()); + /*if (isDBLoad && isNeedUpdateFace && !isUpdatingFace) { + isNeedUpdateFace = false; + getVM().getFaceLD(); + } + getVM().upBraceletLog();*/ + case 2: + getVM().resetReq(); + break; + } + } + } + }; + + + @Override + public int getLayoutId() { + return R.layout.main_activity; + } + + @Override + public void initView(@Nullable Bundle savedInstanceState) { + isAddCountTimer = false; + SpUtil.initWH(this); + normalConfig(); + getDB().setModel(getVM()); + //initRGBCheck(); + handler.sendEmptyMessageDelayed(0, 1000); + //鍚姩蹇冭烦 + Intent intent = new Intent(MainActivity.this, HeartbeatService.class); + startService(intent); + //鍚姩鏇存柊浜鸿劯 + Intent intent2 = new Intent(MainActivity.this, FaceUpdateService.class); + startService(intent2); + getPermission(); + Timber.tag("====>").d(LMobileInfo.getDeviceUniqueId()); + initPort(); + } + + private void initM(){ + ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); + ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); + activityManager.getMemoryInfo(memoryInfo); + + long totalMemory = memoryInfo.totalMem/(1024*1024); + long availableMemory = memoryInfo.availMem/(1024*1024); + long usedMemory = totalMemory - availableMemory; + //getDB().tvM.setText("鎬诲唴瀛橈細"+totalMemory+",浣跨敤鍐呭瓨锛�"+usedMemory+",鍙敤鍐呭瓨锛�"+availableMemory); + if((availableMemory<400&&showTime!=null&&(System.currentTimeMillis()-showTime>5000))|| + ("02:00:00".equals(StringUtil.getHM()))){ + //鍙敤鍐呭瓨灏忎簬400M,鎴栬�呮瘡澶╁噷鏅�2鐐癸紝閲嶅惎app + restartApp(); + } + } + + private void upErrInfo(){ + List<SpUtil.SPBean> datas = SpUtil.getMatchingStrings(CrashHandler.FILE_NAME); + for(SpUtil.SPBean data : datas){ + getVM().upErrInfo(data); + } + } + + @Override + public void initData(@Nullable Bundle savedInstanceState) { + //handler.sendEmptyMessageDelayed(0,1000); + getDB().tvId.setText("NO锛�"+LMobileInfo.getDeviceUniqueId()); + getDB().tvVersion.setText("V"+BuildConfig.VERSION_NAME); + getVM().getFaceLD().observe(this, new Observer<List<FaceUserBean>>() { + @Override + public void onChanged(List<FaceUserBean> beans) { + //鏇存柊浜鸿劯鏁版嵁 + if(beans!=null&&beans.size()>0){ + initModel(beans); + } + } + }); + getDB().img.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(lastDownTime!=null){ + if(System.currentTimeMillis()-lastDownTime>1000){ + downCount=0; + } + } + lastDownTime = System.currentTimeMillis(); + Timber.d("downCount="+downCount); + downCount++; + if(downCount>4) { + downCount=0; + lastDownTime=null; + initPopupWindow(); + } + } + }); + getDB().tv1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //绠$悊鍛樼櫥褰� + if(lastDownTime1!=null){ + if(System.currentTimeMillis()-lastDownTime1>1000){ + downCount1=0; + } + } + lastDownTime1 = System.currentTimeMillis(); + downCount1++; + System.out.println(); + Timber.tag("==>").d(""+downCount1); + if(downCount1>4) { + downCount1=0; + lastDownTime1=null; + startActivity(ManageLoginActivity.class); + } + } + }); + getDB().tvId.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //鏇存敼url + if(lastDownTime2!=null){ + if(System.currentTimeMillis()-lastDownTime2>1000){ + downCount2=0; + } + } + lastDownTime2 = System.currentTimeMillis(); + downCount2++; + if(downCount2>4) { + downCount2=0; + lastDownTime2=null; + startActivity(ChangeUrlActivity.class); + } + } + }); + upErrInfo(); + getVM().devHeart(); + BraceletLogUtils.saveLog("app鎵撳紑"); + } + + + + boolean isOne; + private void setBanner(List<BannerPicResponsePara> bannerList){ + getDB().banner.setPages(new CBViewHolderCreator<BannerViewImageHolder>() { + @Override + public BannerViewImageHolder createHolder() { + return new BannerViewImageHolder(); + } + },bannerList ).setPageIndicator(new int[]{R.drawable.bg_dot_gray, R.drawable.bg_dot_blue}); + isOne = bannerList.size()==1; + if(!isOne) { + getDB().banner.startTurning(3000); + }else { + getDB().banner.stopTurning(); + } + } + + private boolean isHavePermission = false; + //鑾峰彇鏉冮檺 + private void getPermission(){ + PermissionUtils.getPermission(this, new PermissionUtils.CallBack() { + @Override + public void sucess() { + //鏄剧ず + isHavePermission = true; + checkUpdate(); + } + + @Override + public void fail(List<String> permissions) { + showNoPermissionTip(); + } + }, new String[]{Permission.WRITE_EXTERNAL_STORAGE,RECEIVE_BOOT_COMPLETED}); + } + + private Long lastDownTime1; + private int downCount1; + private Long lastDownTime2; + private int downCount2; + @Override + protected void doRegister(int type, ActionEventData data) { + switch (type){ + case 2: + case 3: + /*tipDownCount = 10; + isShowTip = true; + getDB().tvDjs.setText(tipDownCount+"s"); + getDB().tvTip21.setText(getTipText("AC101"), TextView.BufferType.SPANNABLE); + getDB().clTip.setVisibility(View.VISIBLE);*/ + //鏍¢獙鏄惁鐧诲綍 + if(MApplication.getConfigBean().getId()==null){ + Toast.makeText(mContext, "璁惧鏈坊鍔狅紝鏃犳硶鎿嶄綔", Toast.LENGTH_SHORT).show(); + getVM().devLogin(); + return; + } + MApplication.getLoginBean().setFlag(type==2?0:1); + startActivity(FaceActivity.class); + //startActivity(KeyCabinetActivity.class,b); + break; + case 4: + isShowTip = false; + getDB().clTip.setVisibility(View.GONE); + break; + default: + break; + } + } + + @Override + protected void onResume() { + super.onResume(); + showTime = System.currentTimeMillis(); + MApplication.setLoginBean(new LoginBean()); + if(!isFaceOk) { + //initLicense(); + } + if(isHavePermission) { + checkUpdate(); + } + triggerGarbageCollection(); + getVM().resetReq(); + if(!isOne) { + getDB().banner.startTurning(3000); + }else { + getDB().banner.stopTurning(); + } + } + + // 杩欐槸涓�涓ず渚嬫柟娉曪紝鐢ㄤ簬鎵嬪姩瑙﹀彂鍨冨溇鍥炴敹 + public void triggerGarbageCollection() { + // 璇锋眰杩涜鍨冨溇鍥炴敹 + System.gc(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (future != null && !future.isDone()) { + future.cancel(true); + } + FaceApi.getInstance().cleanRecords(); + handler.removeCallbacksAndMessages(null); + handler = null; + faceHandler.removeCallbacksAndMessages(null); + faceHandler = null; + portHandler.removeCallbacksAndMessages(null); + portHandler = null; + } + + private void restartApp(){ + // 鍒涘缓涓�涓柊鐨勫惎鍔ㄦ剰鍥� + Intent intent = new Intent(mContext, GuideActivity.class); + // 璁剧疆FLAG_ACTIVITY_CLEAR_TASK鏍囧織浣� + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + // 浣跨敤PendingIntent鍖呰鍚姩鎰忓浘 + PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_ONE_SHOT); + // 鑾峰彇AlarmManager瀹炰緥 + AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); + // 鍦�500姣鍚庤Е鍙戦噸鍚搷浣� + alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 10, pendingIntent); + + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(1); + } + + @Subscribe + public void GetFacesEvent(GetFacesEvent event){ + if(!isFinishing()&&!isUpdatingFace){ + if(isDBLoad){ + isNeedUpdateFace = false; + //鏌ヨ浜鸿劯 + getVM().getFaceDatas(); + }else { + isNeedUpdateFace = true; + } + } + } + + @Subscribe + public void ReLoginEvent(ReLoginEvent event){ + if(!isFinishing()){ + handler.sendEmptyMessageDelayed(2,20000); + getVM().devLogin(); + } + } + + //鍒ゆ柇璁惧鏄惁宸叉縺娲� + private void initLicense() { + FaceSDKManager.getInstance().init(mContext, new SdkInitListener() { + @Override + public void initStart() { + + } + + public void initLicenseSuccess() { + //宸叉縺娲� + isFaceOk = true; + initDBApi(); + } + + @Override + public void initLicenseFail(int errorCode, String msg) { + //鏈縺娲伙紝璺宠浆婵�娲婚〉闈� + TimerTask task = new TimerTask() { + @Override + public void run() { + /* + *瑕佹墽琛岀殑鎿嶄綔*/ + + startActivity(new Intent(mContext, ActivationActivity.class)); + } + }; + Timer timer = new Timer(); + timer.schedule(task, 2000); + } + + @Override + public void initModelSuccess() { + + } + + @Override + public void initModelFail(int errorCode, String msg) { + + } + }); + } + + private void initDBApi(){ + if (future != null && !future.isDone()) { + future.cancel(true); + } + isDBLoad = false; + future = Executors.newSingleThreadExecutor().submit(new Runnable() { + @Override + public void run() { + FaceApi.getInstance().init(new DBLoadListener() { + + @Override + public void onStart(int successCount) { + if (successCount < 5000 && successCount != 0){ + + runOnUiThread(new Runnable() { + @Override + public void run() { + loadProgress(10); + } + }); + } + } + + @Override + public void onLoad(final int finishCount, final int successCount, final float progress) { + if (successCount > 5000 || successCount == 0) { + runOnUiThread(new Runnable() { + @Override + public void run() { + getDB().progressBar.setProgress((int) (progress * 100)); + getDB().progressText.setText(((int) (progress * 100)) + "%"); + } + }); + } + } + + @Override + public void onComplete(final List<User> users , final int successCount) { +// FileUtils.saveDBList(HomeActivity.this, users); + runOnUiThread(new Runnable() { + @Override + public void run() { + FaceApi.getInstance().setUsers(users); + initFaceSDKManager(null); + if (successCount > 5000 || successCount == 0) { + getDB().progressGroup.setVisibility(View.GONE); + isDBLoad = true; + isFaceOk = true; + } + } + }); + } + + @Override + public void onFail(final int finishCount, final int successCount, final List<User> users) { + runOnUiThread(new Runnable() { + @Override + public void run() { + FaceApi.getInstance().setUsers(users); + initFaceSDKManager(null); + getDB().progressGroup.setVisibility(View.GONE); + Toast.makeText(MainActivity.this, String.format(getString(R.string.main_tip3),successCount,finishCount), Toast.LENGTH_SHORT).show(); + isDBLoad = true; + isFaceOk = true; + } + }); + } + }, mContext); + } + }); + } + + private void loadProgress(float i){ + getDB().progressGroup.setVisibility(View.VISIBLE); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + getDB().progressBar.setProgress((int) ((i / 5000f) * 100)); + getDB().progressText.setText(((int) ((i / 5000f) * 100)) + "%"); + if (i < 5000){ + loadProgress(i + 100); + }else { + getDB().progressGroup.setVisibility(View.GONE); + isDBLoad = true; + isFaceOk = true; + } + } + },10); + } + + private void initModel(List<FaceUserBean> userBeans) { + if (com.example.datalibrary.manager.FaceSDKManager.initStatus == com.example.datalibrary.manager.FaceSDKManager.SDK_MODEL_LOAD_SUCCESS) { + waitUpdate(userBeans); + }else { + initFaceSDKManager(userBeans); + } + } + + private void initFaceSDKManager(List<FaceUserBean> userBeans){ + //寮�濮嬪悗鍘诲垵濮嬪寲 + com.example.datalibrary.manager.FaceSDKManager.getInstance().initModel(mContext, + FaceUtils.getInstance().getBDFaceSDKConfig() , new SdkInitListener() { + @Override + public void initStart() { + } + + @Override + public void initLicenseSuccess() { + } + + @Override + public void initLicenseFail(int errorCode, String msg) { + } + + @Override + public void initModelSuccess() { + com.example.datalibrary.manager.FaceSDKManager.initModelSuccess = true; + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(mContext, getString(R.string.main_tip4), Toast.LENGTH_SHORT).show(); + getDB().progressGroup.setVisibility(View.GONE); + if(userBeans!=null){ + waitUpdate(userBeans); + } + } + }); + } + + @Override + public void initModelFail(int errorCode, String msg) { + com.example.datalibrary.manager.FaceSDKManager.initModelSuccess = false; + if (errorCode != -12) { + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(mContext, getString(R.string.main_tip5), Toast.LENGTH_SHORT).show(); + } + }); + } + } + }); + } + + @Override + protected void onPause() { + super.onPause(); + showTime = null; + } + + private int finishCount; + private List<FaceUserBean> selectBeans = new ArrayList<>(); + //寰呮洿鏂版暟鎹� + private List<FaceUserBean> waitBeans = new ArrayList<>(); + + private Handler faceHandler = new Handler(){ + + @Override + public void handleMessage(@NonNull Message msg) { + if(!isFinishing()){ + switch (msg.what){ + case 0: + if(finishCount<selectBeans.size()){ + isUpdatingFace = true; + repeatCount = 0; + updateFace(selectBeans.get(finishCount)); + }else { + //缁撴潫 + isUpdatingFace = false; + //System.out.println("==UpdatingFace==>鏇存柊缁撴潫锛�"); + // 娓呴櫎鍐呭瓨缂撳瓨 + Glide.get(MainActivity.this).clearMemory(); + } + break; + default: + break; + } + } + } + }; + + private void waitUpdate(List<FaceUserBean> userBeans){ + if(isUpdatingFace){ + //姝e湪鏇存柊 + waitBeans.addAll(userBeans); + }else { + selectBeans.clear(); + selectBeans.addAll(waitBeans); + waitBeans.clear(); + selectBeans.addAll(userBeans); + finishCount=0; + faceHandler.sendEmptyMessage(0); + } + } + + private int repeatCount = 0; + private void updateFace(FaceUserBean bean){ + Timber.d("==UpdatingFace==>瀹屾垚鏁伴噺 "+finishCount); + if (TextUtils.isEmpty(bean.getFaceImg())||bean.getFaceImg().endsWith("null")) { + finishCount++; + faceHandler.sendEmptyMessage(0); + return; + } + repeatCount++; + //System.out.println("==UpdatingFace==>寮�濮嬶細" + bean.getName()); + Glide.with(this) + .asBitmap() + .load(bean.getFaceImg()) + .addListener(new RequestListener<Bitmap>() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) { + if(repeatCount==1) { + finishCount++; + } + faceHandler.sendEmptyMessage(0); + return false; + } + + @Override + public boolean onResourceReady(Bitmap bitmap, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) { + if(repeatCount==1) { + finishCount++; + } + if (bitmap != null) { + //System.out.println("==UpdatingFace==>寮�濮嬭В鏋愪汉鑴�"); + byte[] secondFeature = new byte[512]; + ImportFeatureResult result = null; + // 10銆佽蛋浜鸿劯SDK鎺ュ彛锛岄�氳繃浜鸿劯妫�娴嬨�佺壒寰佹彁鍙栨嬁鍒颁汉鑴哥壒寰佸�� + try { + result = ImportFileManager.getInstance().getFeature(bitmap, secondFeature, + BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO); + }catch (OutOfMemoryError e){ + e.printStackTrace(); + faceHandler.sendEmptyMessage(0); + return false; + }catch (Exception e){ + e.printStackTrace(); + faceHandler.sendEmptyMessage(0); + return false; + } + + // 11銆佸垽鏂槸鍚︽彁鍙栨垚鍔燂細128涓烘垚鍔燂紝-1涓哄弬鏁颁负绌猴紝-2琛ㄧず鏈娴嬪埌浜鸿劯 + float ret = result.getResult(); + //System.out.println("==UpdatingFace==>鎻愬彇鐗瑰緛鍊�" + ret); + // 鎻愬彇鐗瑰緛鍊� + if (ret != -1) { + //鏈変汉鑴� + // 鍒ゆ柇璐ㄩ噺妫�娴嬶紝閽堝妯$硦搴︺�侀伄鎸°�佽搴� + if (ret == 128) { + Timber.d("==UpdatingFace==>鍥剧墖鐗瑰緛鎶藉彇鎴愬姛: %s", JSON.toJSONString(bean)); + User user = new User(); + user.setUserId(bean.getMemberId()); + user.setGroupId(bean.getGroupId()); + user.setUserName(bean.getMemberName()); + user.setImageName(bean.getFaceImg()); + user.setUserInfo(GsonTools.changeGsonToJson(bean)); + user.setFeature(secondFeature); + insertOrUpdate(user); + faceHandler.sendEmptyMessage(0); + } else { + Timber.e("==UpdatingFace==>鍥剧墖鐗瑰緛鎶藉彇澶辫触: %s", JSON.toJSONString(bean)); + if(repeatCount>3) { + faceHandler.sendEmptyMessage(0); + }else { + updateFace(bean); + } + } + } else { + // 涓婁紶鍥剧墖鏃犱汉鑴搁殣钘� + Timber.e("==UpdatingFace==>鍥剧墖鐗瑰緛鎶藉彇澶辫触: %s", JSON.toJSONString(bean)); + if(repeatCount>3) { + faceHandler.sendEmptyMessage(0); + }else { + updateFace(bean); + } + } + } else { + if(repeatCount>3) { + faceHandler.sendEmptyMessage(0); + }else { + updateFace(bean); + } + } + return false; + } + }) + .into(new SimpleTarget<Bitmap>() { + + @Override + public void onResourceReady(@NonNull Bitmap bitmap, @Nullable Transition<? super Bitmap> transition) { + + } + }); + } + + private void insertOrUpdate(User newDo){ + //鎻掑叆鏁版嵁搴� + //System.out.println("==isOk==>bean" + GsonTools.changeGsonToJson(newDo)); + User user = FaceApi.getInstance().getByUserId(newDo.getGroupId(), newDo.getUserId()); + //System.out.println("==isOk==>鏌ヨ" + user.getId()+","+user.getUserId()+","+user.getUserName()); + boolean isSave = false; + if (user == null) { + //鏂板 + isSave = FaceApi.getInstance().registerUserIntoDBmanager(newDo.getGroupId(), + newDo.getUserId(), newDo.getUserName(), newDo.getImageName(), newDo.getUserInfo(), newDo.getFeature()); + //System.out.println("==isOk==>淇濆瓨鎴愬姛"); + } else { + //鏇存柊 + user.setUserName(newDo.getUserName()); + user.setImageName(newDo.getImageName()); + user.setFeature(newDo.getFeature()); + isSave = FaceApi.getInstance().userUpdateOnly(user); + //System.out.println("==isOk==>鏇存柊鎴愬姛"); + } + + if (isSave) { + //淇濆瓨鎴愬姛 + //System.out.println("==UpdatingFace==>淇敼鎴愬姛"); + UserInfoManager.getInstance(); + } else { + Timber.d("==isOk==>浜鸿劯淇濆瓨澶辫触: %s", JSON.toJSONString(newDo)); + } + } + + //寮圭獥 + private void initPopupWindow() { + if(popupWindow!=null&&popupWindow.isShowing()){ + return; + } + View contentView = LayoutInflater.from(mContext).inflate(R.layout.popup_menu_home, null); + popupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + // 鐐瑰嚮妗嗗鍙互浣垮緱popupwindow娑堝け + popupWindow.setFocusable(false); + popupWindow.setOutsideTouchable(false); + popupWindow.setTouchable(true); + popupWindow.setBackgroundDrawable(new BitmapDrawable()); + popupWindow.showAtLocation(getDB().clRoot, Gravity.CENTER, 0, 0); + RelativeLayout relativeRegister = contentView.findViewById(R.id.relative_register); + RelativeLayout mPopRelativeManager = contentView.findViewById(R.id.relative_manager); + RelativeLayout mPopRelativeCamra = contentView.findViewById(R.id.relative_camra); + RelativeLayout mRlErr = contentView.findViewById(R.id.rl_err); + relativeRegister.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(AddFaceActivity.class); + } + }); + mPopRelativeManager.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(UserManagerActivity.class); + } + }); + mPopRelativeCamra.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //startActivity(); + } + }); + mRlErr.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(ErrActivity.class); + } + }); + //鑷姩鍏抽棴 + initHandler(); + } + + private void initHandler() { + new Handler(new Handler.Callback() { + @Override + public boolean handleMessage(Message msg) { + // 瀹炵幇椤甸潰璺宠浆 + popupWindow.dismiss(); + return false; + } + }).sendEmptyMessageDelayed(0, 5000); + } + + private void initRGBCheck(){ + if(true){ + return; + } + String index = SpUtil.getString("rbgCameraId"); + if(index==null){ + index = "0"; + } + setRgbCameraId(Integer.parseInt(index)); + /*if (isSetCameraId()){ + return; + } + int mCameraNum = Camera.getNumberOfCameras(); + Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); + for (int i = 0; i < Camera.getNumberOfCameras(); i++) { + Camera.getCameraInfo(i, cameraInfo); + } + if (mCameraNum > 1){ + try { + mCamera = new Camera[mCameraNum]; + previewTextures = new PreviewTexture[mCameraNum]; + mCamera[0] = Camera.open(0); + previewTextures[0] = new PreviewTexture(this, getDB().checkRgbTexture); + previewTextures[0].setCamera(mCamera[0], PREFER_WIDTH, PREFER_HEIGHT); + mCamera[0].setPreviewCallback(new Camera.PreviewCallback() { + @Override + public void onPreviewFrame(byte[] data, Camera camera) { + int check = StreamUtil.checkNirRgb(data, PREFER_WIDTH, PREFER_HEIGHT); + if (check == 1){ + setRgbCameraId(0); + } + release(0); + } + }); + }catch (Exception e){ + e.printStackTrace(); + } + try { + mCamera[1] = Camera.open(1); + previewTextures[1] = new PreviewTexture(this, getDB().checkNirTexture); + previewTextures[1].setCamera(mCamera[1], PREFER_WIDTH, PREFER_HEIGHT); + mCamera[1].setPreviewCallback(new Camera.PreviewCallback() { + @Override + public void onPreviewFrame(byte[] data, Camera camera) { + int check = StreamUtil.checkNirRgb(data, PREFER_WIDTH, PREFER_HEIGHT); + if (check == 1){ + setRgbCameraId(1); + } + release(1); + } + }); + }catch (Exception e){ + e.printStackTrace(); + } + } else { + setRgbCameraId(0); + }*/ + } + + private void setRgbCameraId(int index){ + //Toast.makeText(mContext, "璁剧疆鐩告満"+index, Toast.LENGTH_SHORT).show(); + SpUtil.saveString("rbgCameraId",index+""); + BraceletLogUtils.saveLog("璁剧疆鐩告満("+index+")"); + SingleBaseConfig.getBaseConfig().setRBGCameraId(index); + SingleBaseConfig.getBaseConfig().setRgbRevert(true); + SingleBaseConfig.getBaseConfig().setRgbDetectDirection(90); + SingleBaseConfig.getBaseConfig().setRgbVideoDirection(270); + GateConfigUtils.modityJson(); + RegisterConfigUtils.modityJson(); + } + private boolean isSetCameraId(){ + if (SingleBaseConfig.getBaseConfig().getRBGCameraId() == -1){ + return false; + }else { + return true; + } + } + + private void release(int id){ + if (mCamera != null && mCamera[id] != null) { + if (mCamera[id] != null) { + mCamera[id].setPreviewCallback(null); + mCamera[id].stopPreview(); + previewTextures[id].release(); + mCamera[id].release(); + mCamera[id] = null; + } + } + } + + private void checkUpdate(){ + //鐗堟湰鏇存柊 + new UpdateUtil(this).setShowToast(false).getServerVerCode(new UpdateUtil.VersionCallBack() { + @Override + public void isNeedUpdate(boolean isUpdate) { + isUpdateVersion = isUpdate; + } + }); + } + + private PermissiondDialog permissiondDialog; + private void showNoPermissionTip() { + try { + Toast.makeText(this,getString(R.string.guide_permiss_1) , Toast.LENGTH_LONG).show(); + if (permissiondDialog == null) { + permissiondDialog = new PermissiondDialog(this, getString(R.string.help), getString(R.string.guide_permiss_2), getString(R.string.cancel), + getString(R.string.empower), new PermissiondDialog.OnClickListener() { + @Override + public void clickOk() { + permissiondDialog.dismiss(); + PermissionUtils.gotoPermission(getContext()); + } + + @Override + public void clickNo() { + permissiondDialog.dismiss(); + finish(); + } + }); + } + if (!permissiondDialog.isShowing()) { + permissiondDialog.show(); + } + } catch (Exception e) { + + } + } + + private int tipDownCount = 10; + private boolean isShowTip; + @Subscribe + public void TimeClockEvent(TimeClockEvent e){ + if(isShowTip){ + if(tipDownCount==0){ + isShowTip = false; + getDB().clTip.setVisibility(View.GONE); + }else { + tipDownCount--; + getDB().tvDjs.setText(tipDownCount+"s"); + } + } + } + + /** + * 鐩戝惉寮�闂� + * @param e + */ + @Subscribe + public void OpenGridEvent(OpenGridEvent e){ + if(!isFinishing()){ + EventBus.getDefault().post(new KeyDoorEvent(MApplication.nextBoolean()?"0":"1")); + } + } + + /** + * 鐩戝惉閽ュ寵 + * @param e + */ + @Subscribe + public void KeyStatusListener(KeyStatusListener e){ + if(!isFinishing()){ + if(e.getStatus()==0){ + //寮�濮� + Random random = new Random(); + EventBus.getDefault().post(new KeyResultEvent(random.nextBoolean()?"0":"1")); + }else { + //缁撴潫 + } + } + } + + private SpannableString getTipText(String name){ + String text = name+"鏌滈棬鏈叧闂�"; + SpannableString styledText = new SpannableString(text); + styledText.setSpan(new TextAppearanceSpan(this, R.style.style_tip1), + 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + styledText.setSpan(new TextAppearanceSpan(this,R.style.style_tip2), name.length()+1, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + return styledText; + } + + @Override + protected void onRestart() { + super.onRestart(); + getVM().devHeart(); + } + + @Subscribe + public void HeartEvent(HeartEvent e){ + if(!isFinishing()){ + getVM().devHeart(); + } + } + + private SerialPortModel gridPort; + private SerialPortReadObserver gridReadObserver = new SerialPortReadObserver() { + @Override + public void onResult(String result) { + + } + + @Override + public void onResultBytes(byte[] bytes) { + if(gridPort!=null && !gridPort.isOk()){ + gridPort.setOk(true); + } + } + }; + private SerialPortModel keyPort; + private SerialPortReadObserver keyReadObserver = new SerialPortReadObserver() { + @Override + public void onResult(String result) { + + } + + @Override + public void onResultBytes(byte[] bytes) { + if(keyPort!=null && !keyPort.isOk()){ + keyPort.setOk(true); + } + } + }; + private SerialPortModel jiuPort; + private SerialPortReadObserver jiuReadObserver = new SerialPortReadObserver() { + @Override + public void onResult(String result) { + + } + + @Override + public void onResultBytes(byte[] bytes) { + if(jiuPort!=null && !jiuPort.isOk()){ + jiuPort.setOk(true); + } + } + }; + + List<String> ports; + private int index = 0; + private Handler portHandler = new Handler(){ + @Override + public void handleMessage(@NonNull Message msg) { + switch (msg.what){ + case 0: + if(index>=1&&!checkEnd()){ + index--; + chosePort(ports.get(index)); + } + break; + default: + break; + } + } + }; + //鍒濆鍖栦覆鍙� + private void initPort(){ + ports = SportUtils.getSerialPortPaths(this); + if(ports.size()>0){ + index = ports.size()-1; + chosePort(ports.get(ports.size()-1)); + } + } + + private void chosePort(String path){ + if(gridPort==null||!gridPort.isOk()){ + closePort(gridPort); + gridPort = new SerialPortModel(path,9600 ,8 + ,1 , 0); + boolean isSucc = gridPort.open(); + if(isSucc) { + String msg = isSucc ? "鎴愬姛" : "澶辫触"; + //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg); + gridPort.startRead(gridReadObserver); + //todo 鍙戦�佹煖鏍兼牎楠屼俊鎭� + } + } + if(keyPort==null||!keyPort.isOk()){ + closePort(keyPort); + keyPort = new SerialPortModel(path,115200 ,8 + ,1 , 0); + boolean isSucc = keyPort.open(); + if(isSucc) { + String msg = isSucc ? "鎴愬姛" : "澶辫触"; + //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg); + keyPort.startRead(keyReadObserver); + //todo 鍙戦�侀挜鍖欐牎楠屼俊鎭� + } + } + if(jiuPort==null||!jiuPort.isOk()){ + closePort(jiuPort); + jiuPort = new SerialPortModel(path,9600 ,8 + ,1 , 0); + boolean isSucc = jiuPort.open(); + if(isSucc) { + String msg = isSucc ? "鎴愬姛" : "澶辫触"; + //getVM().append("涓插彛 "+ settingBean.getDevicePath() + " -杩炴帴"+msg); + jiuPort.startRead(jiuReadObserver); + //todo 鍙戦�侀厭绮炬牎楠屼俊鎭� + } + } + + portHandler.sendEmptyMessageDelayed(0,2000); + } + + private void closePort(SerialPortModel port){ + if(port==null){ + return; + } + port.startRead(null); + port.stopRead(); + port.close(); + port = null; + } + + private boolean checkEnd(){ + if(gridPort==null||!gridPort.isOk()){ + return false; + } + if(keyPort==null||!keyPort.isOk()){ + return false; + } + if(jiuPort==null||!jiuPort.isOk()){ + return false; + } + return true; + } +} -- Gitblit v1.9.3