Browse Source

Merge branch 'FaceScenic_V2_baiduface' into FaceScenic_V2_baiduface_x5

# Conflicts:
#	app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceMainActivity.java
#	datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
Shangyp 4 months ago
parent
commit
a4d508ddfe
36 changed files with 3785 additions and 291 deletions
  1. 3 3
      app/build.gradle
  2. 1 0
      app/src/main/AndroidManifest.xml
  3. 7 0
      app/src/main/java/com/hanghui/senic/MyAppliction.java
  4. 5 1
      app/src/main/java/com/hanghui/senic/activity/BaseActivity.java
  5. 3169 0
      app/src/main/java/com/hanghui/senic/activity/view/BaiDuFaceView.java
  6. 1 1
      app/src/main/java/com/hanghui/senic/activity/view/ClickButtonFloatView.java
  7. 4 2
      app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceConstant.java
  8. 2 1
      app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceController.java
  9. 17 28
      app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceMainActivity.java
  10. 142 58
      app/src/main/java/com/hanghui/senic/baiduface/BaiduFacePreviewActivity.java
  11. 12 0
      app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceUtil.java
  12. 163 42
      app/src/main/java/com/hanghui/senic/baiduface/WebsocketService.java
  13. 11 0
      app/src/main/java/com/hanghui/senic/bean/UserInformationBean.java
  14. 17 0
      app/src/main/java/com/hanghui/senic/common/CommonUtil.java
  15. 2 1
      app/src/main/java/com/hanghui/senic/common/DataReturns.java
  16. 12 0
      app/src/main/java/com/hanghui/senic/common/UserInfoManager.java
  17. 2 1
      app/src/main/java/com/hanghui/senic/controller/BlacklistManager.java
  18. 3 2
      app/src/main/java/com/hanghui/senic/controller/IDCardController.java
  19. 3 2
      app/src/main/java/com/hanghui/senic/controller/PassportController.java
  20. 2 0
      app/src/main/java/com/hanghui/senic/controller/QRCodeController.java
  21. 24 19
      app/src/main/java/com/hanghui/senic/network/HttpRequest.java
  22. 1 0
      app/src/main/java/com/hanghui/senic/presenter/MyPresenter.java
  23. 10 9
      app/src/main/java/com/hanghui/senic/service/usbserialdemo/utile/ConfigManager.java
  24. 3 3
      app/src/main/java/com/hanghui/senic/service/usbserialdemo/utile/NFCOnlineIdCard/ReadCardManager.java
  25. 3 2
      app/src/main/java/com/hanghui/senic/service/usbserialdemo/utile/OcrThread.java
  26. 6 2
      app/src/main/java/com/hanghui/senic/utils/ImageLoaderUtils.java
  27. 10 0
      app/src/main/res/layout/activity_baiduface_preview.xml
  28. 7 2
      app/src/main/res/layout/layout_bottom.xml
  29. 3 1
      app/src/main/res/layout/window_outcome_floating_pages.xml
  30. 3 1
      app/src/main/res/layout/window_outcome_general.xml
  31. 31 21
      datalibrary/src/main/java/com/example/datalibrary/api/FaceApi.java
  32. 64 60
      datalibrary/src/main/java/com/example/datalibrary/db/DBManager.java
  33. 18 5
      datalibrary/src/main/java/com/example/datalibrary/gatecamera/CameraPreviewManager.java
  34. 1 0
      datalibrary/src/main/java/com/example/datalibrary/gl/view/GlMantleSurfacView.java
  35. 22 24
      datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
  36. 1 0
      registerlibrary/src/main/java/com/baidu/idl/main/facesdk/registerlibrary/user/activity/BatchImportActivity.java

+ 3 - 3
app/build.gradle

@@ -14,8 +14,8 @@ android {
         applicationId "com.hanghui.senic"
         minSdkVersion 22
         targetSdkVersion 22
-        versionCode 119//115
-        versionName "1.1.9.241009" //1.1.5.241003
+        versionCode 120//115
+        versionName "1.1.9.241010" //1.1.5.241003
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         ndk {
             abiFilters "armeabi-v7a"   //armeabi-v7a 'arm64-v8a'
@@ -86,7 +86,7 @@ android {
         targetCompatibility JavaVersion.VERSION_1_8
     }
 
-    def appName = "HHFace"
+    def appName = "HHLocal"
     applicationVariants.all { variant ->
         variant.outputs.all {
             outputFileName = "${appName}_${defaultConfig.versionName}_${"V2"}.apk"

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -131,6 +131,7 @@
             android:name=".baiduface.BaiduFacePreviewActivity"
             android:configChanges="orientation|keyboardHidden"
             android:exported="true"
+            android:launchMode="singleTop"
             android:screenOrientation="portrait"
             android:theme="@style/AppTheme.Splash"
             android:windowSoftInputMode="adjustPan|stateHidden">

+ 7 - 0
app/src/main/java/com/hanghui/senic/MyAppliction.java

@@ -40,6 +40,7 @@ public class MyAppliction extends BaseApplication {
     public static BlackListDao blackListDao;
     public static RecentAppsReceiver recentAppsReceiver;
     ArrayList<Activity> list = new ArrayList<Activity>();
+    private static volatile  long appHeartbeatTime=0; //上次上报心跳时间
 
     public static Context getContext() {
         return context;
@@ -249,5 +250,11 @@ public class MyAppliction extends BaseApplication {
         }
     };
 
+    public static long getAppHeartbeatTime() {
+        return appHeartbeatTime;
+    }
 
+    public static void setAppHeartbeatTime(long appHeartbeatTime) {
+        MyAppliction.appHeartbeatTime = appHeartbeatTime;
+    }
 }

+ 5 - 1
app/src/main/java/com/hanghui/senic/activity/BaseActivity.java

@@ -204,7 +204,11 @@ public abstract class BaseActivity extends AppCompatActivity {
         }
         //解除绑定服务
         if (null != serviceConnection) {
-            unbindService(serviceConnection);
+            try {
+                unbindService(serviceConnection);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         }
     }
     // onDestroy注意aidl解绑

+ 3169 - 0
app/src/main/java/com/hanghui/senic/activity/view/BaiDuFaceView.java

@@ -0,0 +1,3169 @@
+package com.hanghui.senic.activity.view;
+
+import static android.content.Context.WINDOW_SERVICE;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.graphics.PixelFormat;
+import android.inputmethodservice.Keyboard;
+import android.os.Build;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.WindowManager;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestOptions;
+import com.example.lib.QRCodeUtil.GenerateQRCodeUtil;
+import com.hanghui.senic.MyAppliction;
+import com.hanghui.senic.R;
+import com.hanghui.senic.adapter.OutcomeAdapter;
+import com.hanghui.senic.adapter.OutcomeAdapter2;
+import com.hanghui.senic.adapter.OutcomeAdapter3;
+import com.hanghui.senic.adapter.OutcomeAdapter4;
+import com.hanghui.senic.adapter.StatusPendingAdapter;
+import com.hanghui.senic.baiduface.BaiduFaceController;
+import com.hanghui.senic.bean.CChoiseListBean;
+import com.hanghui.senic.bean.CheckNumBean;
+import com.hanghui.senic.bean.FederatedPlatformsRequestBean;
+import com.hanghui.senic.bean.FederatedPlatformsResponseBean;
+import com.hanghui.senic.bean.PortBeanB;
+import com.hanghui.senic.common.AppHandler;
+import com.hanghui.senic.common.CommonUtil;
+import com.hanghui.senic.common.Constants;
+import com.hanghui.senic.common.DataManager;
+import com.hanghui.senic.common.DataReturns;
+import com.hanghui.senic.common.MTTSManager;
+import com.hanghui.senic.common.TaskStatus;
+import com.hanghui.senic.common.ThreadPoolManager;
+import com.hanghui.senic.common.UserInfoManager;
+import com.hanghui.senic.controller.BlacklistManager;
+import com.hanghui.senic.controller.PassportController;
+import com.hanghui.senic.controller.SerialController;
+import com.hanghui.senic.network.HttpRequest;
+import com.hanghui.senic.service.usbserialdemo.utile.ConfigManager;
+import com.hanghui.senic.service.usbserialdemo.utile.DateUtil;
+import com.hanghui.senic.service.usbserialdemo.utile.IdCardUtils;
+import com.hanghui.senic.service.usbserialdemo.utile.SharedPreferencesUtils;
+import com.hanghui.senic.service.usbserialdemo.utile.StringIsNull;
+import com.hanghui.senic.service.usbserialdemo.utile.StringUtils;
+import com.hanghui.senic.service.usbserialdemo.utile.X1.RelaysAndLedUtile;
+import com.hanghui.senic.service.usbserialdemo.utile.loacat.AppLogUtils;
+import com.hanghui.senic.utils.ImageLoaderUtils;
+import com.hanghui.senic.view.IEditText;
+import com.hanghui.senic.view.IKeyboardView;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class BaiDuFaceView {
+    public static final String TAG = "结果页渲染";
+    /**
+     * loading页: loading、loading_C、loading_localTransition
+     * pending页: pending单选页、 pendingMultiple多选页
+     * closing页(最终结果页): closing、closingMaxPicture、closingPendingMultiple
+     * 通用结果页: {@link ResultViewManager#isCommonClosingPage(FederatedPlatformsResponseBean)}
+     * 本地成功页、本地失败页: LocalOutcome、LocalError、LocalError_B
+     * 人证比对提示页:personCardHintPage
+     */
+    public static final String PAGE_TYPE_LOADING = "loading";//loading页
+    public static final String PAGE_TYPE_PERSON_CARD_HINT = "personCardHintPage";//人证比对提示页
+    public static final String PAGE_TYPE_LOADING_C = "loading_C";//loading页
+    public static final String PAGE_TYPE_LOADING_LOCAL_TRANSITION = "loading_LocalTransition";//本地loading页
+    public static final String PAGE_TYPE_PENDING = "pending";//单选交互页
+    public static final String PAGE_TYPE_PENDING_MULTIPLE = "pendingMultiple";//多选交互页
+    public static final String PAGE_TYPE_CLOSING = "closing"; //最终结果页
+    public static final String PAGE_TYPE_CLOSING_MAX_PICTURE = "closingMaxPicture";//最终结果页,大图
+    public static final String PAGE_TYPE_CLOSING_PENDING_MULTIPLE = "closingPendingMultiple";//最终结果页,页面上展示多张票的核销结果
+    public static final String PAGE_TYPE_LOCAL_OUTCOME = "LocalOutcome";//本地成功页
+    public static final String PAGE_TYPE_LOCAL_LOCALERROR = "LocalError";//本地失败页
+    public static final String PAGE_TYPE_LOCAL_LOCALERROR_B = "LocalError_B";//本地失败页
+    public static final String PAGE_TYPE_LOCAL_LOCALERROR_C = "LocalError_C";//刷脸失败静默显示失败页
+    public static final String PAGE_TYPE_ENTERIDNUMBER = "EnterIDNumber";
+    public static final String PAGE_TYPE_PASSPORTIN = "PassportIn";
+    public static final String PAGE_TYPE_PASSPORTIN_B = "PassportIn_B";
+
+
+    public static final String IMAGE_TYPE_CLOSING = "closing";
+    public static final String IMAGE_TYPE_CLOSING_FLOATING_PAGES = "closing_FloatingPages";
+    public static final String IMAGE_TYPE_CLOSING_MAX_PICTURE = "closingMaxPicture";
+    public static final String IMAGE_TYPE_CLOSING_THR_VALUE = "closingThrValue";
+    public static final String IMAGE_TYPE_SCAN_FACE_FAILED_PAGE = "scanFaceFailedPage";
+    public static final String IMAGE_TYPE_CLOSING_MAX_PICTURE_ALINE_THR_VALUE = "closingMaxPicture_ALineThrValue";
+
+    /**
+     * isv 拿到结果后,展示自定义悬浮view, 避免流程打断
+     */
+    View mView = null;
+    RelativeLayout outcomeActivity_LinearLayoutOutcome;
+    RelativeLayout outcomeActivity_loadingB;
+    LinearLayout outcomeActivity_LinearLayout;//结果页销毁时,清楚bitmap的资源占用
+    ImageView OutcomeActivity_bgImagee;//设置背景图片
+    RelativeLayout outcomeActivity_loadingLocally;//本地等待页面
+    public TextView loadingLocally_NumberOfVisitors;//已/可通行人数
+    TextView loadingLocally_NumberOfTicketChecks;//当日检票次数
+    ImageView loadingLocally_loading;//加载中Gif图
+    TextView loadingLocally_loadingTextView;//加载中文字
+    TextView OutcomeActivity_MultipleVotes_VerificationText;
+    TextView loadingLocally_bottom_time;//底部时间
+    //结果数据
+    ImageView outcomeActivity_OutcomeImage;
+    TextView outcomeActivity_OutcomeTextView;
+    TextView outcomeActivity_OutcomeName;
+    TextView outcomeActivity_OutcomeSecond;
+    TextView OutcomeActivity_Phone;
+    TextView outcomeActivity_OneLabel;
+    TextView outcomeActivity_OneVaule;
+    TextView outcomeActivity_eTwoLabel;
+    TextView outcomeActivity_TwoValue;
+    TextView loadingLocally_ThrLabel;
+    ImageView loadingLocally_ThrValue;
+    RelativeLayout outcomeActivity_Outcome;
+    //大图结果页
+    RelativeLayout outcomeActivity_OutcomeMAXPicture;
+    ImageView outcomeActivity_OutcomeImageMAXPicture;
+    TextView outcomeActivity_OutcomeTextViewMAXPicture;
+    TextView outcomeActivity_OutcomeNameMAXPicture;
+    TextView outcomeActivity_OutcomeSecondMAXPicture;
+    TextView outcomeActivity_OneLabelMAXPicture;
+    TextView outcomeActivity_OneVauleMAXPicture;
+    TextView outcomeActivity_eTwoLabelMAXPicture;
+    TextView outcomeActivity_TwoValueMAXPicture;
+    TextView loadingLocally_ThrLabelMAXPicture;
+    ImageView loadingLocally_ThrValueMAXPicture;
+    //多票核验
+    RelativeLayout outcomeActivity_MultipleVotes;
+    RecyclerView outcomeActivity_RecyclerView;
+    TextView outcomeActivity_LoadMore;
+    ImageView outcomeActivity_LoadMoreImage;
+    LinearLayout outcomeActivity_ConfirmWrite;//确认核验按钮
+    TextView outcomeActivity_ConfirmWriteText1;//核验文字1
+    TextView outcomeActivity_ConfirmWriteText2;//核验文字2
+    OutcomeAdapter outcomeAdapter;
+    OutcomeAdapter2 outcomeAdapter2;
+    OutcomeAdapter3 outcomeAdapter3;
+    OutcomeAdapter4 outcomeAdapter4;
+    int CheckSum = 0;
+    //本地错误页加载
+    RelativeLayout outcomeActivity_LocalError;
+    TextView loadingLocally_LocalErrorTextView;
+    ImageView LoadingLocally_LocalErrorImageView;
+    ImageView outcomeActivity_LocalErrorImage;
+    LinearLayout outcomeActivity_LocalError_idNumber;
+    LinearLayout outcomeActivity_LocalError_idNumberLinear;
+    //    LinearLayout outcomeActivity_LocalError_idNumberLinear2;
+    //通用结果页
+    LinearLayout generalOutCome_Background;
+    TextView generalOutCome_TitleText;
+    ImageView generalOutCome_vaccinelconUrl;
+    TextView generalOutCome_openMsg;
+    ImageView generalOutCome_iconUrl;
+    TextView generalOutCome_showUsername;
+    TextView generalOutCome_showNumber;
+    TextView generalOutCome_nucleid_title;
+    TextView generalOutCome_nucleid_content;
+    TextView generalOutCome_vaccineIcoTitle;
+    TextView generalOutCome_vaccineNum;
+    ImageView generalOutCome_qrCodeText;
+    ImageView generalOutCome_advertise;
+    //底部时间
+    LinearLayout loadingLocally_bottom_LinearLayout;
+    //Status==pending
+    RelativeLayout outcomeActivity_statusPending;
+    ImageView outcomeActivity_statusPending_Background;
+    TextView outcomeActivity_statusPending_bMainLine;
+    TextView outcomeActivity_statusPending_bSubLine;
+    RecyclerView outcomeActivity_statusPending_RecyclerView;
+    StatusPendingAdapter statusPendingAdapter;
+    TextView outcomeActivity_time;
+    LinearLayout outcomeActivity_time_LinearLayout;
+    TextView outcomeActivity_time3;
+    LinearLayout outcomeActivity_time_LinearLayout3;
+    RelativeLayout loadingLocally_titleRelativeLayout;
+    TextView leftTopBarText;
+    TextView rightTopBarText;
+    boolean isHideNavigationBar = true;
+    //静默显示结果页
+    RelativeLayout outcomeActivity_SilentDisplay;
+    LinearLayout outcomeActivity_SilentDisplayTime;
+    TextView outcomeActivity_SilentDisplay_TextView;
+    TextView outcomeActivity_SilentDisplayTimeText;
+    LinearLayout outcomeActivity_SilentDisplayidNumber;
+    //输入证件号
+    RelativeLayout outcomeActivity_EnterIDNumbersLinearLayout;
+    LinearLayout outcomeActivity_time_LinearLayout2;
+    TextView outcomeActivity_time2;
+    IEditText outcomeActivity_edit;
+    TextView outcomeActivity_editNum;
+    LinearLayout outcomeActivity_editDelete;
+    IKeyboardView outcomeActivity_keyboardview;
+    TextView outcomeActivity_cancelticket;
+    TextView outcomeActivity_confirmTicket;
+    //PAGE_TYPE_CLOSING_PENDING_MULTIPLE
+    RelativeLayout outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE;
+    RecyclerView outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLERecyclerView;
+    ImageView outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLEImage;
+    TextView outcomeActivity_closingPendingMultipleLoadMore;
+    //悬浮窗顶部标题
+    LinearLayout loadingLocally_TopLinearLayout;
+    RelativeLayout loadingLocally_TopLinearLayoutImageRelativeLayout;
+    ImageView loadingLocally_TopLinearLayoutImage;
+    ImageView loadingLocally_Image;
+    TextView loadingLocally_Text;
+    public int openTimes = 0;//开门次数hen
+    public int passableOpenTimes = 0;//可通行人数
+    static BaiDuFaceView instance = null;
+    BaiDuFaceViewListener listener;
+
+    private BaiDuFaceView() {
+
+    }
+    public static BaiDuFaceView getInstance() {
+        synchronized (BaiDuFaceView.class) {
+            if (instance == null) {
+                instance = new BaiDuFaceView();
+            }
+        }
+        return instance;
+    }
+
+    public void ResultView(View view, final FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        mView = view;
+        //背景图片
+        outcomeActivity_LinearLayoutOutcome = view.findViewById(R.id.OutcomeActivity_OutcomeLinearLayout);
+        outcomeActivity_loadingB = view.findViewById(R.id.outcomeActivity_loadingB);
+        outcomeActivity_EnterIDNumbersLinearLayout = view.findViewById(R.id.OutcomeActivity_EnterIDNumbersLinearLayout);
+        outcomeActivity_SilentDisplay = view.findViewById(R.id.outcomeActivity_SilentDisplay);
+        outcomeActivity_SilentDisplayTime = view.findViewById(R.id.outcomeActivity_SilentDisplayTime);
+        outcomeActivity_SilentDisplay_TextView = view.findViewById(R.id.outcomeActivity_SilentDisplay_TextView);
+        outcomeActivity_SilentDisplayTimeText = view.findViewById(R.id.outcomeActivity_SilentDisplayTimeText);
+        outcomeActivity_SilentDisplayidNumber = view.findViewById(R.id.outcomeActivity_SilentDisplayidNumber);
+        outcomeActivity_SilentDisplayTime.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                TaskStatus.setInitState();
+                resumeClickButton();
+                removeTouchView(federatedPlatformsResponseBean);
+            }
+        });
+        //倒计时
+        outcomeActivity_time = view.findViewById(R.id.OutcomeActivity_time);
+        outcomeActivity_time_LinearLayout = view.findViewById(R.id.OutcomeActivity_time_LinearLayout);
+        outcomeActivity_time_LinearLayout.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                TaskStatus.setInitState();
+                resumeClickButton();
+                removeTouchView(federatedPlatformsResponseBean);
+            }
+        });
+        if (!ConfigManager.isFloatingPages()) {
+            outcomeActivity_time3 = view.findViewById(R.id.OutcomeActivity_time3);
+            outcomeActivity_time_LinearLayout3 = view.findViewById(R.id.OutcomeActivity_time_LinearLayout3);
+            outcomeActivity_time_LinearLayout3.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    TaskStatus.setInitState();
+                    resumeClickButton();
+                    removeTouchView(federatedPlatformsResponseBean);
+                }
+            });
+        }
+
+        loadingLocally_TopLinearLayout = view.findViewById(R.id.LoadingLocally_TopLinearLayout);
+        loadingLocally_TopLinearLayoutImageRelativeLayout = view.findViewById(R.id.LoadingLocally_TopLinearLayoutImageRelativeLayout);
+        loadingLocally_TopLinearLayoutImage = view.findViewById(R.id.LoadingLocally_TopLinearLayoutImage);
+        loadingLocally_Image = view.findViewById(R.id.LoadingLocally_Image);
+        loadingLocally_Text = view.findViewById(R.id.LoadingLocally_Text);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalErrorImage = view.findViewById(R.id.OutcomeActivity_LocalErrorImage);
+            outcomeActivity_LocalError_idNumber = view.findViewById(R.id.OutcomeActivity_LocalError_idNumber);
+            outcomeActivity_LocalError_idNumberLinear = view.findViewById(R.id.OutcomeActivity_LocalError_idNumberLinear);
+            outcomeActivity_LocalError_idNumber.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    long now = System.currentTimeMillis();
+                    if (now - lastClickTime > 1000) {
+                        lastClickTime = now;
+                        DataReturns.getInstance().clearData();
+                        TaskStatus.setStatus(TaskStatus.TASK_STATUS_ENTERIDNUMBER);
+                        //SmileController.getInstance().invokeStopVerify();//打断当次刷脸
+                        BaiduFaceController.getInstance().invokeStopVerify();
+                        FederatedPlatformsResponseBean federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
+                        FederatedPlatformsResponseBean.DataDTO dataDTO = new FederatedPlatformsResponseBean.DataDTO();
+                        dataDTO.setEnd(false);
+                        dataDTO.setStatus("EnterIDNumber");
+                        dataDTO.setIsOpen(-1);
+                        federatedPlatformsResponseBean.setData(dataDTO);
+                        federatedPlatformsResponseBean.setMsg("");
+                        getPlatformsCod(federatedPlatformsResponseBean);
+                        // setEnterIDNumbers();
+                    }
+                }
+            });
+        }
+        outcomeActivity_SilentDisplayidNumber.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                long now = System.currentTimeMillis();
+                if (now - lastClickTime > 1000) {
+                    lastClickTime = now;
+                    DataReturns.getInstance().clearData();
+                    TaskStatus.setStatus(TaskStatus.TASK_STATUS_ENTERIDNUMBER);
+                    ////SmileController.getInstance().invokeStopVerify();//打断当次刷脸
+                    BaiduFaceController.getInstance().invokeStopVerify();
+                    FederatedPlatformsResponseBean federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
+                    FederatedPlatformsResponseBean.DataDTO dataDTO = new FederatedPlatformsResponseBean.DataDTO();
+                    dataDTO.setEnd(false);
+                    dataDTO.setStatus("EnterIDNumber");
+                    dataDTO.setIsOpen(-1);
+                    federatedPlatformsResponseBean.setData(dataDTO);
+                    federatedPlatformsResponseBean.setMsg("");
+//                    addIsvResultView(federatedPlatformsResponseBean);
+                    //展示悬浮view
+                    getPlatformsCod(federatedPlatformsResponseBean);
+                    // setEnterIDNumbers();
+                }
+            }
+        });
+        //背景图片
+        outcomeActivity_LinearLayout = view.findViewById(R.id.OutcomeActivity_LinearLayout);
+        OutcomeActivity_bgImagee = view.findViewById(R.id.OutcomeActivity_bgImagee);
+        //设置默认图片
+        ImageLoaderUtils.loadImageColor(OutcomeActivity_bgImagee);
+        loadingLocally_bottom_LinearLayout = view.findViewById(R.id.LoadingLocally_bottom_LinearLayout);
+        //本地错误页
+        outcomeActivity_LocalError = view.findViewById(R.id.OutcomeActivity_LocalError);
+        loadingLocally_LocalErrorTextView = view.findViewById(R.id.LoadingLocally_LocalErrorTextView);
+        if (!ConfigManager.isFloatingPages()) {
+            LoadingLocally_LocalErrorImageView = view.findViewById(R.id.LoadingLocally_LocalErrorImageView);
+        }
+        //本地加载
+        outcomeActivity_loadingLocally = view.findViewById(R.id.OutcomeActivity_LoadingLocally);
+        loadingLocally_NumberOfVisitors = view.findViewById(R.id.LoadingLocally_NumberOfVisitors);
+        loadingLocally_NumberOfTicketChecks = view.findViewById(R.id.LoadingLocally_NumberOfTicketChecks);
+        loadingLocally_loadingTextView = view.findViewById(R.id.LoadingLocally_LoadingTextView);
+        loadingLocally_bottom_time = view.findViewById(R.id.LoadingLocally_bottom_time);
+        outcomeActivity_time = view.findViewById(R.id.OutcomeActivity_time);
+        outcomeActivity_time_LinearLayout = view.findViewById(R.id.OutcomeActivity_time_LinearLayout);
+        outcomeActivity_time_LinearLayout.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                TaskStatus.setInitState();
+                resumeClickButton();
+                removeTouchView(federatedPlatformsResponseBean);
+            }
+        });
+        //成功后数据返回
+        outcomeActivity_OutcomeImage = view.findViewById(R.id.OutcomeActivity_OutcomeImage);
+        outcomeActivity_OutcomeTextView = view.findViewById(R.id.OutcomeActivity_OutcomeTextView);
+        outcomeActivity_OutcomeName = view.findViewById(R.id.OutcomeActivity_OutcomeName);
+        outcomeActivity_OutcomeSecond = view.findViewById(R.id.OutcomeActivity_OutcomeSecond);
+        OutcomeActivity_Phone = view.findViewById(R.id.OutcomeActivity_Phone);
+        outcomeActivity_OneLabel = view.findViewById(R.id.OutcomeActivity_OneLabel);
+        outcomeActivity_OneVaule = view.findViewById(R.id.OutcomeActivity_OneVaule);
+        outcomeActivity_eTwoLabel = view.findViewById(R.id.OutcomeActivity_eTwoLabel);
+        outcomeActivity_TwoValue = view.findViewById(R.id.OutcomeActivity_TwoValue);
+        loadingLocally_ThrLabel = view.findViewById(R.id.LoadingLocally_ThrLabel);
+        loadingLocally_ThrValue = view.findViewById(R.id.LoadingLocally_ThrValue);
+        outcomeActivity_Outcome = view.findViewById(R.id.OutcomeActivity_Outcome);
+        //大图成功结果页
+        outcomeActivity_OutcomeImageMAXPicture = view.findViewById(R.id.OutcomeActivity_OutcomeImageMAXPicture);
+        outcomeActivity_OutcomeTextViewMAXPicture = view.findViewById(R.id.OutcomeActivity_OutcomeTextViewMAXPicture);
+        outcomeActivity_OutcomeNameMAXPicture = view.findViewById(R.id.OutcomeActivity_OutcomeNameMAXPicture);
+        outcomeActivity_OutcomeSecondMAXPicture = view.findViewById(R.id.OutcomeActivity_OutcomeSecondMAXPicture);
+        outcomeActivity_OneLabelMAXPicture = view.findViewById(R.id.OutcomeActivity_OneLabelMAXPicture);
+        outcomeActivity_OneVauleMAXPicture = view.findViewById(R.id.OutcomeActivity_OneVauleMAXPicture);
+        outcomeActivity_eTwoLabelMAXPicture = view.findViewById(R.id.OutcomeActivity_eTwoLabelMAXPicture);
+        outcomeActivity_TwoValueMAXPicture = view.findViewById(R.id.OutcomeActivity_TwoValueMAXPicture);
+        loadingLocally_ThrLabelMAXPicture = view.findViewById(R.id.LoadingLocally_ThrLabelMAXPicture);
+        loadingLocally_ThrValueMAXPicture = view.findViewById(R.id.LoadingLocally_ThrValueMAXPicture);
+        outcomeActivity_OutcomeMAXPicture = view.findViewById(R.id.OutcomeActivity_OutcomeMAXPicture);
+        //多票选择
+        outcomeActivity_MultipleVotes = view.findViewById(R.id.OutcomeActivity_MultipleVotes);
+        outcomeActivity_RecyclerView = view.findViewById(R.id.OutcomeActivity_RecyclerView);
+        outcomeActivity_LoadMoreImage = view.findViewById(R.id.OutcomeActivity_LoadMoreImage);
+        if (!ConfigManager.isFloatingPages()) {
+            OutcomeActivity_MultipleVotes_VerificationText = view.findViewById(R.id.OutcomeActivity_MultipleVotes_VerificationText);
+            outcomeActivity_LoadMore = view.findViewById(R.id.OutcomeActivity_LoadMore);
+        }
+        outcomeActivity_ConfirmWrite = view.findViewById(R.id.OutcomeActivity_ConfirmWrite);
+        outcomeActivity_ConfirmWriteText1 = view.findViewById(R.id.OutcomeActivity_ConfirmWriteText1);
+        outcomeActivity_ConfirmWriteText2 = view.findViewById(R.id.OutcomeActivity_ConfirmWriteText2);
+        outcomeActivity_ConfirmWrite.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (federatedPlatformsResponseBean != null) {
+                    String value = "";
+                    CheckSum = 0;
+                    if (ConfigManager.isFloatingPages()) { //结果页为悬浮版模式
+                        for (int i = 0; i < cChoiseListBeans.size(); i++) {
+                            if (cChoiseListBeans.get(i).isSelected()) {
+                                CheckSum += 1;
+                                value = value + "," + "\"" +
+                                        cChoiseListBeans.get(i).getValue()
+                                        + "\"";
+                            }
+                        }
+                        if (!value.equals("")) {
+                            value = value.substring(1);
+                            value = "[" + value + "]";
+                            for (int i = 0; i < cChoiseListBeans.size(); i++) {
+                                cChoiseListBeans.get(i).setSelected(false);
+                            }
+                            FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
+                            exInfoDTO.setPassRes("true");
+                            exInfoDTO.setSmileParams(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getSmileParams());
+                            exInfoDTO.setIdcardContent(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getIdcardContent());
+                            FederatedPlatformsRequestBean federatedPlatformsRequestBean = ConfigManager.getFederatedPlatformsRequestBean();
+                            federatedPlatformsRequestBean.getData().setValue(value);
+                            federatedPlatformsRequestBean.getData().setTaskId(federatedPlatformsResponseBean.getData().getTaskId());
+                            int Verifytype = 0;
+                            try {
+                                Verifytype = Integer.parseInt(federatedPlatformsRequestBean.getData().getVerifyType());
+                            } catch (NumberFormatException e) {
+                                e.printStackTrace();
+                                Verifytype = ConfigManager.getVerifytype(federatedPlatformsRequestBean.getData().getVerifyType());
+                            }
+                            ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN,
+                                    Verifytype,
+                                    federatedPlatformsRequestBean.getData().getIdNumber(),
+                                    federatedPlatformsRequestBean.getData().getName(),
+                                    federatedPlatformsRequestBean.getData().getPhone(),
+                                    "check",
+                                    federatedPlatformsResponseBean.getData().getTaskId(),
+                                    value,
+                                    federatedPlatformsRequestBean.getData().getPhoto()
+                                    , exInfoDTO,
+                                    federatedPlatformsRequestBean.getData().getQrcode(),
+                                    federatedPlatformsRequestBean.getData().getIcNumber());
+                            //发送默认一比一通过的数据到预检查调度中心
+                            DataReturns.getInstance().doDataReturns(null, DataReturns.FACE_DATA_VIRTUAL);
+                            HttpRequest.getInstance().requestFederatedPlatformsCheck(true);
+                            //加载中
+                            if (federatedPlatformsResponseBean.getData().getDMainLine() != null &&
+                                    !federatedPlatformsResponseBean.getData().getDMainLine().equals("")) {
+                                loadingLocally_loadingTextView.setText(federatedPlatformsResponseBean.getData().getDMainLine());
+                            } else {
+                                loadingLocally_loadingTextView.setText("处理中……");
+                            }
+                            outcomeActivity_loadingLocally.setVisibility(View.VISIBLE);
+                            outcomeActivity_Outcome.setVisibility(View.GONE);
+                            outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+                            outcomeActivity_statusPending.setVisibility(View.GONE);
+                            String SubText = federatedPlatformsResponseBean.getData().getCButtonSubText();
+                            if (!StringIsNull.IsStringNull(SubText)) {
+                                SubText = SubText.replace("$count", "" + CheckSum)
+                                        .replace("0", "" + CheckSum);
+                                outcomeActivity_ConfirmWriteText2.setText("(" + SubText + ")");
+                                outcomeActivity_ConfirmWriteText2.setVisibility(View.VISIBLE);
+                            } else {
+                                outcomeActivity_ConfirmWriteText2.setVisibility(View.GONE);
+                            }
+                        }
+                    } else {//通用模式
+                        for (int i = 0; i < cChoiseListBeans.size(); i++) {
+                            if (cChoiseListBeans.get(i).isSelected()) {
+                                CheckSum += 1;
+                                value = value + "," + "\"" +
+                                        cChoiseListBeans.get(i).getValue()
+                                        + "\"";
+                            }
+                        }
+                        if (!value.equals("")) {
+                            value = value.substring(1);
+                            value = "[" + value + "]";
+                            for (int i = 0; i < cChoiseListBeans.size(); i++) {
+                                cChoiseListBeans.get(i).setSelected(false);
+                            }
+                            FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
+                            exInfoDTO.setPassRes("true");
+                            exInfoDTO.setSmileParams(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getSmileParams());
+                            exInfoDTO.setIdcardContent(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getIdcardContent());
+                            FederatedPlatformsRequestBean federatedPlatformsRequestBean = ConfigManager.getFederatedPlatformsRequestBean();
+                            federatedPlatformsRequestBean.getData().setValue(value);
+                            federatedPlatformsRequestBean.getData().setTaskId(federatedPlatformsResponseBean.getData().getTaskId());
+                            int Verifytype = 0;
+                            try {
+                                Verifytype = Integer.parseInt(federatedPlatformsRequestBean.getData().getVerifyType());
+                            } catch (NumberFormatException e) {
+                                e.printStackTrace();
+                                Verifytype = ConfigManager.getVerifytype(federatedPlatformsRequestBean.getData().getVerifyType());
+                            }
+                            ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN,
+                                    Verifytype,
+                                    federatedPlatformsRequestBean.getData().getIdNumber(),
+                                    federatedPlatformsRequestBean.getData().getName(),
+                                    federatedPlatformsRequestBean.getData().getPhone(),
+                                    "check",
+                                    federatedPlatformsResponseBean.getData().getTaskId(),
+                                    value,
+                                    federatedPlatformsRequestBean.getData().getPhoto()
+                                    , exInfoDTO,
+                                    federatedPlatformsRequestBean.getData().getQrcode(),
+                                    federatedPlatformsRequestBean.getData().getIcNumber());
+                            ConfigManager.CheckList.clear();
+                            HttpRequest.getInstance().requestFederatedPlatforms();
+                            //加载中
+                            if (federatedPlatformsResponseBean.getData().getDMainLine() != null &&
+                                    !federatedPlatformsResponseBean.getData().getDMainLine().equals("")) {
+                                loadingLocally_loadingTextView.setText(federatedPlatformsResponseBean.getData().getDMainLine());
+                            } else {
+                                loadingLocally_loadingTextView.setText("处理中……");
+                            }
+                            outcomeActivity_loadingLocally.setVisibility(View.VISIBLE);
+                            outcomeActivity_Outcome.setVisibility(View.GONE);
+                            outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+                            outcomeActivity_statusPending.setVisibility(View.GONE);
+                            String SubText = federatedPlatformsResponseBean.getData().getCButtonSubText();
+                            if (!StringIsNull.IsStringNull(SubText)) {
+                                SubText = SubText.replace("$count", "" + CheckSum)
+                                        .replace("0", "" + CheckSum);
+                                outcomeActivity_ConfirmWriteText2.setText("(" + SubText + ")");
+                                outcomeActivity_ConfirmWriteText2.setVisibility(View.VISIBLE);
+                            } else {
+                                outcomeActivity_ConfirmWriteText2.setVisibility(View.GONE);
+                            }
+                        }
+                    }
+                } else {
+                    Toast.makeText(CommonUtil.getCurrentActivity(), "选择失败,请重试", Toast.LENGTH_SHORT).show();
+                }
+            }
+        });
+        //Status==pending
+        outcomeActivity_statusPending = view.findViewById(R.id.OutcomeActivity_statusPending);
+        outcomeActivity_statusPending_Background = view.findViewById(R.id.OutcomeActivity_statusPending_Background);
+        outcomeActivity_statusPending_bMainLine = view.findViewById(R.id.OutcomeActivity_statusPending_bMainLine);
+        outcomeActivity_statusPending_bSubLine = view.findViewById(R.id.OutcomeActivity_statusPending_bSubLine);
+        outcomeActivity_statusPending_RecyclerView = view.findViewById(R.id.OutcomeActivity_statusPending_RecyclerView);
+        //顶部标题栏
+        loadingLocally_titleRelativeLayout = view.findViewById(R.id.LoadingLocally_titleRelativeLayout);
+        leftTopBarText = view.findViewById(R.id.leftTopBarText);
+        rightTopBarText = view.findViewById(R.id.rightTopBarText);
+        //通用结果页
+        generalOutCome_Background = view.findViewById(R.id.GeneralOutCome_Background);
+        generalOutCome_TitleText = view.findViewById(R.id.GeneralOutCome_TitleText);
+        generalOutCome_vaccinelconUrl = view.findViewById(R.id.GeneralOutCome_vaccinelconUrl);
+        generalOutCome_openMsg = view.findViewById(R.id.GeneralOutCome_openMsg);
+        generalOutCome_iconUrl = view.findViewById(R.id.GeneralOutCome_iconUrl);
+        generalOutCome_showUsername = view.findViewById(R.id.GeneralOutCome_showUsername);
+        generalOutCome_showNumber = view.findViewById(R.id.GeneralOutCome_showNumber);
+        generalOutCome_nucleid_title = view.findViewById(R.id.GeneralOutCome_nucleid_title);
+        generalOutCome_nucleid_content = view.findViewById(R.id.GeneralOutCome_nucleid_content);
+        generalOutCome_vaccineIcoTitle = view.findViewById(R.id.GeneralOutCome_vaccineIcoTitle);
+        generalOutCome_vaccineNum = view.findViewById(R.id.GeneralOutCome_vaccineNum);
+        generalOutCome_qrCodeText = view.findViewById(R.id.GeneralOutCome_qrCodeText);
+        generalOutCome_advertise = view.findViewById(R.id.GeneralOutCome_advertise);
+        //PAGE_TYPE_CLOSING_PENDING_MULTIPLE;
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE = view.findViewById(R.id.OutcomeActivity_closingPendingMultiple);
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLERecyclerView = view.findViewById(R.id.OutcomeActivity_closingPendingMultipleRecyclerView);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLEImage = view.findViewById(R.id.OutcomeActivity_closingPendingMultipleImage);
+        } else {
+            outcomeActivity_closingPendingMultipleLoadMore = view.findViewById(R.id.OutcomeActivity_closingPendingMultipleLoadMore);
+        }
+        //证件号相关
+        outcomeActivity_time2 = view.findViewById(R.id.OutcomeActivity_time2);
+        outcomeActivity_time_LinearLayout2 = view.findViewById(R.id.OutcomeActivity_time_LinearLayout2);
+        outcomeActivity_time_LinearLayout2.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (ConfigManager.getAuthenticationBean().getData().get(0).isOpenPassport()
+                        && !StringIsNull.IsStringNull(BusinessType) &&
+                        !BusinessType.equals(PAGE_TYPE_LOADING) && !BusinessType.equals(PAGE_TYPE_ENTERIDNUMBER) &&
+                        !BusinessType.equals(PAGE_TYPE_PASSPORTIN) && !BusinessType.equals(PAGE_TYPE_PASSPORTIN_B)) {
+                    PassportController.getInstance().PassportStart = "init";
+                    PassportController.getInstance().openOCrRecoge();//开启护照机线程识别
+                }
+                TaskStatus.setInitState();
+                resumeClickButton();
+                removeTouchView(federatedPlatformsResponseBean);
+            }
+        });
+        outcomeActivity_edit = view.findViewById(R.id.OutcomeActivity_edit);
+        outcomeActivity_editNum = view.findViewById(R.id.OutcomeActivity_editNum);
+        outcomeActivity_editDelete = view.findViewById(R.id.OutcomeActivity_editDelete);
+        outcomeActivity_edit.setHint("请输入购票证件号码");
+        outcomeActivity_keyboardview = view.findViewById(R.id.OutcomeActivity_keyboardview);
+        outcomeActivity_keyboardview.setEditText(outcomeActivity_edit);
+        outcomeActivity_edit.setmIKeyboardView(outcomeActivity_keyboardview);
+        outcomeActivity_cancelticket = view.findViewById(R.id.outcomeactivity_cancelticket);
+        outcomeActivity_cancelticket.setText("取消检票");
+        outcomeActivity_confirmTicket = view.findViewById(R.id.outcomeactivity_onfirmticket);
+        outcomeActivity_confirmTicket.setText("确认检票");
+        //设置自定义键盘事件监听及效果
+        SetKeyBoard();
+    }
+
+    //唤起键盘
+    private void setEnterIDNumbers() {
+        FederatedPlatformsResponseBean federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
+        if (ConfigManager.getAuthenticationBean().getData().get(0).getManualInIdCardAuth() != null &&
+                !StringIsNull.IsStringNull(ConfigManager.getAuthenticationBean().getData().get(0).getManualInIdCardAuth().getAppId())) {
+            DataReturns.getInstance().clearData();
+            TaskStatus.setStatus(TaskStatus.TASK_STATUS_ENTERIDNUMBER);
+            ////SmileController.getInstance().invokeStopVerify();//打断当次刷脸
+            BaiduFaceController.getInstance().invokeStopVerify();
+            FederatedPlatformsResponseBean.DataDTO dataDTO = new FederatedPlatformsResponseBean.DataDTO();
+            dataDTO.setEnd(false);
+            dataDTO.setStatus(PAGE_TYPE_ENTERIDNUMBER);
+            dataDTO.setIsOpen(-1);
+            federatedPlatformsResponseBean.setData(dataDTO);
+            federatedPlatformsResponseBean.setMsg("");
+            getPlatformsCod(federatedPlatformsResponseBean);
+        } else {
+            federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
+            FederatedPlatformsResponseBean.DataDTO dataDTO = new FederatedPlatformsResponseBean.DataDTO();
+            dataDTO.setEnd(true);
+            dataDTO.setStatus(PAGE_TYPE_LOCAL_LOCALERROR_B);
+            dataDTO.setIsOpen(-1);
+            federatedPlatformsResponseBean.setData(dataDTO);
+            federatedPlatformsResponseBean.setMsg("配置出错");
+            getPlatformsCod(federatedPlatformsResponseBean);
+        }
+    }
+
+    private long lastClickTime; // 上次点击的时间
+
+    private void SetKeyBoard() {
+        outcomeActivity_keyboardview.setKeyboard(new Keyboard(CommonUtil.getCurrentActivity(), R.xml.keyboard_num));
+        //点击删除
+        outcomeActivity_editDelete.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                AppLogUtils.i(false, TAG, "点击删除按钮");
+                Editable editable = outcomeActivity_edit.getText();
+                outcomeActivity_edit.setSelection(outcomeActivity_edit.length());
+                int start = outcomeActivity_edit.getSelectionStart();
+                if (editable != null && editable.length() > 0 && start > 0) {
+                    editable.delete(start - 1, start);
+                }
+                TimeData = 30;
+                setHandler(TimeData);
+            }
+        });
+        //长按清空
+        outcomeActivity_editDelete.setOnLongClickListener(new View.OnLongClickListener() {
+            @Override
+            public boolean onLongClick(View v) {
+                TimeData = 30;
+                setHandler(TimeData);
+                outcomeActivity_edit.setText("");
+                return false;
+            }
+        });
+        //键盘点击监听
+        outcomeActivity_keyboardview.setListener(new IKeyboardView.OnItemClickListener() {
+            @Override
+            public void onItemClick() {
+                TimeData = 30;
+                setHandler(TimeData);
+            }
+
+            @Override
+            public void ClickNum(boolean isNum) {
+                //点击删除
+                AppLogUtils.i(false, TAG, "点击键盘中删除按钮 ");
+                Editable editable = outcomeActivity_edit.getText();
+                outcomeActivity_edit.setSelection(outcomeActivity_edit.length());
+                int start = outcomeActivity_edit.getSelectionStart();
+                if (editable != null && editable.length() > 0 && start > 0) {
+                    editable.delete(start - 1, start);
+                }
+                TimeData = 30;
+                setHandler(TimeData);
+            }
+        });
+        //取消检票
+        outcomeActivity_cancelticket.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                AppLogUtils.i(true, TAG, "点击了手输证件号中取消检票按钮");
+                TaskStatus.setInitState();
+//                resumeClickButton();
+                removeTouchView(ConfigManager.getFederatedPlatformsResponseBean());
+            }
+        });
+        //确认检票。身份证判断,不符合则输入框内字体颜色变红,同时将输入框进行抖动处理;符合则将按钮进行放大缩小动画
+        outcomeActivity_confirmTicket.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                AppLogUtils.i(true, TAG, "点击了手输证件号中确认检票按钮");
+                String edit = outcomeActivity_edit.getText().toString();
+                if (!StringIsNull.IsStringNull(edit)) {
+                    if (!IdCardUtils.isValidatedAllIdcard(outcomeActivity_edit.getText().toString())) {//不符合
+                        //重置悬浮框时间
+                        TimeData = 30;
+                        setHandler(TimeData);
+                        //添加输入框文字变红
+                        outcomeActivity_edit.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fFF3141));
+                        //添加输入框抖动效果
+                        ConfigManager.ditheringAnimation(outcomeActivity_edit, CommonUtil.getCurrentActivity());
+                    } else {
+                        outcomeActivity_edit.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.black));
+                        UserInfoManager.getInstance().setUserInformationBean("",
+                                outcomeActivity_edit.getText().toString(), "", "", "");
+                        long now = System.currentTimeMillis();
+                        if (now - lastClickTime > 1000) {
+                            lastClickTime = now;
+                            sendEnterIDNumber();
+                        }
+                    }
+                } else {
+                    ConfigManager.ditheringAnimation(outcomeActivity_edit, CommonUtil.getCurrentActivity());
+                }
+            }
+        });
+        outcomeActivity_edit.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                int editStart = outcomeActivity_edit.getSelectionStart();
+                int editEnd = outcomeActivity_edit.getSelectionEnd();
+                if (s.length() >= 31) {
+                    ConfigManager.ditheringAnimation(outcomeActivity_edit, CommonUtil.getCurrentActivity());
+                    s.delete(editStart - 1, editEnd);//删除限制外的内容
+                    outcomeActivity_edit.setText(s);//显示限制内的内容
+                    outcomeActivity_editNum.setText("30/30");
+                } else {
+                    outcomeActivity_editNum.setText(editEnd + "/30");
+                }
+            }
+        });
+    }
+
+    public void sendEnterIDNumber() {
+        try {
+            ClickButtonFloatView.getInstance().removeClickButtonFloatView();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+//        AppHandler.getHandler().removeCallbacks(isEndRunnable);
+        AppHandler.getHandler().removeCallbacks(TimeRunnable);
+        AppHandler.getHandler().removeCallbacks(PassportRunnable);
+
+        DataReturns.getInstance().clearData();
+        TaskStatus.setStatus(TaskStatus.TASK_STATUS_ENTERIDNUMBER);
+        PortBeanB portBean = new PortBeanB();
+        portBean.setBusinessType(PAGE_TYPE_ENTERIDNUMBER);
+        String idNumber = "";
+        idNumber = outcomeActivity_edit.getText().toString();
+        UserInfoManager.getInstance().setUserInformationBean(idNumber, "", "", "", "");
+        //判断黑名单中是否存在该用户
+        if (BlacklistManager.getInstance().isInBlacklist(idNumber, "")) {
+            //展示了阻止通行结果页,直接return掉,不做后续逻辑处理
+            return;
+        }
+        //判断年龄限制是否打开
+        if (ConfigManager.isAgeLimitOpen(idNumber)) {
+            return;
+        }
+        AppLogUtils.i(true, TAG, "手输证件号输入完成" + ConfigManager.getGson().toJson(portBean));
+        Map<String, Object> params = new HashMap<>();
+        params.put("sfzh", idNumber);
+        Constants.IDCARD_TYPE = 5;
+        FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
+        exInfoDTO.setPassRes("");
+        exInfoDTO.setSmileParams("");
+        exInfoDTO.setIdcardContent("");
+        ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN, Constants.IDCARD_TYPE, idNumber,
+                "", "", "check", "", "",
+                "", exInfoDTO, "", "");
+        //当核验接口未开启则直接return,无法做后续处理
+        if (!ConfigManager.getAuthenticationBean().getData().get(0).isUseLinkage()) {
+            FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "未开启相关配置,禁止使用手输证件号", 500, "未开启相关配置,禁止使用手输证件号");
+            DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
+            return;
+        }
+        if (ConfigManager.isPreCheck()) {
+            if (ConfigManager.getAuthenticationBean().getData().get(0).getManualInUsePersonCard()) {
+                HttpRequest.getInstance().requestFederatedPlatformsCheck_qrcode_enterIdnumber_icCard();
+            } else {
+                AppLogUtils.i(true, TAG, "手输证件号_不开启人证比对,开启预检查:默认人证比对成功(虚拟)");
+                DataReturns.getInstance().doDataReturns(null, DataReturns.FACE_DATA_VIRTUAL);
+                HttpRequest.getInstance().requestFederatedPlatformsCheck_qrcode_enterIdnumber_icCard();
+            }
+
+
+        } else {
+            if (ConfigManager.getAuthenticationBean().getData().get(0).getManualInUsePersonCard()) {//开启人证比对
+                HttpRequest.getInstance().requestFederatedPlatforms_qrcode_enterIdnumber_icCard();
+            } else {
+                AppLogUtils.i(true, TAG, "手输证件号_不开启人证比对,开启预检查:默认人证比对成功(虚拟)");
+                HttpRequest.getInstance().requestFederatedPlatforms_qrcode_enterIdnumber_icCard();
+            }
+
+        }
+    }
+
+    int TimeData = 0;
+    Runnable TimeRunnable = new Runnable() {
+        @Override
+        public void run() {
+            // TODO 在此处添加执行的代码
+            if (TimeData > 0) {
+                if (outcomeActivity_SilentDisplay.getVisibility() == View.VISIBLE) {
+                    TimeData--;
+                    outcomeActivity_SilentDisplayTimeText.setText(TimeData + "s");
+                } else if (outcomeActivity_EnterIDNumbersLinearLayout.getVisibility() == View.VISIBLE) {
+                    TimeData--;
+                    outcomeActivity_time2.setText(TimeData + "s");
+                } else if (outcomeActivity_LinearLayoutOutcome.getVisibility() == View.VISIBLE) {
+                    outcomeActivity_time_LinearLayout.setVisibility(View.VISIBLE);
+                    TimeData--;
+                    outcomeActivity_time.setText(TimeData + "s");
+                } else if (outcomeActivity_time_LinearLayout.getVisibility() == View.VISIBLE) {
+                    TimeData--;
+                    outcomeActivity_time.setText(TimeData + "s");
+                } else if (outcomeActivity_loadingB.getVisibility() == View.VISIBLE) {
+                    TimeData--;
+                    outcomeActivity_time3.setText(TimeData + "s");
+                }
+                AppHandler.getHandler().postDelayed(this, 1000);
+            } else {
+                outcomeActivity_time_LinearLayout.setVisibility(View.GONE);
+                outcomeActivity_time_LinearLayout2.setVisibility(View.GONE);
+                AppLogUtils.i(true, "结果页销毁", "结果页延时,到时后执行销毁结果页");
+                resumeClickButton();
+                //移除悬浮view
+                removeTouchView(ConfigManager.getFederatedPlatformsResponseBean());
+            }
+
+        }
+    };
+
+    //启动悬浮窗计时及延时
+    private void setHandler(int PageTime) {
+        AppHandler.getHandler().removeCallbacks(TimeRunnable);
+        AppHandler.getHandler().postDelayed(TimeRunnable, 0);
+//        AppHandler.getHandler().removeCallbacks(isEndRunnable);
+//        AppHandler.getHandler().postDelayed(isEndRunnable, PageTime * 1000);
+    }
+
+    //getFederatedPlatformsBean返回后执行该方法
+    String BusinessType = "";
+
+    public void getPlatformsCod(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        ImageLoaderUtils.loadImageColor(OutcomeActivity_bgImagee);
+        if (federatedPlatformsResponseBean.getData().getOpenTimes() == null) {
+            federatedPlatformsResponseBean.getData().setOpenTimes(0);
+        }
+        if (federatedPlatformsResponseBean != null) {
+            if (!federatedPlatformsResponseBean.getData().getStatus().equals(PAGE_TYPE_ENTERIDNUMBER)) {
+                int passableOpenTimes = (int) SharedPreferencesUtils.getParam(MyAppliction.getContext(), "numberOfTicketChecks", 0);
+                this.passableOpenTimes = passableOpenTimes + federatedPlatformsResponseBean.getData().getOpenTimes();
+                SharedPreferencesUtils.setParam(CommonUtil.getCurrentActivity(), "numberOfTicketChecks", this.passableOpenTimes);
+                if (federatedPlatformsResponseBean.getData().getIsOpen() == 0) {
+                    optime += federatedPlatformsResponseBean.getData().getOpenTimes();
+                    if (ConfigManager.isPreCheck()) {
+                        SignalType = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getSignalType());
+                    } else {
+                        SignalType = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getUseSerialPort());
+                    }
+                    SignalNo = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getSignalNo());
+                    if (!isSignalRun) {
+                        AppHandler.getHandler().postDelayed(runnable, 0);// 打开定时器,执行操作
+                    }
+                }
+                if (loadingLocally_bottom_time != null) {
+                    loadingLocally_bottom_time.setText(DateUtil.getNowDateTime());//获取时间
+                    AppHandler.getHandler().removeCallbacks(loadingLocallyRunnable);
+                    AppHandler.getHandler().postDelayed(loadingLocallyRunnable, 1000);
+                }
+            }
+        }
+        BusinessType = federatedPlatformsResponseBean.getData().getStatus();
+        String IDPhoto = "";
+        String ScenePhoto = "";
+        Bitmap bitmap = null;
+        try {
+            if (!(StringIsNull.IsStringNull(UserInfoManager.getInstance().getUserInformationBean().getIdPhoto()))) {
+                IDPhoto = "data:image/jpg;base64," + UserInfoManager.getInstance().getUserInformationBean().getIdPhoto();
+            }
+            if (!(StringIsNull.IsStringNull(UserInfoManager.getInstance().getUserInformationBean().getScenePhoto()))) {
+                ScenePhoto = "data:image/jpg;base64," + UserInfoManager.getInstance().getUserInformationBean().getScenePhoto();
+            }
+
+            if (UserInfoManager.getInstance().getUserInformationBean().getBitmap() != null) {
+                bitmap = UserInfoManager.getInstance().getUserInformationBean().getBitmap();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        //顶部标题栏
+        topTitleBar(federatedPlatformsResponseBean);
+        //开门时上报进出记录及入库
+        recordOfAccessOrPutInStorage(federatedPlatformsResponseBean);
+        StateExecution(federatedPlatformsResponseBean, ScenePhoto, IDPhoto,bitmap);
+        setIsEnd(federatedPlatformsResponseBean);
+        mView.setVisibility(View.VISIBLE);
+    }
+
+    private void topTitleBar(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        boolean isShowTopBar = false;
+        if (ConfigManager.getAuthenticationBean() != null && ConfigManager.getAuthenticationBean().getData() != null) {
+            isShowTopBar = ConfigManager.getAuthenticationBean().getData().get(0).isShowTopBar();
+        }
+        if (isShowTopBar) {
+            isHideNavigationBar = true;
+            loadingLocally_titleRelativeLayout.setVisibility(View.VISIBLE);
+            String LeftTopBarText = ConfigManager.getAuthenticationBean().getData().get(0).getLeftTopBarText();
+            if (!StringUtils.isEmpty(LeftTopBarText)) {
+                leftTopBarText.setText(ConfigManager.getAuthenticationBean().getData().get(0).getLeftTopBarText());
+                leftTopBarText.setVisibility(View.VISIBLE);
+            } else {
+                leftTopBarText.setVisibility(View.GONE);
+            }
+            String RightTopBarText = ConfigManager.getAuthenticationBean().getData().get(0).getRightTopBarText();
+            if (!StringIsNull.IsStringNull(RightTopBarText)) {
+                rightTopBarText.setText(ConfigManager.getAuthenticationBean().getData().get(0).getRightTopBarText());
+                rightTopBarText.setVisibility(View.VISIBLE);
+            } else {
+                rightTopBarText.setVisibility(View.GONE);
+            }
+            //添加成功显示值
+            int NumberOfTicketChecks = ConfigManager.getNumberOfTicketChecks();
+            loadingLocally_NumberOfTicketChecks.setText(String.valueOf(NumberOfTicketChecks));
+            //已/可通行人数
+            loadingLocally_NumberOfVisitors.setText(openTimes + "/" + passableOpenTimes);
+        } else {
+            loadingLocally_titleRelativeLayout.setVisibility(View.GONE);
+            isHideNavigationBar = false;
+        }
+    }
+
+    /**
+     * 开门时(isOpen == 0) 推送进出记录 以及 用户入库
+     *
+     * @param federatedPlatformsResponseBean
+     */
+    private void recordOfAccessOrPutInStorage(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        if (federatedPlatformsResponseBean.getData().getIsOpen() != 0) {
+            return;
+        }
+        //本地任务态为刷脸且进站刷脸通行模式下,直接return 不做后续逻辑处理(进站模式的进出记录在这推送,改动点太多,暂时不变)
+        if (TaskStatus.taskStatus.equals(TaskStatus.TASK_STATUS_FACE) && ConfigManager.isOpenFastThrough_in()) {
+            return;
+        }
+        AppLogUtils.i(true, "结果页展示-进出记录推送", "推送设备刷卡记录");
+        //推送进出记录(刷脸刷卡记录)
+        String Photo = UserInfoManager.getInstance().getUserInformationBean().getScenePhoto();
+        if (StringIsNull.IsStringNull(Photo)) {
+            Photo = UserInfoManager.getInstance().getUserInformationBean().getIdPhoto();
+        }
+        HttpRequest.getInstance().setEventRecords(TaskStatus.taskStatus,
+                UserInfoManager.getInstance().getUserInformationBean().getName(),
+                UserInfoManager.getInstance().getUserInformationBean().getIdNumber(),
+                Photo, "",
+                UserInfoManager.getInstance().getUserInformationBean().getMobile(), true, 0);
+        //用户入库
+        if (ConfigManager.getAuthenticationBean().getData().get(0).isAuthVerifiedFacein() && TaskStatus.taskStatus.equals(TaskStatus.TASK_STATUS_PERSONCARD)) {
+            AppLogUtils.i(true, "结果页展示-用户匿名入库", "满足入库条件:开启用户入库功能及完成一比一比对");
+            String image = UserInfoManager.getInstance().getUserInformationBean().getScenePhoto();
+            if (StringIsNull.IsStringNull(Photo)) {
+                image = UserInfoManager.getInstance().getUserInformationBean().getIdPhoto();
+            }
+            if (!StringIsNull.IsStringNull(image) &&
+                    !StringIsNull.IsStringNull(UserInfoManager.getInstance().getUserInformationBean().getIdNumber()) &&
+                    !StringIsNull.IsStringNull(UserInfoManager.getInstance().getUserInformationBean().getName())) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("appId", ConfigManager.serviceAppId);
+                map.put("image", image);
+                map.put("certNo", UserInfoManager.getInstance().getUserInformationBean().getIdNumber());
+                map.put("certName", UserInfoManager.getInstance().getUserInformationBean().getName());
+                HttpRequest.getInstance().requestUserwithftoken(map);
+            } else {
+                AppLogUtils.e(true, "用户匿名入库", "用户匿名入库 姓名、照片、身份证号存在空值,无法满足入库要求");
+            }
+        }
+    }
+
+    private int optime = 0;
+    private String SignalType = "default";
+    private String SignalNo = "";
+    private boolean isSignalRun = false;
+    private Timer mOpenDoorTimer = new Timer();
+    public Runnable runnable = new Runnable() {
+        @Override
+        public void run() {
+            // TODO 在此处添加执行的代码
+            if (optime > 0) {
+                isSignalRun = true;
+                isOpenTime(SignalType, SignalNo);
+                optime--;
+            } else {
+                SignalType = "default";
+                SignalNo = "";
+                isSignalRun = false;
+                if (ConfigManager.getAuthenticationBean().getData().get(0).getRelayOpenModel() == 2) {//开 - 门磁 -闭 模式
+                    RelaysAndLedUtile.getInstance().isOpenRelays(0);//1 开门 0关门
+                }
+            }
+        }
+    };
+    //门磁延时器
+    Runnable DoorMagneticTimerRunnable = new Runnable() {
+        @Override
+        public void run() {
+            // TODO 在此处添加执行的代码
+            AppLogUtils.i(true, TAG, "下发继电器关门信号");
+            AppHandler.getHandler().postDelayed(runnable, 0);
+        }
+    };
+
+    public void isOpenTime(String UseSerialPort, String SignalNo) {
+        if (!StringIsNull.IsStringNull(UseSerialPort) && UseSerialPort.equals("RS232")) {
+            if (!StringUtils.isEmpty(SignalNo)) {
+                AppLogUtils.i(true, TAG, "发送RS232开门信号: " + SignalNo);
+                isSignalRun = false;
+                SerialController.getInstance().DoorSerialSendPortData(SignalNo);
+                AppHandler.getHandler().postDelayed(runnable, 1000);
+            } else {
+                AppLogUtils.e(true, TAG, "RS232开门信号为空");
+            }
+        } else {
+            if (ConfigManager.getAuthenticationBean().getData().get(0).getRelayOpenModel() == 2) {//开 - 门磁 -闭 模式
+                AppLogUtils.i(true, TAG, "下发继电器开门信号");
+                RelaysAndLedUtile.getInstance().isOpenRelays(1);//1 开门 0关门
+                //打开60秒后自动执行下次逻辑的延时器
+                int GateTimeOut = 60 * 1000;
+                if (ConfigManager.getAuthenticationBean().getData().get(0).getGateTimeOut() > 0) {
+                    GateTimeOut = ConfigManager.getAuthenticationBean().getData().get(0).getGateTimeOut();
+                }
+                AppHandler.getHandler().removeCallbacks(DoorMagneticTimerRunnable);
+                AppHandler.getHandler().postDelayed(DoorMagneticTimerRunnable, GateTimeOut);
+            } else {// 开 - 闭 模式
+                AppLogUtils.i(true, TAG, "下发继电器开门信号");
+                RelaysAndLedUtile.getInstance().isOpenRelays(1);//1 开门 0关门
+                TimerTask timerTask = new TimerTask() {
+                    @Override
+                    public void run() {
+                        AppLogUtils.i(true, TAG, "下发继电器关门信号");
+                        RelaysAndLedUtile.getInstance().isOpenRelays(0);//1 开门 0关门
+                        int delayMillis = 1000;
+                        if (ConfigManager.getAuthenticationBean().getData().get(0).getSignalInterval() > 0) {
+                            delayMillis = ConfigManager.getAuthenticationBean().getData().get(0).getSignalInterval();
+                        }
+                        AppHandler.getHandler().postDelayed(runnable, delayMillis);
+                    }
+                };
+                int delay = 1000;
+                if (ConfigManager.getAuthenticationBean().getData().get(0).getOpenCloseInterval() > 0) {
+                    delay = ConfigManager.getAuthenticationBean().getData().get(0).getOpenCloseInterval();
+                }
+                mOpenDoorTimer.schedule(timerTask, delay);
+            }
+
+        }
+    }
+
+    //在主线程中进行数据处理
+    Runnable loadingLocallyRunnable = new Runnable() {
+        @Override
+        public void run() {
+            // TODO 在此处添加执行的代码
+            loadingLocally_bottom_time.setText(DateUtil.getNowDateTime());
+            AppHandler.getHandler().postDelayed(this, 1000);
+        }
+    };
+
+    /**
+     * 通用结果页
+     *
+     * @param federatedPlatformsResponseBean
+     * @return
+     */
+    public boolean isCommonClosingPage(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+
+        String Status = federatedPlatformsResponseBean.getData().getStatus();
+        String ShowPageType = federatedPlatformsResponseBean.getData().getShowPageType();
+        if ((StringIsNull.IsStringNull(Status)) ||
+                (!StringIsNull.IsStringNull(Status) && Status.equals(PAGE_TYPE_CLOSING) && StringIsNull.IsStringNull(ShowPageType)) ||
+                (!StringIsNull.IsStringNull(Status) && Status.equals(PAGE_TYPE_CLOSING) && ShowPageType.equals("common"))
+
+        ) {
+            return true;
+        }
+        return false;
+
+    }
+
+    private void StateExecution(FederatedPlatformsResponseBean federatedPlatformsResponseBean, String ScenePhoto,
+                                String IDPhoto, Bitmap bitmap) {
+        if (isCommonClosingPage(federatedPlatformsResponseBean)) { //通用结果页
+            outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+            outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+            outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+            if (!ConfigManager.isFloatingPages()){
+                ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+            }
+            ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+            getGeneralOutcome(federatedPlatformsResponseBean, ScenePhoto, IDPhoto,bitmap);
+            return;
+        }
+        switch (federatedPlatformsResponseBean.getData().getStatus()) {
+            case PAGE_TYPE_CLOSING:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                if (!ConfigManager.isFloatingPages()){
+                    ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+                }
+                getClosing(federatedPlatformsResponseBean, ScenePhoto, IDPhoto,bitmap);
+                break;
+            case PAGE_TYPE_CLOSING_MAX_PICTURE://大图UI展示
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                if (!ConfigManager.isFloatingPages()){
+                    ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+                }
+                getclosingMaxPicture(federatedPlatformsResponseBean, ScenePhoto, IDPhoto,bitmap);
+                break;
+            case PAGE_TYPE_PENDING_MULTIPLE:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                //SmileController.getInstance().invokeStopVerify();
+                if (!ConfigManager.isFloatingPages()){
+                    ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+                }
+                BaiduFaceController.getInstance().invokeStopVerify();
+                cChoiseListBeans.clear();
+                for (int i = 0; i < federatedPlatformsResponseBean.getData().getCChoiseList().size(); i++) {
+                    String title = federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getTitle();
+                    String subTitle = federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getSubTitle();
+                    for (int j = 0; j < federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().size(); j++) {
+                        CChoiseListBean cChoiseListBean = new CChoiseListBean();
+                        cChoiseListBean.setTitle(title);
+                        cChoiseListBean.setSubTitle(subTitle);
+                        cChoiseListBean.setBottomLeftTitle(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getBottomLeftTitle()
+                        );
+                        cChoiseListBean.setBottomRightTitle(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getBottomRightTitle()
+                        );
+                        cChoiseListBean.setLabel(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getLabel()
+                        );
+                        cChoiseListBean.setTopTitle(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getTopTitle()
+                        );
+                        cChoiseListBean.setValue(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getValue()
+                        );
+                        cChoiseListBean.setSelected(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).isSelected()
+                        );
+                        cChoiseListBeans.add(cChoiseListBean);
+                    }
+                }
+                if (!ConfigManager.isFloatingPages()){
+                    ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+                }
+                getPendingMultiple(federatedPlatformsResponseBean);
+                break;
+            case PAGE_TYPE_CLOSING_PENDING_MULTIPLE://多选票结束页
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                cChoiseListBeans.clear();
+                passersNumber = 0;
+                for (int i = 0; i < federatedPlatformsResponseBean.getData().getCChoiseList().size(); i++) {
+                    String title = federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getTitle();
+                    String subTitle = federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getSubTitle();
+                    for (int j = 0; j < federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().size(); j++) {
+                        if (federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).isSelected()) {
+                            passersNumber += 1;
+                        }
+                        CChoiseListBean cChoiseListBean = new CChoiseListBean();
+                        cChoiseListBean.setTitle(title);
+                        cChoiseListBean.setSubTitle(subTitle);
+                        cChoiseListBean.setBottomLeftTitle(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getBottomLeftTitle()
+                        );
+                        cChoiseListBean.setBottomRightTitle(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getBottomRightTitle()
+                        );
+                        cChoiseListBean.setLabel(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getLabel()
+                        );
+                        cChoiseListBean.setTopTitle(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getTopTitle()
+                        );
+                        cChoiseListBean.setValue(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getValue()
+                        );
+                        cChoiseListBean.setSelected(
+                                federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).isSelected()
+                        );
+                        cChoiseListBeans.add(cChoiseListBean);
+                    }
+                }
+                if (!ConfigManager.isFloatingPages()){
+                    ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+                }
+                getclosingPendingMultiple(federatedPlatformsResponseBean);
+                break;
+            case PAGE_TYPE_LOADING_LOCAL_TRANSITION:
+            case PAGE_TYPE_LOADING:
+            case PAGE_TYPE_LOADING_C:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                if (!ConfigManager.isFloatingPages()){
+                    ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+                }
+                getLoading(federatedPlatformsResponseBean);
+                break;
+            case PAGE_TYPE_PERSON_CARD_HINT:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_time_LinearLayout.setVisibility(View.GONE);//隐藏倒计时
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                getPersonCardHintPage(federatedPlatformsResponseBean);
+                break;
+            case PAGE_TYPE_PENDING:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                //SmileController.getInstance().invokeStopVerify();
+                BaiduFaceController.getInstance().invokeStopVerify();
+                if (!ConfigManager.isFloatingPages()){
+                    ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+                }
+                getPending(federatedPlatformsResponseBean);
+                break;
+            case PAGE_TYPE_LOCAL_LOCALERROR:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                ImageLoaderUtils.loadImageColor(OutcomeActivity_bgImagee);
+                getLocalError(federatedPlatformsResponseBean.getMsg(), federatedPlatformsResponseBean);
+                break;
+            case PAGE_TYPE_LOCAL_LOCALERROR_B:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                ImageLoaderUtils.loadImageColor(OutcomeActivity_bgImagee);
+                getLocalErrorB(federatedPlatformsResponseBean.getMsg(), federatedPlatformsResponseBean
+                        , ScenePhoto, IDPhoto,bitmap);
+                break;
+            case PAGE_TYPE_LOCAL_LOCALERROR_C:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.GONE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.VISIBLE);
+                setLocalError_C();
+                break;
+            case PAGE_TYPE_LOCAL_OUTCOME:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                if (!ConfigManager.isFloatingPages()){
+                    ImageLoaderUtils.loadRes(R.mipmap.background,OutcomeActivity_bgImagee);
+                }
+                getLocalOutcome(federatedPlatformsResponseBean, ScenePhoto, IDPhoto,bitmap);
+                break;
+            case PAGE_TYPE_ENTERIDNUMBER:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.GONE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.VISIBLE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                setEnterIDNumber();
+                break;
+            case PAGE_TYPE_PASSPORTIN:
+            case PAGE_TYPE_PASSPORTIN_B:
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                setPassportIn(federatedPlatformsResponseBean);
+                break;
+            default://条件都不满足展示通用页
+                outcomeActivity_LinearLayoutOutcome.setVisibility(View.VISIBLE);
+                outcomeActivity_EnterIDNumbersLinearLayout.setVisibility(View.GONE);
+                outcomeActivity_SilentDisplay.setVisibility(View.GONE);
+                getLocalError("核验接口返回数据出错", federatedPlatformsResponseBean);
+                break;
+        }
+    }
+
+    /**
+     * 语音播报的兼容性处理
+     * <p>
+     * 1. 以票务服务器返回的openVoiceMsg为准
+     * 2. 票务服务器返回的openVoiceMsg为空时,若isOpen为0则播报授权平台配置的开门成功的语音,若isOpen为1则播报授权平台配置的开门失败的语音
+     */
+    public void voiceSpeakCompatible(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getOpenVoiceMsg())) {
+            MTTSManager.getInstance().speak(federatedPlatformsResponseBean.getData().getOpenVoiceMsg());
+        }
+    }
+
+
+    //多选票结束页
+    int passersNumber = 0;//通行人数
+
+    private void getclosingPendingMultiple(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        if (!ConfigManager.isFloatingPages()) {
+            int nums = 0;
+            for (int i = 0; i < cChoiseListBeans.size(); i++) {
+                if (cChoiseListBeans.get(i).isSelected()) {
+                    nums += 1;
+                }
+            }
+            OutcomeActivity_MultipleVotes_VerificationText.setText("检票成功,可通行" + nums + "人");
+        }
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.VISIBLE);
+        loadingLocally_bottom_LinearLayout.setVisibility(View.VISIBLE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        loadingLocally_TopLinearLayout.setVisibility(View.VISIBLE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        if (outcomeActivity_LocalError_idNumberLinear != null) {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+        }
+        LinearLayoutManager manager = new LinearLayoutManager(CommonUtil.getCurrentActivity());
+        manager.setOrientation(LinearLayoutManager.VERTICAL);
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLERecyclerView.setLayoutManager(manager);
+        //创建适配器
+        if (ConfigManager.isFloatingPages()) {
+            outcomeAdapter4 = new OutcomeAdapter4(cChoiseListBeans, CommonUtil.getCurrentActivity()
+                    , "");
+            outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLERecyclerView.setAdapter(outcomeAdapter4);
+        } else {
+            outcomeAdapter2 = new OutcomeAdapter2(cChoiseListBeans, CommonUtil.getCurrentActivity()
+                    , "");
+            outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLERecyclerView.setAdapter(outcomeAdapter2);
+        }
+
+        //当日检票次数
+        int numberOfTicketChecks = ConfigManager.getNumberOfTicketChecks();
+        if (federatedPlatformsResponseBean.getData().getIsOpen() == 0) {
+            numberOfTicketChecks += 1;
+            SharedPreferencesUtils.setParam(CommonUtil.getCurrentActivity(), "openTimesNum", numberOfTicketChecks);
+        }
+        if (isHideNavigationBar) {
+            loadingLocally_NumberOfTicketChecks.setText(String.valueOf(numberOfTicketChecks));
+        }
+
+        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+        loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+        ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+        loadingLocally_Text.setText("可通行" + passersNumber + "人");
+        loadingLocally_Image.setVisibility(View.GONE);
+        //数据语音播报
+        voiceSpeakCompatible(federatedPlatformsResponseBean);
+        //下面代码是重点
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLERecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
+                new ViewTreeObserver.OnGlobalLayoutListener() {
+                    @Override
+                    public void onGlobalLayout() {
+                        int lastCompletelyVisibleItemPosition = manager.findLastCompletelyVisibleItemPosition();
+                        boolean b;
+                        if (ConfigManager.isFloatingPages()) {
+                            b = lastCompletelyVisibleItemPosition < outcomeAdapter4.getItemCount() - 1;
+                            if (b) {
+                                outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLEImage.setVisibility(View.VISIBLE);
+                                outcomeActivity_RecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                            } else {
+                                outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLEImage.setVisibility(View.GONE);
+                                outcomeActivity_RecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                            }
+                        } else {
+                            b = lastCompletelyVisibleItemPosition < outcomeAdapter2.getItemCount() - 1;
+                            if (b) {
+                                outcomeActivity_closingPendingMultipleLoadMore.setVisibility(View.VISIBLE);
+                                outcomeActivity_RecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                            } else {
+                                outcomeActivity_closingPendingMultipleLoadMore.setVisibility(View.GONE);
+                                outcomeActivity_RecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                            }
+                        }
+                    }
+                });
+
+        if (federatedPlatformsResponseBean.getData().getEnd()) {
+            openDelay(ConfigManager.getAuthenticationBean().getData().get(0).getSuccessPageTime());
+        }
+    }
+
+    //LocalError
+    private void getLocalError(String msg, FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        if (TaskStatus.taskStatus == TaskStatus.TASK_STATUS_FACE && !ConfigManager.isFloatingPages()&&
+                StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getFailText())){
+            ImageLoaderUtils.loadImageColor(OutcomeActivity_bgImagee);
+        }
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.VISIBLE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.VISIBLE);
+        loadingLocally_bottom_LinearLayout.setVisibility(View.VISIBLE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        if (!ConfigManager.isFloatingPages()) {
+            if (TaskStatus.taskStatus.equals(TaskStatus.TASK_STATUS_FACE) &&
+                    !StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getScanFaceFailedPageUrl())
+                    && federatedPlatformsResponseBean.getData().isSmileResult() &&
+                    StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getFailText())) {
+                URL url = null;
+                try {
+                    url = new URL(ConfigManager.getAuthenticationBeanListBean().getScanFaceFailedPageUrl());
+                    requestImg(url, IMAGE_TYPE_SCAN_FACE_FAILED_PAGE);
+                } catch (MalformedURLException e) {
+                    e.printStackTrace();
+                }
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.erroractivity_bg,OutcomeActivity_bgImagee);
+            }
+        } else {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.VISIBLE);
+            outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+            loadingLocally_TopLinearLayout.setVisibility(View.VISIBLE);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+            loadingLocally_Image.setVisibility(View.VISIBLE);
+            if (federatedPlatformsResponseBean != null && federatedPlatformsResponseBean.getData() != null &&
+                    !StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getAMainIcon())) {
+                if (federatedPlatformsResponseBean.getData().getAMainIcon().equals("2")) {
+                    ImageLoaderUtils.loadImage(R.mipmap.yellow_background_gradient,loadingLocally_TopLinearLayoutImage);
+                    ImageLoaderUtils.loadImage(R.mipmap.mainactivity_abnormal,loadingLocally_Image);
+                    outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+                    loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fFF9900));
+                } else if (federatedPlatformsResponseBean.getData().getAMainIcon().equals("1")) {
+                    ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+                    ImageLoaderUtils.loadImage(R.mipmap.mainactivity_aicon,loadingLocally_Image);
+                    outcomeActivity_LocalError_idNumber.setVisibility(View.VISIBLE);
+                    loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+                } else {
+                    ImageLoaderUtils.loadImage(R.mipmap.red_background_gradient,loadingLocally_TopLinearLayoutImage);
+                    ImageLoaderUtils.loadImage(R.mipmap.mainactivity_erroe,loadingLocally_Image);
+                    outcomeActivity_LocalError_idNumber.setVisibility(View.VISIBLE);
+                    loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fEE4523));
+                }
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.red_background_gradient,loadingLocally_TopLinearLayoutImage);
+                ImageLoaderUtils.loadImage(R.mipmap.mainactivity_erroe,loadingLocally_Image);
+                outcomeActivity_LocalError_idNumber.setVisibility(View.VISIBLE);
+                loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fEE4523));
+            }
+
+            loadingLocally_Text.setText(msg);
+        }
+        if (ConfigManager.getAuthenticationBean().getData().get(0).isManualInIdCard() && TaskStatus.taskStatus.equals(TaskStatus.TASK_STATUS_FACE)) {
+            if (ConfigManager.isFloatingPages()) {
+                outcomeActivity_LocalError_idNumber.setVisibility(View.VISIBLE);
+            } else {
+                outcomeActivity_SilentDisplayidNumber.setVisibility(View.VISIBLE);
+            }
+        } else {
+            if (ConfigManager.isFloatingPages()) {
+                outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+            } else {
+                outcomeActivity_SilentDisplayidNumber.setVisibility(View.GONE);
+            }
+        }
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+        } else {
+            URL url = null;
+            try {
+                if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getAMainIcon())) {
+                    url = new URL(federatedPlatformsResponseBean.getData().getAMainIcon());
+                    requestImg(url, "LocalError");
+                }
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+            }
+            if (StringIsNull.IsStringNull(msg)) {
+                LoadingLocally_LocalErrorImageView.setVisibility(View.GONE);
+            } else {
+                LoadingLocally_LocalErrorImageView.setVisibility(View.VISIBLE);
+                loadingLocally_LocalErrorTextView.setText(msg);
+            }
+        }
+
+        MTTSManager.getInstance().speak(federatedPlatformsResponseBean.getData().getOpenVoiceMsg());
+        openDelay(ConfigManager.getAuthenticationBean().getData().get(0).getFailPageTime());
+    }
+
+    private void getLocalErrorB(String msg, FederatedPlatformsResponseBean federatedPlatformsResponseBean,
+                                String ScenePhoto, String IDPhoto,Bitmap bitmap) {
+        if (TaskStatus.taskStatus == TaskStatus.TASK_STATUS_FACE && !ConfigManager.isFloatingPages()&&
+                StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getFailText())){
+            ImageLoaderUtils.loadImageColor(OutcomeActivity_bgImagee);
+        }
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        }
+        outcomeActivity_LocalError.setVisibility(View.VISIBLE);
+        loadingLocally_bottom_LinearLayout.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        if (!ConfigManager.isFloatingPages()) {
+            if (TaskStatus.taskStatus.equals(TaskStatus.TASK_STATUS_FACE) &&
+                    !StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getScanFaceFailedPageUrl())
+                    && federatedPlatformsResponseBean.getData().isSmileResult() &&
+                    StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getFailText())) {
+                URL url = null;
+                try {
+                    url = new URL(ConfigManager.getAuthenticationBeanListBean().getScanFaceFailedPageUrl());
+                    requestImg(url, IMAGE_TYPE_SCAN_FACE_FAILED_PAGE);
+                } catch (MalformedURLException e) {
+                    e.printStackTrace();
+                }
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.erroractivity_bg,OutcomeActivity_bgImagee);
+            }
+        } else {
+            loadingLocally_TopLinearLayout.setVisibility(View.VISIBLE);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+            loadingLocally_Image.setVisibility(View.VISIBLE);
+
+            if (msg.equals("请再试一次")) {
+                ImageLoaderUtils.loadImage(R.mipmap.yellow_background_gradient,loadingLocally_TopLinearLayoutImage);
+                ImageLoaderUtils.loadImage(R.mipmap.mainactivity_abnormal,loadingLocally_Image);
+                outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+                loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fFF9900));
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.red_background_gradient,loadingLocally_TopLinearLayoutImage);
+                ImageLoaderUtils.loadImage(R.mipmap.mainactivity_erroe,loadingLocally_Image);
+                outcomeActivity_LocalError_idNumber.setVisibility(View.VISIBLE);
+                loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fEE4523));
+            }
+            loadingLocally_Text.setText(msg);
+        }
+        if (ConfigManager.getAuthenticationBean().getData().get(0).isManualInIdCard() && TaskStatus.taskStatus.equals(TaskStatus.TASK_STATUS_FACE)) {
+            if (ConfigManager.isFloatingPages()) {
+                outcomeActivity_LocalError_idNumber.setVisibility(View.VISIBLE);
+            } else {
+                outcomeActivity_SilentDisplayidNumber.setVisibility(View.VISIBLE);
+            }
+        } else {
+            if (ConfigManager.isFloatingPages()) {
+                outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+            } else {
+                outcomeActivity_SilentDisplayidNumber.setVisibility(View.GONE);
+            }
+        }
+        if (ConfigManager.isFloatingPages()) {
+            RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(25));
+            if (!StringIsNull.IsStringNull(ScenePhoto)) {
+                ImageLoaderUtils.loadImage(ScenePhoto,outcomeActivity_LocalErrorImage,options);
+            } else if (!StringIsNull.IsStringNull(IDPhoto)) {
+                ImageLoaderUtils.loadImage(IDPhoto,outcomeActivity_LocalErrorImage,options);
+            }else if (bitmap != null) {
+                outcomeActivity_OutcomeImage.setImageBitmap(bitmap);
+            } else {
+                outcomeActivity_LocalErrorImage.setVisibility(View.GONE);
+                outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+            }
+        } else {
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getAMainIcon())){
+                URL url = null;
+                try {
+                    url = new URL(federatedPlatformsResponseBean.getData().getAMainIcon());
+                    requestImg(url, "LocalError");
+                } catch (MalformedURLException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (StringIsNull.IsStringNull(msg)) {
+                LoadingLocally_LocalErrorImageView.setVisibility(View.GONE);
+            } else {
+                LoadingLocally_LocalErrorImageView.setVisibility(View.VISIBLE);
+                loadingLocally_LocalErrorTextView.setText(msg);
+            }
+        }
+        MTTSManager.getInstance().speak(federatedPlatformsResponseBean.getData().getOpenVoiceMsg());
+        openDelay(ConfigManager.getAuthenticationBean().getData().get(0).getFailPageTime());
+    }
+
+    private void setLocalError_C() {
+        ImageLoaderUtils.loadImageColor(OutcomeActivity_bgImagee);
+        if (!StringIsNull.IsStringNull(ConfigManager.getAuthenticationBean().getData().get(0).getCompareTopTitle())) {
+            outcomeActivity_SilentDisplay_TextView.setText(ConfigManager.getAuthenticationBean().getData().get(0).getCompareTopTitle());
+        }
+        if (ConfigManager.getAuthenticationBean().getData().get(0).isManualInIdCard() && TaskStatus.taskStatus.equals(TaskStatus.TASK_STATUS_FACE)) {
+            if (ConfigManager.isFloatingPages()) {
+                outcomeActivity_LocalError_idNumber.setVisibility(View.VISIBLE);
+            } else {
+                outcomeActivity_SilentDisplayidNumber.setVisibility(View.VISIBLE);
+            }
+        } else {
+            if (ConfigManager.isFloatingPages()) {
+                outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+            } else {
+                outcomeActivity_SilentDisplayidNumber.setVisibility(View.GONE);
+            }
+        }
+
+    }
+
+    //多票选择
+    private void getPending(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.VISIBLE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+//            outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+        }
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        outcomeActivity_loadingLocally.setVisibility(View.VISIBLE);
+        loadingLocally_bottom_LinearLayout.setVisibility(View.VISIBLE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getBBackgroundUrl())) {
+            if (!ConfigManager.isFloatingPages()) {
+                ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getBBackgroundUrl(),OutcomeActivity_bgImagee);
+            }
+        } else {
+            if (!ConfigManager.isFloatingPages()) {
+                ImageLoaderUtils.loadImage(R.mipmap.background,OutcomeActivity_bgImagee);
+            }
+        }
+        if (ConfigManager.isFloatingPages()) {
+            loadingLocally_TopLinearLayout.setVisibility(View.VISIBLE);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+            ImageLoaderUtils.loadImage(R.mipmap.yellow_background_gradient,loadingLocally_TopLinearLayoutImage);
+            ImageLoaderUtils.loadImage(R.mipmap.mainactivity_abnormal,loadingLocally_Image);
+            if (federatedPlatformsResponseBean.getData().getBMainLine() != null &&
+                    !federatedPlatformsResponseBean.getData().getBMainLine().equals("")) {
+                loadingLocally_Text.setText(federatedPlatformsResponseBean.getData().getBMainLine());
+                switch (federatedPlatformsResponseBean.getData().getBMainIcon()) {
+                    case "1"://成功
+                        ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_aicon,loadingLocally_Image);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+                        break;
+                    case "3"://失败
+                        ImageLoaderUtils.loadImage(R.mipmap.red_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_erroe,loadingLocally_Image);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fEE4523));
+                        break;
+                    case "2"://警告
+                    default:
+                        ImageLoaderUtils.loadImage(R.mipmap.yellow_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_abnormal,loadingLocally_Image);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fFF9900));
+                        break;
+                }
+            }
+        } else {
+            Glide.with(CommonUtil.getCurrentActivity())
+                    .load(federatedPlatformsResponseBean.getData().getBMainIcon())
+                    .into(outcomeActivity_statusPending_Background);
+            if (federatedPlatformsResponseBean.getData().getBMainLine() != null &&
+                    !federatedPlatformsResponseBean.getData().getBMainLine().equals("")) {
+                outcomeActivity_statusPending_bMainLine.setText(federatedPlatformsResponseBean.getData().getBMainLine());
+            }
+        }
+        if (federatedPlatformsResponseBean.getData().getBSubLine() != null &&
+                !federatedPlatformsResponseBean.getData().getBSubLine().equals("")) {
+            outcomeActivity_statusPending_bSubLine.setText(federatedPlatformsResponseBean.getData().getBSubLine());
+        }
+
+        LinearLayoutManager manager = new LinearLayoutManager(CommonUtil.getCurrentActivity());
+        manager.setOrientation(LinearLayoutManager.VERTICAL);
+        outcomeActivity_statusPending_RecyclerView.setLayoutManager(manager);
+        if (federatedPlatformsResponseBean.getData().getBChoiseList() != null) {
+            //创建适配器, 单选页列表
+            statusPendingAdapter = new StatusPendingAdapter(federatedPlatformsResponseBean.getData().getBChoiseList(), CommonUtil.getCurrentActivity());
+            outcomeActivity_statusPending_RecyclerView.setAdapter(statusPendingAdapter);
+            statusPendingAdapter.setListener(new StatusPendingAdapter.OnItemClickListener() {
+                @Override
+                public void onItemClick(int position, String Value) {
+                    if (ConfigManager.isPreCheck()) {
+                        FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
+                        exInfoDTO.setPassRes("true");
+                        exInfoDTO.setSmileParams(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getSmileParams());
+                        exInfoDTO.setIdcardContent(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getIdcardContent());
+                        String value = Value;
+                        FederatedPlatformsRequestBean federatedPlatformsRequestBean = ConfigManager.getFederatedPlatformsRequestBean();
+                        federatedPlatformsRequestBean.getData().setValue(value);
+                        federatedPlatformsRequestBean.getData().setTaskId(federatedPlatformsResponseBean.getData().getTaskId());
+                        ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN, Constants.IDCARD_TYPE,
+                                federatedPlatformsRequestBean.getData().getIdNumber(),
+                                federatedPlatformsRequestBean.getData().getName(),
+                                federatedPlatformsRequestBean.getData().getPhone(),
+                                "check",
+                                federatedPlatformsResponseBean.getData().getTaskId(),
+                                value,
+                                federatedPlatformsResponseBean.getData().getPhoto()
+                                , exInfoDTO,
+                                federatedPlatformsResponseBean.getData().getQrcodeText(),
+                                federatedPlatformsRequestBean.getData().getIcNumber());
+                        //发送默认一比一通过的数据到预检查调度中心
+                        DataReturns.getInstance().doDataReturns(null, DataReturns.FACE_DATA_VIRTUAL);
+                        HttpRequest.getInstance().requestFederatedPlatformsCheck(true);
+                    } else {
+                        String value = federatedPlatformsResponseBean.getData().getBChoiseList().get(position).getValue();
+                        FederatedPlatformsRequestBean federatedPlatformsRequestBean = ConfigManager.getFederatedPlatformsRequestBean();
+                        federatedPlatformsRequestBean.getData().setValue(value);
+                        federatedPlatformsRequestBean.getData().setValue(value);
+                        federatedPlatformsRequestBean.getData().setTaskId(federatedPlatformsResponseBean.getData().getTaskId());
+                        HttpRequest.getInstance().requestFederatedPlatforms();
+                    }
+                    outcomeActivity_statusPending.setVisibility(View.GONE);
+                }
+            });
+        } else {
+            Toast.makeText(CommonUtil.getCurrentActivity(), "未获取到数据", Toast.LENGTH_SHORT).show();
+        }
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.VISIBLE);
+        //语音播报
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getOpenVoiceMsg())) {
+            MTTSManager.getInstance().speak(federatedPlatformsResponseBean.getData().getOpenVoiceMsg());
+        }
+    }
+
+    //PAGE_TYPE_PENDING_MULTIPLE
+    List<CChoiseListBean> cChoiseListBeans = new ArrayList<>();
+
+    private void getPendingMultiple(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.VISIBLE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+//            outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+        }
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        loadingLocally_bottom_LinearLayout.setVisibility(View.VISIBLE);
+        //隐藏页面
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_loadingLocally.setVisibility(View.VISIBLE);
+        if (!ConfigManager.isFloatingPages()) {
+            if (federatedPlatformsResponseBean.getData().getCBackgroundUrl() != null &&
+                    !federatedPlatformsResponseBean.getData().getCBackgroundUrl().equals("")) {
+                ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getCBackgroundUrl(),OutcomeActivity_bgImagee);
+
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.background,OutcomeActivity_bgImagee);
+            }
+        } else {
+            loadingLocally_TopLinearLayout.setVisibility(View.GONE);
+            loadingLocally_Image.setVisibility(View.GONE);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.GONE);
+            loadingLocally_Image.setVisibility(View.GONE);
+        }
+        LinearLayoutManager manager = new LinearLayoutManager(CommonUtil.getCurrentActivity());
+        manager.setOrientation(LinearLayoutManager.VERTICAL);
+        outcomeActivity_RecyclerView.setLayoutManager(manager);
+        //当日检票次数
+        int NumberOfTicketChecks = ConfigManager.getNumberOfTicketChecks();
+        if (federatedPlatformsResponseBean.getData().getIsOpen() == 0) {
+            NumberOfTicketChecks += 1;
+            SharedPreferencesUtils.setParam(CommonUtil.getCurrentActivity(), "openTimesNum", NumberOfTicketChecks);
+        }
+        if (isHideNavigationBar) {
+            loadingLocally_NumberOfTicketChecks.setText(String.valueOf(NumberOfTicketChecks));
+        }
+        //创建适配器
+        if (ConfigManager.isFloatingPages()) {
+            outcomeAdapter3 = new OutcomeAdapter3(cChoiseListBeans, CommonUtil.getCurrentActivity()
+                    , "");
+            outcomeActivity_RecyclerView.setAdapter(outcomeAdapter3);
+            outcomeAdapter3.setListener(new OutcomeAdapter3.OnItemClickListener() {
+                @Override
+                public void onItemClick(int position) {
+                    if (federatedPlatformsResponseBean.getData().getCButtonText() != null &&
+                            !federatedPlatformsResponseBean.getData().getCButtonSubText().equals("")) {
+                        String SubText = federatedPlatformsResponseBean.getData().getCButtonSubText();
+                        outcomeActivity_ConfirmWriteText2.setVisibility(View.VISIBLE);
+                        CheckSum = 0;
+                        for (int i = 0; i < cChoiseListBeans.size(); i++) {
+                            if (cChoiseListBeans.get(i).isSelected()) {
+                                CheckSum += 1;
+                            }
+                        }
+                        SubText = SubText.replace("$count", "" + CheckSum)
+                                .replace("0", "" + CheckSum);
+                        outcomeActivity_ConfirmWriteText2.setText("(" + SubText + ")");
+                        outcomeActivity_ConfirmWriteText2.setVisibility(View.VISIBLE);
+                    } else {
+                        outcomeActivity_ConfirmWriteText2.setVisibility(View.GONE);
+                    }
+                    outcomeAdapter3.notifyDataSetChanged();
+                }
+            });
+        } else {
+            outcomeAdapter = new OutcomeAdapter(cChoiseListBeans, CommonUtil.getCurrentActivity(), "");
+            outcomeActivity_RecyclerView.setAdapter(outcomeAdapter);
+            outcomeAdapter.setListener(new OutcomeAdapter.OnItemClickListener() {
+                @Override
+                public void onItemClick(int position) {
+                    if (federatedPlatformsResponseBean.getData().getCButtonText() != null &&
+                            !federatedPlatformsResponseBean.getData().getCButtonSubText().equals("")) {
+                        String SubText = federatedPlatformsResponseBean.getData().getCButtonSubText();
+                        outcomeActivity_ConfirmWriteText2.setVisibility(View.VISIBLE);
+                        CheckSum = 0;
+                        for (int i = 0; i < federatedPlatformsResponseBean.getData().getCChoiseList().size(); i++) {
+                            for (int j = 0; j < federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().size(); j++) {
+                                if (federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).isSelected()) {
+                                    CheckSum += 1;
+                                }
+                            }
+                        }
+                        SubText = SubText.replace("$count", "" + CheckSum)
+                                .replace("0", "" + CheckSum);
+                        outcomeActivity_ConfirmWriteText2.setText("(" + SubText + ")");
+                        outcomeActivity_ConfirmWriteText2.setVisibility(View.VISIBLE);
+                    } else {
+                        outcomeActivity_ConfirmWriteText2.setVisibility(View.GONE);
+                    }
+                    outcomeAdapter.notifyDataSetChanged();
+                }
+            });
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getCButtonText())) {
+            outcomeActivity_ConfirmWriteText1.setText(federatedPlatformsResponseBean.getData().getCButtonText());
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getCButtonSubText())) {
+            String SubText = federatedPlatformsResponseBean.getData().getCButtonSubText();
+            CheckSum = 0;
+            for (int i = 0; i < federatedPlatformsResponseBean.getData().getCChoiseList().size(); i++) {
+                for (int j = 0; j < federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().size(); j++) {
+                    if (federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).isSelected()) {
+                        CheckSum += 1;
+                        if (ConfigManager.CheckList.size() > 0) {
+                            CheckNumBean checkNumBean = new CheckNumBean();
+                            checkNumBean.setCheckNum(ConfigManager.CheckList.size() + 1);
+                            checkNumBean.setName(
+                                    federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getLabel());
+                            ConfigManager.CheckList.add(checkNumBean);
+                        } else {
+                            CheckNumBean checkNumBean = new CheckNumBean();
+                            checkNumBean.setCheckNum(1);
+                            checkNumBean.setName(
+                                    federatedPlatformsResponseBean.getData().getCChoiseList().get(i).getList().get(j).getLabel());
+                            ConfigManager.CheckList.add(checkNumBean);
+                        }
+                    }
+                }
+            }
+            if (!StringIsNull.IsStringNull(SubText)) {
+                SubText = SubText.replace("$count", "" + CheckSum)
+                        .replace("0", "" + CheckSum);
+                outcomeActivity_ConfirmWriteText2.setText("(" + SubText + ")");
+            }
+            outcomeActivity_ConfirmWriteText2.setVisibility(View.VISIBLE);
+        } else {
+            outcomeActivity_ConfirmWriteText2.setVisibility(View.GONE);
+        }
+        //下面代码是重点
+        outcomeActivity_RecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
+                new ViewTreeObserver.OnGlobalLayoutListener() {
+                    @Override
+                    public void onGlobalLayout() {
+                        int lastCompletelyVisibleItemPosition = manager.findLastCompletelyVisibleItemPosition();
+                        if (ConfigManager.isFloatingPages()) {
+                            boolean b = lastCompletelyVisibleItemPosition < outcomeAdapter3.getItemCount() - 1;
+                            if (b) {
+                                outcomeActivity_LoadMoreImage.setVisibility(View.VISIBLE);
+                                outcomeActivity_RecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                            } else {
+                                outcomeActivity_LoadMoreImage.setVisibility(View.GONE);
+                                outcomeActivity_RecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                            }
+                        } else {
+                            boolean b = lastCompletelyVisibleItemPosition < outcomeAdapter.getItemCount() - 1;
+                            if (b) {
+                                outcomeActivity_LoadMore.setVisibility(View.VISIBLE);
+                                outcomeActivity_RecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                            } else {
+                                outcomeActivity_LoadMore.setVisibility(View.GONE);
+                                outcomeActivity_RecyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+                            }
+                        }
+                    }
+                });
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        //显示多票选择
+        outcomeActivity_MultipleVotes.setVisibility(View.VISIBLE);
+        //语音播报
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getOpenVoiceMsg())) {
+            MTTSManager.getInstance().speak(federatedPlatformsResponseBean.getData().getOpenVoiceMsg());
+        }
+    }
+
+    private void setPassportIn(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_time_LinearLayout.setVisibility(View.VISIBLE);
+        outcomeActivity_time_LinearLayout2.setVisibility(View.GONE);
+        loadingLocally_TopLinearLayoutImage.setVisibility(View.GONE);
+        loadingLocally_Image.setBackgroundResource(R.mipmap.mainactivity_abnormal);
+        outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fFF9900));
+        outcomeActivity_LocalErrorImage.setVisibility(View.GONE);
+        outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+        outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+//        outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+        AppHandler.getHandler().removeCallbacks(PassportRunnable);
+        if (federatedPlatformsResponseBean.getData().getStatus().equals("PassportIn_B")) {
+            PassportIn = 4;
+        } else {
+            PassportIn = 6;
+        }
+        AppHandler.getHandler().post(PassportRunnable);
+    }
+
+    //大图UI结果页
+    private void getclosingMaxPicture(FederatedPlatformsResponseBean federatedPlatformsResponseBean, String ScenePhoto,
+                                      String IDPhoto , Bitmap bitmap) {
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.VISIBLE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+//            outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+        }
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        //设置图片圆角角度
+        RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(20));
+        if (ConfigManager.isFloatingPages()) {
+            if (!StringIsNull.IsStringNull(ScenePhoto)) {
+                ImageLoaderUtils.loadImage(ScenePhoto,outcomeActivity_OutcomeImageMAXPicture,options);
+            } else if (!StringIsNull.IsStringNull(IDPhoto)) {
+                ImageLoaderUtils.loadImage(IDPhoto,outcomeActivity_OutcomeImageMAXPicture,options);
+            } else if (bitmap != null) {
+                outcomeActivity_OutcomeImageMAXPicture.setImageBitmap(bitmap);
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.outcomeactivity_outcomeimagemax_picture,outcomeActivity_OutcomeImageMAXPicture);
+            }
+        } else {
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getAMainIcon())) {
+                ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getAMainIcon(),outcomeActivity_OutcomeImageMAXPicture,options);
+            }
+        }
+        loadingLocally_bottom_LinearLayout.setVisibility(View.VISIBLE);
+        //当日检票次数
+        int NumberOfTicketChecks = ConfigManager.getNumberOfTicketChecks();
+        if (federatedPlatformsResponseBean.getData().getIsOpen() == 0) {
+            NumberOfTicketChecks += 1;
+            SharedPreferencesUtils.setParam(CommonUtil.getCurrentActivity(), "openTimesNum", NumberOfTicketChecks);
+        }
+        if (isHideNavigationBar) {
+            loadingLocally_NumberOfTicketChecks.setText(String.valueOf(NumberOfTicketChecks));
+        }
+        //显示结果页面
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.VISIBLE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        //数据语音播报
+        voiceSpeakCompatible(federatedPlatformsResponseBean);
+        if (ConfigManager.isFloatingPages()) {
+            loadingLocally_TopLinearLayout.setVisibility(View.VISIBLE);
+            loadingLocally_Image.setVisibility(View.VISIBLE);
+            ImageLoaderUtils.loadImage(R.mipmap.mainactivity_aicon,loadingLocally_Image);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+            ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+            if (federatedPlatformsResponseBean.getData().getAMainIcon().indexOf("http") != -1) {
+                URL url = null;
+                try {
+                    url = new URL(federatedPlatformsResponseBean.getData().getAMainIcon());
+                    requestImg(url, IMAGE_TYPE_CLOSING_FLOATING_PAGES);
+                } catch (MalformedURLException e) {
+                    e.printStackTrace();
+                }
+            } else {
+                if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getAMainLine())) {
+                    loadingLocally_Text.setText(federatedPlatformsResponseBean.getData().getAMainLine()); //检票状态
+                    loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+                }
+                switch (federatedPlatformsResponseBean.getData().getAMainIcon()) {
+                    case "2"://警告
+                        ImageLoaderUtils.loadImage(R.mipmap.yellow_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_abnormal,loadingLocally_Image);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fFF9900));
+                        break;
+                    case "3"://失败
+                        ImageLoaderUtils.loadImage(R.mipmap.red_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_erroe,loadingLocally_Image);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fEE4523));
+                        break;
+                    case "1"://成功
+                    default:
+                        ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_aicon,loadingLocally_Image);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+                        break;
+                }
+            }
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+        } else {
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getAMainLine())) {
+                outcomeActivity_OutcomeTextView.setText(federatedPlatformsResponseBean.getData().getAMainLine()); //检票状态
+            }
+        }
+        //姓名
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getASubLineFirst())) {
+            outcomeActivity_OutcomeNameMAXPicture.setVisibility(View.VISIBLE);
+            outcomeActivity_OutcomeNameMAXPicture.setText(federatedPlatformsResponseBean.getData().getASubLineFirst());
+        } else {
+            outcomeActivity_OutcomeNameMAXPicture.setVisibility(View.GONE);
+        }
+        //身份证号
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getASubLineSecond())) {
+            outcomeActivity_OutcomeSecondMAXPicture.setVisibility(View.VISIBLE);
+            outcomeActivity_OutcomeSecondMAXPicture.setText(
+                    StringUtils.idCard(federatedPlatformsResponseBean.getData().getASubLineSecond())
+            );
+        } else {
+            outcomeActivity_OutcomeSecondMAXPicture.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineOneLabel())) {
+            outcomeActivity_OneLabelMAXPicture.setVisibility(View.VISIBLE);
+            outcomeActivity_OneLabelMAXPicture.setText(federatedPlatformsResponseBean.getData().getALineOneLabel());
+        } else {
+            outcomeActivity_OneLabelMAXPicture.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineOneValue())) {
+            outcomeActivity_OneVauleMAXPicture.setVisibility(View.VISIBLE);
+            outcomeActivity_OneVauleMAXPicture.setText(federatedPlatformsResponseBean.getData().getALineOneValue());
+        } else {
+            outcomeActivity_OneVauleMAXPicture.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineTwoLabel())) {
+            outcomeActivity_eTwoLabelMAXPicture.setVisibility(View.VISIBLE);
+            outcomeActivity_eTwoLabelMAXPicture.setText(federatedPlatformsResponseBean.getData().getALineTwoLabel());
+        } else {
+            outcomeActivity_eTwoLabelMAXPicture.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineTwoValue())) {
+            outcomeActivity_TwoValueMAXPicture.setVisibility(View.VISIBLE);
+            outcomeActivity_TwoValueMAXPicture.setText(federatedPlatformsResponseBean.getData().getALineTwoValue());
+        } else {
+            outcomeActivity_TwoValueMAXPicture.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineThrLabel())) {
+            loadingLocally_ThrLabelMAXPicture.setVisibility(View.VISIBLE);
+            loadingLocally_ThrLabelMAXPicture.setText(federatedPlatformsResponseBean.getData().getALineThrLabel());
+        } else {
+            loadingLocally_ThrLabelMAXPicture.setVisibility(View.GONE);
+        }
+
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineThrValue())) {
+            loadingLocally_ThrValueMAXPicture.setVisibility(View.VISIBLE);
+            ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getALineThrValue(),loadingLocally_ThrValueMAXPicture,options);
+        } else {
+            loadingLocally_ThrValueMAXPicture.setVisibility(View.GONE);
+        }
+        //设置页面背景
+        if (!ConfigManager.isFloatingPages()) {
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getABackgroundUrl())) {
+                ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getABackgroundUrl(),OutcomeActivity_bgImagee);
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.background,OutcomeActivity_bgImagee);
+            }
+        }
+        if (federatedPlatformsResponseBean.getData().getEnd()) {
+            openDelay(ConfigManager.getAuthenticationBean().getData().get(0).getSuccessPageTime());
+        }
+    }
+
+    //通用结果页(微信风)
+    private void getGeneralOutcome(FederatedPlatformsResponseBean federatedPlatformsResponseBean,
+                                   String ScenePhoto, String IDPhoto, Bitmap bitmap) {
+        AppLogUtils.i(true, "addIsvResultView() ", "执行微信风通用结果页     ");
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        loadingLocally_bottom_LinearLayout.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.VISIBLE);
+        //背景页设置
+        if (!ConfigManager.isFloatingPages()) {
+            outcomeActivity_LinearLayout.setBackgroundResource(0);
+            OutcomeActivity_bgImagee.setImageResource(0);
+            if (StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getTitleColor())) {
+                federatedPlatformsResponseBean.getData().setTitleColor("#429AFE");
+            }
+            outcomeActivity_LinearLayout.setBackgroundColor(Color.parseColor(federatedPlatformsResponseBean.getData().getBackgroundColor()));
+        }
+        //title文字
+        generalOutCome_TitleText.setText(federatedPlatformsResponseBean.getData().getTitle());
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getTitleColor())) {
+            generalOutCome_TitleText.setTextColor(Color.parseColor(federatedPlatformsResponseBean.getData().getTitleColor()));
+        }
+        //黄色框中图片
+        Glide.with(CommonUtil.getCurrentActivity())
+                .load(federatedPlatformsResponseBean.getData().getVaccineIconUrl())
+                .into(generalOutCome_vaccinelconUrl);
+        //黄色框中文字
+        if (StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getVaccineNumColor())) {
+            federatedPlatformsResponseBean.getData().setVaccineNumColor("#2B6EF5");
+        }
+        generalOutCome_openMsg.setTextColor(Color.parseColor(federatedPlatformsResponseBean.getData().getVaccineNumColor()));
+        generalOutCome_openMsg.setText(federatedPlatformsResponseBean.getData().getOpenMsg());
+        //语音播报
+        voiceSpeakCompatible(federatedPlatformsResponseBean);
+        //用户头像(显示头像类别为 - 身份证返回,商户平台返回头像时展示)
+        //有现场照片优先现场照片,没有用证件照,都没有用默认灰色圆图
+        RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(25));
+        if (!StringIsNull.IsStringNull(ScenePhoto)) {
+            ImageLoaderUtils.loadImage(ScenePhoto,outcomeActivity_LocalErrorImage,options);
+        } else if (!StringIsNull.IsStringNull(IDPhoto)) {
+            ImageLoaderUtils.loadImage(IDPhoto,outcomeActivity_LocalErrorImage,options);
+        } else if (bitmap != null) {
+            outcomeActivity_LocalErrorImage.setImageBitmap(bitmap);
+        } else {
+            generalOutCome_iconUrl.setImageResource(R.mipmap.outcomeactivity_bottomimage);
+        }
+        if (federatedPlatformsResponseBean.getData().getNuclein() != null) {
+            //用户名与身份证号颜色
+            String UserColor = federatedPlatformsResponseBean.getData().getNuclein().get(0).getContentColor();
+            if (StringIsNull.IsStringNull(UserColor)) {
+                UserColor = "#4E5C74";
+            }
+            //用户名
+            generalOutCome_showUsername.setTextColor(Color.parseColor(UserColor));
+            generalOutCome_showUsername.setText(federatedPlatformsResponseBean.getData().getShowUsername());
+            //用户身份证号
+            generalOutCome_showNumber.setTextColor(Color.parseColor(UserColor));
+            generalOutCome_showNumber.setText(federatedPlatformsResponseBean.getData().getShowIdNumber());
+            //左边框
+            generalOutCome_nucleid_title.setText(federatedPlatformsResponseBean.getData().getNuclein().get(0).getTitle());
+            generalOutCome_nucleid_content.setText(federatedPlatformsResponseBean.getData().getNuclein().get(0).getContent());
+        }
+        //右边框
+        generalOutCome_vaccineIcoTitle.setText(federatedPlatformsResponseBean.getData().getVaccineIcoTitle());
+        generalOutCome_vaccineNum.setText(federatedPlatformsResponseBean.getData().getVaccineNum());
+        //二维码
+        if (federatedPlatformsResponseBean.getData().isShowQrcode()) {
+            String qrCode = federatedPlatformsResponseBean.getData().getQrcodeText();
+            int Width = generalOutCome_qrCodeText.getWidth();
+            generalOutCome_qrCodeText.setImageBitmap(GenerateQRCodeUtil.createQRCodeBitmap(qrCode, ConfigManager.dp2px(Width, CommonUtil.getCurrentActivity())));
+            generalOutCome_qrCodeText.setVisibility(View.VISIBLE);
+        } else {
+            generalOutCome_qrCodeText.setVisibility(View.GONE);
+        }
+        //广告图片
+        Glide.with(CommonUtil.getCurrentActivity())
+                .load(federatedPlatformsResponseBean.getData().getAdvertise())
+                .into(generalOutCome_advertise);
+    }
+
+    private void ShowPadding(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        if (!ConfigManager.isFloatingPages()) {
+            if (federatedPlatformsResponseBean.getData().getDBackgroundUrl() != null &&
+                    !federatedPlatformsResponseBean.getData().getDBackgroundUrl().equals("")) {
+                ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getDBackgroundUrl(),OutcomeActivity_bgImagee);
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.background,OutcomeActivity_bgImagee);
+            }
+        }
+        if (isHideNavigationBar) {
+            loadingLocally_NumberOfVisitors.setText(openTimes + "/" + passableOpenTimes);
+        }
+        //加载中
+        if (federatedPlatformsResponseBean.getData().getDMainLine() != null &&
+                !federatedPlatformsResponseBean.getData().getDMainLine().equals("")) {
+            loadingLocally_loadingTextView.setText(federatedPlatformsResponseBean.getData().getDMainLine());
+        } else {
+            loadingLocally_loadingTextView.setText("处理中……");
+        }
+    }
+
+    private void getLocalOutcome(FederatedPlatformsResponseBean federatedPlatformsResponseBean,String ScenePhoto, String IDPhoto, Bitmap bitmap) {
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.VISIBLE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+//            outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+            outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+            loadingLocally_TopLinearLayout.setVisibility(View.VISIBLE);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+        }
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        String name = federatedPlatformsResponseBean.getData().getName();
+        String idCard = federatedPlatformsResponseBean.getData().getCertNo();
+        String phone = federatedPlatformsResponseBean.getData().getMobile();
+        //姓名脱敏
+        if (!StringUtils.isEmpty(name) && StringUtils.isString(ConfigManager.getAuthenticationBean().getData()
+                .get(0).getSucText(), "姓名")) {
+            name = StringUtils.getString(name);
+            name = StringUtils.chineseName(name);
+        }
+        //身份证脱敏
+        if (!StringUtils.isEmpty(idCard) && StringUtils.isString(ConfigManager.getAuthenticationBean().getData()
+                .get(0).getSucText(), "身份证号")) {
+            idCard = StringUtils.getString(idCard);
+            idCard = StringUtils.getDesensitization(idCard);
+        }
+        //手机号脱敏
+        if (!StringUtils.isEmpty(phone) && StringUtils.isString(ConfigManager.getAuthenticationBean().getData()
+                .get(0).getSucText(), "手机号")) {
+            phone = StringUtils.getString(phone);
+            phone = StringUtils.mobilePhone(phone);
+        }
+        String SucText = StringUtils.getSucText(ConfigManager.getAuthenticationBean().getData().get(0).getSucText());
+        if (SucText.equals("")) {
+            SucText = "请通行";
+        }
+        if (StringIsNull.IsStringNull(name)) {
+            name = "";
+        }
+        if (StringIsNull.IsStringNull(idCard)) {
+            idCard = "";
+        }
+        if (StringIsNull.IsStringNull(phone)) {
+            phone = "";
+        }
+        if (!phone.contains("*")) {
+            phone = StringUtils.defaultDesensitization(phone);
+        }
+        if (!idCard.contains("*")) {
+            idCard = StringUtils.defaultDesensitization(idCard);
+        }
+        if (!name.contains("*")) {
+            name = StringUtils.defaultDesensitization(name);
+        }
+        SucText = SucText.replace("|", "\n")
+                .replace("手机号", phone)
+                .replace("身份证号", idCard)
+                .replace("姓名", name);
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        //当日检票次数
+        int numberOfTicketChecks = ConfigManager.getNumberOfTicketChecks();
+        if (federatedPlatformsResponseBean.getData().getIsOpen() == 0) {
+            numberOfTicketChecks += 1;
+            SharedPreferencesUtils.setParam(MyAppliction.getContext(), "openTimesNum", numberOfTicketChecks);
+        }
+        if (isHideNavigationBar) {
+            loadingLocally_NumberOfTicketChecks.setText(String.valueOf(numberOfTicketChecks));
+        }
+        if (ConfigManager.isFloatingPages()) {
+//            outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+            RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(10));
+            if (!StringIsNull.IsStringNull(ScenePhoto)) {
+                ImageLoaderUtils.loadImage(ScenePhoto,outcomeActivity_OutcomeImage,options);
+            } else if (!StringIsNull.IsStringNull(IDPhoto)) {
+                ImageLoaderUtils.loadImage(IDPhoto,outcomeActivity_OutcomeImage,options);
+            }else if (bitmap != null) {
+                outcomeActivity_OutcomeImage.setImageBitmap(bitmap);
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.outcomeactivity_outcomeimagemax_picture,outcomeActivity_OutcomeImage);
+            }
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineThrValue())) {
+                ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getALineThrValue(),loadingLocally_ThrValue,options);
+            }
+            ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+            ImageLoaderUtils.loadImage(R.mipmap.mainactivity_aicon,loadingLocally_Image);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+            if (!StringIsNull.IsStringNull(name)) {
+                outcomeActivity_OutcomeName.setVisibility(View.VISIBLE);
+                outcomeActivity_OutcomeName.setText(name);
+            } else {
+                outcomeActivity_OutcomeName.setVisibility(View.GONE);
+            }
+            if (!StringIsNull.IsStringNull(idCard)) {
+                outcomeActivity_OutcomeSecond.setVisibility(View.VISIBLE);
+                outcomeActivity_OutcomeSecond.setText(idCard);
+            } else {
+                outcomeActivity_OutcomeSecond.setVisibility(View.GONE);
+            }
+            if (!StringIsNull.IsStringNull(phone)) {
+                OutcomeActivity_Phone.setVisibility(View.VISIBLE);
+                OutcomeActivity_Phone.setText(phone);
+            } else {
+                OutcomeActivity_Phone.setVisibility(View.GONE);
+            }
+            //隐藏本地加载的gif图
+            outcomeActivity_loadingLocally.setVisibility(View.GONE);
+            //显示结果页面
+            outcomeActivity_Outcome.setVisibility(View.VISIBLE);
+            outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+            outcomeActivity_statusPending.setVisibility(View.GONE);
+
+            loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+            loadingLocally_Text.setText(SucText);
+        } else {
+            RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(30));
+            ImageLoaderUtils.loadImage(R.mipmap.mainactivity_aicon,outcomeActivity_OutcomeImage,options);
+            outcomeActivity_OutcomeTextView.setText(SucText);
+        }
+        MTTSManager.getInstance().speak(ConfigManager.getAuthenticationBean().getData().get(0).getSucVoice());
+        openDelay(ConfigManager.getAuthenticationBean().getData().get(0).getSuccessPageTime());
+    }
+
+    //输入证件号
+    private void setEnterIDNumber() {
+        outcomeActivity_time_LinearLayout.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+//            outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+        }
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        outcomeActivity_loadingLocally.setVisibility(View.VISIBLE);
+        outcomeActivity_time_LinearLayout2.setVisibility(View.VISIBLE);
+    }
+
+    private void getLoading(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+//            outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+        }
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        outcomeActivity_loadingLocally.setVisibility(View.VISIBLE);
+        loadingLocally_bottom_LinearLayout.setVisibility(View.VISIBLE);
+        //隐藏页面
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        loadingLocally_bottom_time.setText(DateUtil.getNowDateTime());//获取时间
+        //过渡页不为空的时候,加载过渡页背景。
+        if (!ConfigManager.isFloatingPages()) {
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getDBackgroundUrl())) {
+                ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getDBackgroundUrl(),OutcomeActivity_bgImagee);
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.background,OutcomeActivity_bgImagee);
+            }
+        } else {
+            loadingLocally_TopLinearLayout.setVisibility(View.GONE);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.GONE);
+        }
+        if (isHideNavigationBar) {
+            loadingLocally_NumberOfVisitors.setText(openTimes + "/" + passableOpenTimes);
+        }
+
+        //加载中
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getDMainLine())) {
+            loadingLocally_loadingTextView.setText(federatedPlatformsResponseBean.getData().getDMainLine());
+        } else {
+            loadingLocally_loadingTextView.setText("处理中……");
+        }
+        //语音播报
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getOpenVoiceMsg())) {
+            MTTSManager.getInstance().speak(federatedPlatformsResponseBean.getData().getOpenVoiceMsg());
+        }
+    }
+
+    private void getPersonCardHintPage(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+//        if (ConfigManager.getAuthenticationBean().getData().get(0).isManualInIdCard()) {
+//            if (ConfigManager.isFloatingPages()) {
+//                outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+//            } else {
+//                outcomeActivity_SilentDisplayidNumber.setVisibility(View.GONE);
+//            }
+//        } else {
+//            if (ConfigManager.isFloatingPages()) {
+//                outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+//            } else {
+//                outcomeActivity_SilentDisplayidNumber.setVisibility(View.GONE);
+//            }
+//        }
+        //手输证件号按钮
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalError_idNumber.setVisibility(View.GONE);
+        } else {
+            outcomeActivity_SilentDisplayidNumber.setVisibility(View.GONE);
+        }
+        if (ConfigManager.isFloatingPages()) {
+//            outcomeActivity_LocalError_idNumberLinear2.setVisibility(View.GONE);
+            outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+        } else {
+            outcomeActivity_LinearLayoutOutcome.setVisibility(View.GONE);
+            outcomeActivity_loadingB.setVisibility(View.VISIBLE);
+        }
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        loadingLocally_bottom_LinearLayout.setVisibility(View.GONE);
+        //隐藏页面
+        generalOutCome_Background.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        loadingLocally_bottom_time.setText(DateUtil.getNowDateTime());//获取时间
+
+        if (!ConfigManager.isFloatingPages()) {
+            outcomeActivity_LinearLayout.setBackgroundColor(Color.parseColor("#00000000"));
+        } else {
+            loadingLocally_TopLinearLayout.setVisibility(View.GONE);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.GONE);
+        }
+        loadingLocally_titleRelativeLayout.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            loadingLocally_TopLinearLayout.setVisibility(View.VISIBLE);
+            loadingLocally_Image.setVisibility(View.GONE);
+            loadingLocally_TopLinearLayoutImage.setVisibility(View.VISIBLE);
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+            ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+            loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+            loadingLocally_Text.setText(federatedPlatformsResponseBean.getMsg());
+        } else {
+            outcomeActivity_OutcomeTextView.setText(federatedPlatformsResponseBean.getMsg());
+        }
+        ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+        loadingLocally_Text.setText(federatedPlatformsResponseBean.getMsg());
+
+        //语音播报
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getOpenVoiceMsg())) {
+            MTTSManager.getInstance().speak(federatedPlatformsResponseBean.getData().getOpenVoiceMsg());
+        }
+    }
+
+    Bitmap mIconBitmap;
+
+    //涉及到网络请求
+    private void requestImg(final URL imgUrl, String type) {
+        try {
+            ThreadPoolManager.getInstance().submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        HttpURLConnection connection = (HttpURLConnection) imgUrl.openConnection();
+                        connection.setDoInput(true);
+                        connection.connect();
+                        InputStream input = connection.getInputStream();
+                        mIconBitmap = BitmapFactory.decodeStream(input);
+                        if (mIconBitmap != null) {
+                            showImg(mIconBitmap, type);
+                        }
+                    } catch (IOException e) {
+                        AppLogUtils.e(true, TAG, "结果页图片显示异常  " + e.toString());
+                        e.printStackTrace();
+                    }
+                }
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private void showImg(final Bitmap bitmap, String type) {
+        AppHandler.getHandler().post(new Runnable() {
+            @Override
+            public void run() {
+                switch (type) {
+                    case IMAGE_TYPE_CLOSING:
+                        if (outcomeActivity_OutcomeImage != null) {
+                            outcomeActivity_OutcomeImage.setImageBitmap(bitmap);
+                        }
+                        break;
+                    case IMAGE_TYPE_CLOSING_FLOATING_PAGES:
+                        if (loadingLocally_Image != null) {
+                            loadingLocally_Image.setImageBitmap(bitmap);
+                        }
+                        break;
+                    case IMAGE_TYPE_SCAN_FACE_FAILED_PAGE:
+                        if (OutcomeActivity_bgImagee != null){
+                            OutcomeActivity_bgImagee.setImageBitmap(bitmap);
+                        }
+                        break;
+                }
+            }
+        });
+    }
+
+    Runnable postDelayedRunnable = new Runnable() {
+        @Override
+        public void run() {
+            if (ConfigManager.isPreCheck()) {
+                AppLogUtils.e(false, "end==fales", " end==fales  进行核验接口请求 ");
+                FederatedPlatformsRequestBean.ExtInfoDTO exInfoDTO = new FederatedPlatformsRequestBean.ExtInfoDTO();
+                if (ConfigManager.getFederatedPlatformsRequestBean().getData() != null &&
+                        ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo() != null) {
+                    exInfoDTO.setPassRes(StringIsNull.ReturnString(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getPassRes()));
+                    exInfoDTO.setSmileParams(StringIsNull.ReturnString(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getSmileParams()));
+                    exInfoDTO.setIdcardContent(StringIsNull.ReturnString(ConfigManager.getFederatedPlatformsRequestBean().getData().getExInfo().getIdcardContent()));
+                }
+                FederatedPlatformsResponseBean federatedPlatformsResponseBean = ConfigManager.getFederatedPlatformsResponseBean();
+                if (federatedPlatformsResponseBean != null && federatedPlatformsResponseBean.getData() != null) {
+                    String taskId = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getTaskId());
+                    String idNumber = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getIdNumber());
+                    String name = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getName());
+                    String phone = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getPhone());
+                    String photo = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getPhoto());
+                    String qrCode = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getQrcodeText());
+                    String icNumber = StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getIcNumber());
+                    ConfigManager.setFederatedPlatformsRequestBean(ConfigManager.SN, Constants.IDCARD_TYPE,
+                            idNumber, name, phone, "check", taskId, "", photo, exInfoDTO, qrCode, icNumber);
+                }
+                AppHandler.getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启预检查:end=false,继续请求核验接口,人证比对默认成功,通知调度中心处理");
+                        DataReturns.getInstance().clearData();
+                        DataReturns.getInstance().doDataReturns(null, DataReturns.FACE_DATA_VIRTUAL);
+                        HttpRequest.getInstance().requestFederatedPlatformsCheck(true);
+                    }
+                });
+
+            } else {
+                FederatedPlatformsResponseBean federatedPlatformsResponseBean = ConfigManager.getFederatedPlatformsResponseBean();
+                FederatedPlatformsRequestBean federatedPlatformsRequestBean = ConfigManager.getFederatedPlatformsRequestBean();
+                federatedPlatformsResponseBean.getData().setTaskId(
+                        StringIsNull.ReturnString(federatedPlatformsResponseBean.getData().getTaskId())
+                );
+                federatedPlatformsRequestBean.getData().setTaskId(
+                        federatedPlatformsResponseBean.getData().getTaskId());
+                HttpRequest.getInstance().requestFederatedPlatforms();
+            }
+        }
+    };
+//    Runnable isEndRunnable = new Runnable() {
+//        @Override
+//        public void run() {
+//            AppLogUtils.i(true, " 悬浮窗- addIsvResultView() -isEndHandler ", "悬浮窗延时,到时后执行销毁     ");
+//            resumeClickButton();
+//            //移除悬浮view
+//            removeTouchView(ConfigManager.getFederatedPlatformsResponseBean());
+//        }
+//    };
+
+
+    //IsEnd
+    private void setIsEnd(FederatedPlatformsResponseBean federatedPlatformsBeans) {
+        int PageTime = 0;
+        switch (federatedPlatformsBeans.getData().getStatus()) {
+            case PAGE_TYPE_CLOSING:
+            case PAGE_TYPE_LOCAL_LOCALERROR:
+            case PAGE_TYPE_LOCAL_OUTCOME:
+            case PAGE_TYPE_LOCAL_LOCALERROR_B:
+            case PAGE_TYPE_CLOSING_MAX_PICTURE:
+            case PAGE_TYPE_CLOSING_PENDING_MULTIPLE:
+                if (federatedPlatformsBeans.getData().getEnd()) {
+                    federatedPlatformsBeans.getData().setTaskId("");
+                    if (federatedPlatformsBeans.getData().getIsOpen() == 0) {
+                        if (ConfigManager.getAuthenticationBean().getData().get(0).isShowDisplayTimeByOpenTimesSwitch()) {
+                            PageTime = ConfigManager.getAuthenticationBean().getData().get(0).getOnceOpenDoorTime() > 0 ?
+                                    ConfigManager.getAuthenticationBean().getData().get(0).getOnceOpenDoorTime() : 2;
+                            //开门时长
+                            if (federatedPlatformsBeans.getData().getOpenTimes() > 0) {
+                                PageTime = PageTime * federatedPlatformsBeans.getData().getOpenTimes();
+                            }
+                        } else {
+                            PageTime = ConfigManager.getAuthenticationBean().getData().get(0).getSuccessPageTime() > 0 ?
+                                    ConfigManager.getAuthenticationBean().getData().get(0).getSuccessPageTime() : 2;
+                        }
+
+                    } else {
+                        PageTime = 5;
+                        if (ConfigManager.getAuthenticationBean() != null && ConfigManager.getAuthenticationBean().getData() != null) {
+                            PageTime = ConfigManager.getAuthenticationBean().getData().get(0).getFailPageTime() > 0 ?
+                                    ConfigManager.getAuthenticationBean().getData().get(0).getFailPageTime() : 5;
+                        }
+                    }
+                } else {
+                    PageTime = 15;
+                    if (federatedPlatformsBeans.getData().getDelay() >= 4000) {
+                        federatedPlatformsBeans.getData().setDelay(4000);
+                    }
+                    AppHandler.getHandler().removeCallbacks(postDelayedRunnable);
+                    AppHandler.getHandler().postDelayed(postDelayedRunnable,
+                            federatedPlatformsBeans.getData().getDelay());
+                }
+                TimeData = PageTime;
+                break;
+            case PAGE_TYPE_PENDING:
+                PageTime = 120;
+                if (ConfigManager.getAuthenticationBean().getData().get(0).getSinglePageTime() > 0) {
+                    PageTime = ConfigManager.getAuthenticationBean().getData().get(0).getSinglePageTime();
+                }
+                TimeData = PageTime;
+                break;
+            case PAGE_TYPE_PENDING_MULTIPLE:
+                PageTime = 120;
+                if (ConfigManager.getAuthenticationBean().getData().get(0).getMultiPageTime() > 0) {
+                    PageTime = ConfigManager.getAuthenticationBean().getData().get(0).getMultiPageTime();
+                }
+                TimeData = PageTime;
+                break;
+            case PAGE_TYPE_LOADING:
+                PageTime = 120;
+                if (federatedPlatformsBeans.getData().getShowTimeDur() > 0) {
+                    PageTime = federatedPlatformsBeans.getData().getShowTimeDur();
+                } else if (ConfigManager.getAuthenticationBean().getData().get(0).getWaitPageTime() > 0) {
+                    PageTime = ConfigManager.getAuthenticationBean().getData().get(0).getWaitPageTime();
+                }
+                TimeData = PageTime;
+                //延时再次请求核验接口
+                setPostDelayed(federatedPlatformsBeans);
+                break;
+            case PAGE_TYPE_PERSON_CARD_HINT:
+            case PAGE_TYPE_LOADING_C:
+                PageTime = 120;
+                if (ConfigManager.getAuthenticationBean().getData().get(0).getOneToOneTimeout() > 0) {
+                    PageTime = ConfigManager.getAuthenticationBean().getData().get(0).getOneToOneTimeout();
+                }
+                TimeData = PageTime;
+                break;
+            case PAGE_TYPE_LOADING_LOCAL_TRANSITION://本地过渡页
+                TimeData = 10;
+                PageTime = 10;
+                break;
+            case PAGE_TYPE_ENTERIDNUMBER://键盘
+                TimeData = 30;
+                PageTime = 30;
+                break;
+            case PAGE_TYPE_LOCAL_LOCALERROR_C:
+                TimeData = ConfigManager.getAuthenticationBean().getData().get(0).getCompareSilentDisplayTime();
+                PageTime = ConfigManager.getAuthenticationBean().getData().get(0).getCompareSilentDisplayTime();
+                break;
+            case PAGE_TYPE_PASSPORTIN:
+            case PAGE_TYPE_PASSPORTIN_B:
+                TimeData = 6;
+                PageTime = 6;
+                break;
+            default://条件都不满足时执行
+                AppLogUtils.w(true, "addIsvResultView() 悬浮框页面条件不满足", "     " + federatedPlatformsBeans.getData().getStatus());
+                break;
+        }
+        if (federatedPlatformsBeans.getData().getShowTimeDur() > 0) {
+            PageTime = federatedPlatformsBeans.getData().getShowTimeDur();
+            TimeData = PageTime;
+        }
+        setHandler(PageTime);
+    }
+
+    private void setPostDelayed(FederatedPlatformsResponseBean federatedPlatformsBeans) {
+        if (!federatedPlatformsBeans.getData().getEnd()) {
+            if (federatedPlatformsBeans.getData().getDelay() >= 4000) {
+                federatedPlatformsBeans.getData().setDelay(4000);
+            }
+            AppHandler.getHandler().removeCallbacks(postDelayedRunnable);
+            AppHandler.getHandler().postDelayed(postDelayedRunnable,
+                    federatedPlatformsBeans.getData().getDelay());
+        }
+    }
+
+    //Closing
+    private void getClosing(FederatedPlatformsResponseBean federatedPlatformsResponseBean, String ScenePhoto, String IDPhoto, Bitmap bitmap) {
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        outcomeActivity_Outcome.setVisibility(View.VISIBLE);
+        outcomeActivity_OutcomeMAXPicture.setVisibility(View.GONE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        outcomeActivity_LocalError.setVisibility(View.GONE);
+        generalOutCome_Background.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            outcomeActivity_LocalError_idNumberLinear.setVisibility(View.GONE);
+            outcomeActivity_PAGE_TYPE_CLOSING_PENDING_MULTIPLE.setVisibility(View.GONE);
+            RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(10));
+            if (!StringIsNull.IsStringNull(ScenePhoto)) {
+                ImageLoaderUtils.loadImage(ScenePhoto,outcomeActivity_OutcomeImage,options);
+            } else if (!StringIsNull.IsStringNull(IDPhoto)) {
+                ImageLoaderUtils.loadImage(IDPhoto,outcomeActivity_OutcomeImage,options);
+            } else if (bitmap != null) {
+                outcomeActivity_OutcomeImage.setImageBitmap(bitmap);
+            } else {
+                outcomeActivity_OutcomeImage.setBackgroundResource(R.mipmap.outcomeactivity_outcomeimagemax_picture);
+            }
+        } else {
+            URL url = null;
+            try {
+                url = new URL(federatedPlatformsResponseBean.getData().getAMainIcon());
+                requestImg(url, IMAGE_TYPE_CLOSING);
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+            }
+        }
+        //当日检票次数
+        int numberOfTicketChecks = ConfigManager.getNumberOfTicketChecks();
+        if (federatedPlatformsResponseBean.getData().getIsOpen() == 0) {
+            numberOfTicketChecks += 1;
+            SharedPreferencesUtils.setParam(CommonUtil.getCurrentActivity(), "openTimesNum", numberOfTicketChecks);
+        }
+        if (isHideNavigationBar) {
+            loadingLocally_NumberOfTicketChecks.setText(String.valueOf(numberOfTicketChecks));
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineThrValue())) {
+            RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(10));
+            ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getALineThrValue(),loadingLocally_ThrValue,options);
+        }
+        //隐藏本地加载的gif图
+        outcomeActivity_loadingLocally.setVisibility(View.GONE);
+        //显示结果页面
+        outcomeActivity_Outcome.setVisibility(View.VISIBLE);
+        outcomeActivity_MultipleVotes.setVisibility(View.GONE);
+        outcomeActivity_statusPending.setVisibility(View.GONE);
+        //数据语音播报
+        voiceSpeakCompatible(federatedPlatformsResponseBean);
+        if (ConfigManager.isFloatingPages()) {
+            loadingLocally_TopLinearLayout.setVisibility(View.VISIBLE);
+            loadingLocally_Image.setVisibility(View.VISIBLE);
+            if (federatedPlatformsResponseBean.getData().getAMainIcon().indexOf("http") != -1) {
+                URL url = null;
+                try {
+                    url = new URL(federatedPlatformsResponseBean.getData().getAMainIcon());
+                    requestImg(url, IMAGE_TYPE_CLOSING_FLOATING_PAGES);
+                } catch (MalformedURLException e) {
+                    e.printStackTrace();
+                }
+            } else {
+                switch (federatedPlatformsResponseBean.getData().getAMainIcon()) {
+                    case "2"://警告
+                        ImageLoaderUtils.loadImage(R.mipmap.yellow_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_abnormal,loadingLocally_Image);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fFF9900));
+                        break;
+                    case "3"://失败
+                        ImageLoaderUtils.loadImage(R.mipmap.red_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_erroe,loadingLocally_Image);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.fEE4523));
+                        break;
+                    case "1"://成功
+                    default:
+                        ImageLoaderUtils.loadImage(R.mipmap.mainactivity_aicon,loadingLocally_Image);
+                        ImageLoaderUtils.loadImage(R.mipmap.blue_background_gradient,loadingLocally_TopLinearLayoutImage);
+                        loadingLocally_Text.setTextColor(CommonUtil.getCurrentActivity().getResources().getColor(R.color.f0054FF));
+                        break;
+                }
+            }
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getAMainLine())) {
+                loadingLocally_Text.setText(federatedPlatformsResponseBean.getData().getAMainLine()); //检票状态
+            }
+
+            loadingLocally_TopLinearLayoutImageRelativeLayout.setVisibility(View.VISIBLE);
+        } else {
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getAMainLine())) {
+                outcomeActivity_OutcomeTextView.setText(federatedPlatformsResponseBean.getData().getAMainLine()); //检票状态
+            }
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getASubLineFirst())) {
+            outcomeActivity_OutcomeName.setVisibility(View.VISIBLE);
+            outcomeActivity_OutcomeName.setText(federatedPlatformsResponseBean.getData().getASubLineFirst());//姓名
+        } else {
+            outcomeActivity_OutcomeName.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getASubLineSecond())) {
+            outcomeActivity_OutcomeSecond.setVisibility(View.VISIBLE);
+            outcomeActivity_OutcomeSecond.setText(
+                    federatedPlatformsResponseBean.getData().getASubLineSecond()
+            );//身份证
+        } else {
+            outcomeActivity_OutcomeSecond.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineOneLabel())) {
+            outcomeActivity_OneLabel.setVisibility(View.VISIBLE);
+            outcomeActivity_OneLabel.setText(federatedPlatformsResponseBean.getData().getALineOneLabel());
+        } else {
+            outcomeActivity_OneLabel.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineOneValue())) {
+            outcomeActivity_OneVaule.setVisibility(View.VISIBLE);
+            outcomeActivity_OneVaule.setText(federatedPlatformsResponseBean.getData().getALineOneValue());
+        } else {
+            outcomeActivity_OneVaule.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineTwoLabel())) {
+            outcomeActivity_eTwoLabel.setVisibility(View.VISIBLE);
+            outcomeActivity_eTwoLabel.setText(federatedPlatformsResponseBean.getData().getALineTwoLabel());
+        } else {
+            outcomeActivity_eTwoLabel.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineTwoValue())) {
+            outcomeActivity_TwoValue.setVisibility(View.VISIBLE);
+            outcomeActivity_TwoValue.setText(federatedPlatformsResponseBean.getData().getALineTwoValue());
+        } else {
+            outcomeActivity_TwoValue.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineThrLabel())) {
+            loadingLocally_ThrLabel.setVisibility(View.VISIBLE);
+            loadingLocally_ThrLabel.setText(federatedPlatformsResponseBean.getData().getALineThrLabel());
+        } else {
+            loadingLocally_ThrLabel.setVisibility(View.GONE);
+        }
+        if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getALineThrValue())) {
+            loadingLocally_ThrValue.setVisibility(View.VISIBLE);
+            RequestOptions options = new RequestOptions().bitmapTransform(new RoundedCorners(10));
+            ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getALineThrValue(),loadingLocally_ThrValue,options);
+        } else {
+            loadingLocally_ThrValue.setVisibility(View.GONE);
+        }
+        //设置页面背景
+        if (!ConfigManager.isFloatingPages()) {
+            if (!StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getABackgroundUrl())) {
+                ImageLoaderUtils.loadImage(federatedPlatformsResponseBean.getData().getABackgroundUrl(),OutcomeActivity_bgImagee);
+            } else {
+                ImageLoaderUtils.loadImage(R.mipmap.background,OutcomeActivity_bgImagee);
+            }
+        }
+        if (federatedPlatformsResponseBean.getData().getEnd()) {
+            openDelay(ConfigManager.getAuthenticationBean().getData().get(0).getSuccessPageTime());
+        }
+    }
+
+    int PassportIn = 6;
+    Runnable PassportRunnable = new Runnable() {
+        @Override
+        public void run() {
+            if (PassportIn > 0) {
+                PassportIn--;
+                String content = "";
+                content = CommonUtil.getCurrentActivity().getResources().getString(R.string.PassportIn_zh, PassportIn);
+                content = content + ")……";
+                loadingLocally_Text.setText(content);
+                loadingLocally_Text.setTextSize(ConfigManager.getTextSize(loadingLocally_Text, loadingLocally_Text.getWidth(),
+                        loadingLocally_Text.getText().toString(), true));
+                AppHandler.getHandler().postDelayed(this, 1000);
+            }
+
+        }
+    };
+
+    /**
+     * 移除悬浮框
+     * 结果页销毁
+     */
+    public void removeTouchView(FederatedPlatformsResponseBean federatedPlatformsResponseBean) {
+        mView.setVisibility(View.GONE);
+        OutcomeActivity_bgImagee.setBackgroundResource(R.color.f000000);
+        AppHandler.getHandler().removeCallbacks(openDelayRunnable);
+        AppHandler.getHandler().removeCallbacks(TimeRunnable);
+        AppHandler.getHandler().removeCallbacks(PassportRunnable);
+        SharedPreferencesUtils.setParam(CommonUtil.getCurrentActivity(), "TimeDetail", "0");
+        AppLogUtils.i(true, "结果页销毁 ", "removeTouchView(), 结果页销毁并执行 invokeResume");
+        resetState();
+        if (federatedPlatformsResponseBean != null && federatedPlatformsResponseBean.getData() != null &&
+                !StringIsNull.IsStringNull(federatedPlatformsResponseBean.getData().getStatus()) &&
+                (!federatedPlatformsResponseBean.getData().getStatus().equals(PAGE_TYPE_CLOSING) ||
+                        !federatedPlatformsResponseBean.getData().getStatus().equals(PAGE_TYPE_CLOSING_MAX_PICTURE) ||
+                        !federatedPlatformsResponseBean.getData().getStatus().equals(PAGE_TYPE_CLOSING_PENDING_MULTIPLE) ||
+                        !federatedPlatformsResponseBean.getData().getStatus().equals(PAGE_TYPE_LOCAL_OUTCOME) ||
+                        !federatedPlatformsResponseBean.getData().getStatus().equals(PAGE_TYPE_LOCAL_LOCALERROR) ||
+                        !federatedPlatformsResponseBean.getData().getStatus().equals(PAGE_TYPE_LOCAL_LOCALERROR_B))
+        ) {
+            // 中间页面倒计时结束或者点击中间页面右上角关闭按钮的时候中间页销毁,同时恢复任务态,
+            // 如果中间页继续走到最终结果页,则中间页不会执行removeTouchView,而是复用View,此时恢复任务态的操作在最终结果页展示时才进行
+            TaskStatus.setInitState();
+        }
+        // 这里不能清数据,因为上一个人的结果页销毁时下一个人的数据可能已经读取到内存中了,而上一个人的数据在结果页展示的同时就已经清除掉了,因此这里不需要再清除
+        // DataReturns.getInstance().clearData();
+
+        //SmileController.getInstance().invokeResume(ConfigManager.mSessionId);
+        BaiduFaceController.getInstance().invokeResume();
+
+        try {
+            if (federatedPlatformsResponseBean != null &&
+                    federatedPlatformsResponseBean.getData() != null &&
+                    federatedPlatformsResponseBean.getData().getEnd().equals("true")) {
+                federatedPlatformsResponseBean = null;
+            }
+        } catch (Exception e) {
+            federatedPlatformsResponseBean = null;
+            e.printStackTrace();
+        }
+//        try {
+//            if (outcomeActivity_OutcomeImage != null) {
+//                outcomeActivity_OutcomeImage.setImageResource(0);
+//                outcomeActivity_LinearLayout.removeView(outcomeActivity_OutcomeImage);
+//                outcomeActivity_OutcomeImage = null;
+//            }
+//            if (loadingLocally_ThrValue != null) {
+//                loadingLocally_ThrValue.setImageResource(0);
+//                outcomeActivity_LinearLayout.removeView(loadingLocally_ThrValue);
+//                loadingLocally_ThrValue = null;
+//            }
+//            if (outcomeActivity_OutcomeImageMAXPicture != null) {
+//                outcomeActivity_OutcomeImageMAXPicture.setImageResource(0);
+//                outcomeActivity_LinearLayout.removeView(outcomeActivity_OutcomeImageMAXPicture);
+//                outcomeActivity_OutcomeImageMAXPicture = null;
+//            }
+//            if (loadingLocally_ThrValueMAXPicture != null) {
+//                loadingLocally_ThrValueMAXPicture.setImageResource(0);
+//                outcomeActivity_LinearLayout.removeView(loadingLocally_ThrValueMAXPicture);
+//                loadingLocally_ThrValueMAXPicture = null;
+//            }
+//
+//            if (outcomeActivity_LocalErrorImage != null){
+//                outcomeActivity_LocalErrorImage.setImageResource(0);
+//                outcomeActivity_LinearLayout.removeView(outcomeActivity_LocalErrorImage);
+//                outcomeActivity_LocalErrorImage = null;
+//            }
+//
+//            if (outcomeActivity_LinearLayout !=null){
+//                outcomeActivity_LinearLayout.setBackgroundResource(0);
+//            }
+//            if (OutcomeActivity_bgImagee != null){
+//                OutcomeActivity_bgImagee.setImageResource(0);
+//            }
+//            if ((mIconBitmap != null) && (!mIconBitmap.isRecycled())) {
+//                mIconBitmap.recycle();
+//                mIconBitmap = null;
+//            }
+//            if (outcomeActivity_edit != null) {
+//                outcomeActivity_edit.setmIKeyboardView(null);
+//                outcomeActivity_edit.setHint(null);
+//                outcomeActivity_edit.removeTextChangedListener(null);
+//                outcomeActivity_edit = null;
+//
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+
+        if (federatedPlatformsResponseBean != null && federatedPlatformsResponseBean.getData() != null
+                && federatedPlatformsResponseBean.getData().getStatus().equals(PAGE_TYPE_LOADING_C)) {
+            federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
+            FederatedPlatformsResponseBean.DataDTO dataDTO = new FederatedPlatformsResponseBean.DataDTO();
+            dataDTO.setEnd(true);
+            dataDTO.setStatus(PAGE_TYPE_LOADING);
+            dataDTO.setIsOpen(-1);
+            federatedPlatformsResponseBean.setData(dataDTO);
+            federatedPlatformsResponseBean.setMsg("查询超时");
+            getPlatformsCod(federatedPlatformsResponseBean);
+        }
+    }
+
+    /**
+     * 新的刷证数据上来时销毁上一个人的结果页
+     * <p>
+     * removeResultView()的代码逻辑与removeTouchView()方法略有区别
+     */
+    public void removeResultView() {
+        AppHandler.getHandler().removeCallbacks(openDelayRunnable);
+        AppHandler.getHandler().removeCallbacks(TimeRunnable);
+        AppHandler.getHandler().removeCallbacks(PassportRunnable);
+    }
+
+    public void resumeClickButton() {
+        AppHandler.getHandler().post(new Runnable() {
+            public void run() {
+                ClickButtonFloatView.getInstance().removeClickButtonFloatView();
+                if (ConfigManager.getAuthenticationBean().getData().get(0).isManualInIdCard() ||
+                        ConfigManager.getAuthenticationBean().getData().get(0).getFaceMode().equals("click")) {
+                    ClickButtonFloatView.getInstance().showClickButton();
+                }
+            }
+        });
+    }
+
+    //恢复所有状态节点
+    private void resetState() {
+        PassportController.getInstance().isPassportIn = false;
+        //判断是否为键盘
+        if (!StringIsNull.IsStringNull(BusinessType) && BusinessType.equals(PAGE_TYPE_ENTERIDNUMBER)) {
+            BusinessType = "";
+        }
+    }
+
+
+    /**
+     * 发送结果页至少显示时长的延时器Runnable
+     *
+     * @param pageTime 设置的结果页展示时间
+     */
+    private void openDelay(int pageTime) {
+        pageTime = pageTime * 1000;
+        int openDelayTime = ConfigManager.getAuthenticationBean().getData().get(0).getOpenDelayTime();
+        if (openDelayTime >= pageTime) {
+            openDelayTime = pageTime - 500;//openDelayTime必须要<结果页的展示时间,如果配置出错,减去500ms进行纠错
+        }
+        if (openDelayTime < 0) {
+            openDelayTime = 0;
+        }
+        AppHandler.getHandler().removeCallbacks(openDelayRunnable);
+        AppHandler.getHandler().postDelayed(openDelayRunnable, openDelayTime);
+    }
+
+    Runnable openDelayRunnable = new Runnable() {
+        @Override
+        public void run() {
+            //将UserInformationBean的数据清空
+            UserInfoManager.getInstance().setUserInformationBeanNull();
+            //任务状态恢复为初始态,此时才可以继续处理下一个人的刷证/刷码/刷脸的数据
+            TaskStatus.setInitState();
+
+            PassportController.getInstance().isShowResultView = true;
+            if (ConfigManager.getAuthenticationBean().getData().get(0).isOpenPassport()) {
+                PassportController.getInstance().passportStart();
+                ConfigManager.delete(PassportController.getInstance().strHeadImagePath);
+                ConfigManager.delete(PassportController.getInstance().strHeadImagePathEC);
+                ConfigManager.delete(PassportController.getInstance().strSIDHeadPathName);
+            }
+        }
+    };
+
+    public void setListener(BaiDuFaceViewListener listener) {
+        this.listener = listener;
+    }
+
+    public interface BaiDuFaceViewListener {
+        void BaiDuFaceViewListener();
+    }
+
+
+    /**
+     * 接口请求后,两秒无返回则创建延时器,展示加载中的loading页
+     */
+    Runnable requestingRunnable = new Runnable() {
+        @Override
+        public void run() {
+            FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getLoadingOutcome("加载中……", "loading", "");
+            getPlatformsCod(federatedPlatformsResponseBean);
+        }
+    };
+
+    /**
+     * 接口请求后,两秒无返回则展示加载中的loading页
+     */
+    public void setRequestingRunnable() {
+        AppHandler.getHandler().removeCallbacks(requestingRunnable);
+        AppHandler.getHandler().postDelayed(requestingRunnable, 2 * 1000);
+    }
+
+    public void removeRequestingRunnable() {
+        AppHandler.getHandler().removeCallbacks(requestingRunnable);
+    }
+
+    /**
+     * 展示本地成功结果页
+     */
+    public void setShowLocalOutcome() {
+        FederatedPlatformsResponseBean federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
+        FederatedPlatformsResponseBean.DataDTO dataDTO = new FederatedPlatformsResponseBean.DataDTO();
+        dataDTO.setEnd(true);
+        dataDTO.setStatus("LocalOutcome");
+        dataDTO.setShowPageType("scenic");
+        dataDTO.setName(UserInfoManager.getInstance().getUserInformationBean().getName());
+        dataDTO.setCertNo(UserInfoManager.getInstance().getUserInformationBean().getIdNumber());
+        dataDTO.setMobile(UserInfoManager.getInstance().getUserInformationBean().getMobile());
+        if (ConfigManager.isFloatingPages()) {
+            dataDTO.setAMainIcon("1");
+        } else {
+            dataDTO.setAMainIcon(MyAppliction.getContext().getResources().getString(R.string.url_Image_succeed));
+        }
+        dataDTO.setIdNumber(UserInfoManager.getInstance().getUserInformationBean().getIdNumber());
+        dataDTO.setASubLineFirst(UserInfoManager.getInstance().getUserInformationBean().getName());
+        dataDTO.setASubLineSecond(UserInfoManager.getInstance().getUserInformationBean().getIdNumber());
+        dataDTO.setIsOpen(0);
+        dataDTO.setOpenTimes(1);
+        dataDTO.setAMainLine(ConfigManager.getAuthenticationBean().getData().get(0).getSucText());
+        dataDTO.setUseSerialPort(ConfigManager.getAuthenticationBean().getData().get(0).getUseSerialPort());
+        dataDTO.setSignalNo(ConfigManager.getAuthenticationBean().getData().get(0).getSignalNo());
+        federatedPlatformsResponseBean.setData(dataDTO);
+        federatedPlatformsResponseBean.setMsg(ConfigManager.getAuthenticationBean().getData().get(0).getSucText());
+        getPlatformsCod(federatedPlatformsResponseBean);
+    }
+
+    /**
+     * 设置本地结果页的bean
+     */
+    public FederatedPlatformsResponseBean setShowLocalOutcomeBean(){
+        FederatedPlatformsResponseBean federatedPlatformsResponseBean = new FederatedPlatformsResponseBean();
+        FederatedPlatformsResponseBean.DataDTO dataDTO = new FederatedPlatformsResponseBean.DataDTO();
+        dataDTO.setEnd(true);
+        dataDTO.setStatus("LocalOutcome");
+        dataDTO.setShowPageType("scenic");
+        dataDTO.setName(UserInfoManager.getInstance().getUserInformationBean().getName());
+        dataDTO.setCertNo(UserInfoManager.getInstance().getUserInformationBean().getIdNumber());
+        dataDTO.setMobile(UserInfoManager.getInstance().getUserInformationBean().getMobile());
+        if (ConfigManager.isFloatingPages()) {
+            dataDTO.setAMainIcon("1");
+        } else {
+            dataDTO.setAMainIcon(MyAppliction.getContext().getResources().getString(R.string.url_Image_succeed));
+        }
+        dataDTO.setIdNumber(UserInfoManager.getInstance().getUserInformationBean().getIdNumber());
+        dataDTO.setASubLineFirst(UserInfoManager.getInstance().getUserInformationBean().getName());
+        dataDTO.setASubLineSecond(UserInfoManager.getInstance().getUserInformationBean().getIdNumber());
+        dataDTO.setIsOpen(0);
+        dataDTO.setOpenTimes(1);
+        dataDTO.setAMainLine(ConfigManager.getAuthenticationBean().getData().get(0).getSucText());
+        dataDTO.setUseSerialPort(ConfigManager.getAuthenticationBean().getData().get(0).getUseSerialPort());
+        dataDTO.setSignalNo(ConfigManager.getAuthenticationBean().getData().get(0).getSignalNo());
+        federatedPlatformsResponseBean.setData(dataDTO);
+        federatedPlatformsResponseBean.setMsg(ConfigManager.getAuthenticationBean().getData().get(0).getSucText());
+        return federatedPlatformsResponseBean;
+    }
+    /**
+     * 将view设置为null
+     */
+    public void setViewNull(){
+        mView = null;
+    }
+
+}

+ 1 - 1
app/src/main/java/com/hanghui/senic/activity/view/ClickButtonFloatView.java

@@ -126,7 +126,7 @@ public class ClickButtonFloatView {
                 dataDTO.setIsOpen(-1);
                 federatedPlatformsResponseBean.setData(dataDTO);
                 federatedPlatformsResponseBean.setMsg("");
-                ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             }
         });
         //点击开始刷脸核验

+ 4 - 2
app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceConstant.java

@@ -8,6 +8,7 @@ public class BaiduFaceConstant {
     public static final String OP_ISSUE_INCREMENT = "ISSUE_INCREMENT";
     public static final String OP_FACE_DELETED = "FACE_DELETED";
     public static final String OP_FACE_DELETED_ALL = "FACE_DELETED_ALL";
+    public static final String OP_ISSUE_CANCEL ="ISSUE_CANCEL"; //下发取消
 
     public static final String OP_ISSUE_DEVICE_FETCH = "ISSUE_DEVICE_FETCH"; //设备人员数据拉取
     public static final String OP_ISSUE_DEVICE_USER_REPORT= "ISSUE_DEVICE_USER_REPORT"; //设备人员信息上报
@@ -22,9 +23,10 @@ public class BaiduFaceConstant {
     public static final String OP_FACE_DELETED_ALL_CALLBACK = "FACE_DELETED_ALL_CALLBACK";
 
 
-    //STATUS, processing:进行中,  interruption:中断,  success:成功,  failed:失败
+
+    //STATUS, processing:进行中,  interruption:取消,  success:成功,  failed:失败
     public static final String STATUS_processing = "processing";
-    public static final String STATUS_interruption = "interruption";
+    public static final String STATUS_cancel = "cancel";
     public static final String STATUS_success= "success";
     public static final String STATUS_failed = "failed";
 

+ 2 - 1
app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceController.java

@@ -1,6 +1,7 @@
 package com.hanghui.senic.baiduface;
 
 
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.bean.FederatedPlatformsResponseBean;
 import com.hanghui.senic.common.DataManager;
@@ -66,7 +67,7 @@ public class BaiduFaceController extends BaseController {
                     ConfigManager.getAuthenticationBean().getData().get(0).getOneToOneTips(),
                     ResultViewManager.PAGE_TYPE_PERSON_CARD_HINT,
                     ConfigManager.getAuthenticationBean().getData().get(0).getOneToOneVoice());
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
         }
 
 

+ 17 - 28
app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceMainActivity.java

@@ -136,16 +136,9 @@ public class BaiduFaceMainActivity extends BaseActivity {
                 case Constants.Code_HttpResponseCallback_HomeBackgroundImage://主页背景图片
                     if (!StringIsNull.IsStringNull(ConfigManager.getAuthenticationBean().getData().get(0).getHomePageUrl())) {
                         //首页背景替换
-                        Glide.with(BaiduFaceMainActivity.this)
-                                .asBitmap()
-                                .load(ConfigManager.getAuthenticationBean().getData().get(0).getHomePageUrl())
-                                .into(new SimpleTarget<Bitmap>() {
-                                    @Override
-                                    public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
-                                        Drawable drawable = new BitmapDrawable(resource);
-                                        mainActivity_rootLayout.setBackground(drawable);
-                                    }
-                                });
+                        ImageLoaderUtils.loadImage(ConfigManager.getAuthenticationBean().getData().get(0).getHomePageUrl()
+                        ,findViewById(R.id.iv_bg_image));
+
                     }
                     break;
                 case Constants.Code_HttpResponseCallback_HideBottomTextView://检测到设备已到期隐藏底部文字
@@ -173,9 +166,9 @@ public class BaiduFaceMainActivity extends BaseActivity {
         @Override
         public void updateView(int code, String msg) {
             if (code == Constants.Code_hardware_icon_qrCode_succeed){
-                hardwareIcon_QRCode.setImageResource(R.mipmap.hardware_icon_qrcode_succeed);
+                ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_qrcode_succeed,hardwareIcon_QRCode);
             }else {
-                hardwareIcon_QRCode.setImageResource(R.mipmap.hardware_icon_qrcode_fail);
+                ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_qrcode_fail,hardwareIcon_QRCode);
             }
         }
     };
@@ -205,16 +198,16 @@ public class BaiduFaceMainActivity extends BaseActivity {
         public void updateView(int code, String msg) {
             switch (code){
                 case Constants.Code_USBroadcastCallback_IDCardSucceed://身份证USB连接成功
-                    hardwareIcon_IDCard.setImageResource(R.mipmap.hardware_icon_idcard_succeed);
+                    ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_idcard_succeed,hardwareIcon_IDCard);
                     break;
                 case Constants.Code_USBroadcastCallback_IDCardFail://身份证USB连接断开
-                    hardwareIcon_IDCard.setImageResource(R.mipmap.hardware_icon_idcard_fail);
+                    ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_idcard_fail,hardwareIcon_IDCard);
                     break;
                 case Constants.Code_USBroadcastCallback_QRCodeSucceed://二维码USB连接成功
-                    hardwareIcon_QRCode.setImageResource(R.mipmap.hardware_icon_qrcode_succeed);
+                    ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_qrcode_succeed,hardwareIcon_QRCode);
                     break;
                 case Constants.Code_USBroadcastCallback_QRCodeFail://二维码USB连接断开
-                    hardwareIcon_QRCode.setImageResource(R.mipmap.hardware_icon_qrcode_fail);
+                    ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_qrcode_fail,hardwareIcon_QRCode);
                     break;
                 case Constants.Code_USBroadcastCallback_DXAllInOneIDCardSucceed://东信多合一USB连接成功
                     for (int i = 0; i < runnableList.size(); i++) {
@@ -224,24 +217,24 @@ public class BaiduFaceMainActivity extends BaseActivity {
                         }
                     }
                     if (ConfigManager.getAuthenticationBeanListBean().isUseIdcard() && ConfigManager.getAuthenticationBeanListBean().getIdCardReaderBrand() == 9){
-                        hardwareIcon_IDCard.setImageResource(R.mipmap.hardware_icon_idcard_succeed);
+                        ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_idcard_succeed,hardwareIcon_IDCard);
                     }
                     if (ConfigManager.getAuthenticationBeanListBean().isUseQrcode() && ConfigManager.getAuthenticationBeanListBean().getQrCodeReaderBrand() == 6){
-                        hardwareIcon_QRCode.setImageResource(R.mipmap.hardware_icon_qrcode_succeed);
+                        ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_qrcode_succeed,hardwareIcon_QRCode);
                     }
                     if (ConfigManager.isOpenICCard()){
-                        hardwareIcon_IcCard.setImageResource(R.mipmap.hardware_icon_iccard_succeed);
+                        ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_iccard_succeed,hardwareIcon_IcCard);
                     }
                     break;
                 case Constants.Code_USBroadcastCallback_DXAllInOneIDCardFail://东信多合一USB连接断开
                     if (ConfigManager.getAuthenticationBeanListBean().isUseIdcard() && ConfigManager.getAuthenticationBeanListBean().getIdCardReaderBrand() == 9){
-                        hardwareIcon_IDCard.setImageResource(R.mipmap.hardware_icon_idcard_fail);
+                        ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_idcard_fail,hardwareIcon_IDCard);
                     }
                     if (ConfigManager.getAuthenticationBeanListBean().isUseQrcode() && ConfigManager.getAuthenticationBeanListBean().getQrCodeReaderBrand() == 6){
-                        hardwareIcon_QRCode.setImageResource(R.mipmap.hardware_icon_qrcode_fail);
+                        ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_qrcode_fail,hardwareIcon_QRCode);
                     }
                     if (ConfigManager.isOpenICCard()){
-                        hardwareIcon_IcCard.setImageResource(R.mipmap.hardware_icon_iccard_fail);
+                        ImageLoaderUtils.loadImage(R.mipmap.hardware_icon_iccard_fail,hardwareIcon_IcCard);
                     }
                     for (int i = 0; i < runnableList.size(); i++) {
                         AppHandler.getHandler().removeCallbacks(runnableList.get(i));
@@ -293,7 +286,6 @@ public class BaiduFaceMainActivity extends BaseActivity {
                             }
                         }, DeviceInitManager.getInstance().getAlreadyInitHardwareNum() * 2000L);
                     }
-
                     //顶部图标显示
                     switch (code){
                         case Constants.Code_hardware_icon_idCard_succeed:
@@ -365,8 +357,7 @@ public class BaiduFaceMainActivity extends BaseActivity {
         BroadcastManager.getInstance().registerNetworkChangeReceiver(netNetworkCallback);
         BroadcastManager.getInstance().registerUSBroadcastReceiver(usBroadcastCallback);
         PosManager.getInstance().init();
-        //门磁信号注册
-        GpioUtile.getInstance().init();
+        MyAppliction.setAppHeartbeatTime(0L);
         //启动应用状态定时上报服务
         RegularReportingService.start(this);
         //ping百度,判断网络连接是否正常
@@ -568,7 +559,7 @@ public class BaiduFaceMainActivity extends BaseActivity {
             });
         }
         tv_version.setText("版本:v" + ConfigManager.getVersionName(this));
-        tv_sn.setText("SN-27:" + ConfigManager.getDeviceSN());
+        tv_sn.setText("SN:" + ConfigManager.getDeviceSN());
         appStatusTextView.setVisibility(View.VISIBLE);
 
     }
@@ -605,8 +596,6 @@ public class BaiduFaceMainActivity extends BaseActivity {
         IDCardControllerManager.destroy();
 
         PosManager.getInstance().destroy();
-        //关门门磁信号
-        GpioUtile.getInstance().unlistenGpioState();
         //关闭二维码
         QRCodeController.getInstance().destroy();
         //关闭串口

+ 142 - 58
app/src/main/java/com/hanghui/senic/baiduface/BaiduFacePreviewActivity.java

@@ -8,7 +8,10 @@ import android.os.Looper;
 import android.os.Message;
 import android.util.Log;
 import android.view.TextureView;
+import android.view.View;
 import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 
 import androidx.annotation.NonNull;
 
@@ -31,8 +34,10 @@ import com.example.datalibrary.model.User;
 import com.example.datalibrary.utils.BitmapUtils;
 import com.example.datalibrary.utils.FaceOnDrawTexturViewUtil;
 import com.example.datalibrary.utils.ToastUtils;
+import com.google.gson.Gson;
 import com.hanghui.senic.MyAppliction;
 import com.hanghui.senic.R;
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ClickButtonFloatView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.baiduface.view.BaiduPreviewTexture;
@@ -89,7 +94,7 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
     private BDFaceImageConfig bdFaceImageConfig;
 
     //人脸检测的配置参数, 识别阈值等
-    private BDFaceCheckConfig bdFaceCheckConfig;
+    private volatile BDFaceCheckConfig bdFaceCheckConfig;
     //活体检测的配置参数
     private BDLiveConfig bdLiveConfig;
 
@@ -104,11 +109,11 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
     private int MODE_SCANFACE = 3;//纯刷脸
     private int MODE_PERSONCARD = 4;//人证比对
 
-
+    private volatile boolean initBaiduFaceAuthState =true; //百度激活授权成功
     /**
      * 是否需要处理刷脸数据,刷脸成功后,在结果页展示期间是不需要处理刷脸数据的
      */
-    private boolean isNeedVerify = true;
+    private volatile boolean isNeedVerify = true;
 
     private LivenessModel mCurLivenessModel = null;//最新刷到的人脸数据
 
@@ -124,6 +129,9 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
 
     private final int WHAT_HIDE_LEDLIGHT=0x22; //关闭补光灯事件
     private boolean  lastOpenLedLightState=false; //是否已经打开补光灯
+    //结果页视图
+    private FrameLayout baiDuView_FloatingResultPageFrame;
+    private FrameLayout baiDuView_GeneralResultPageFrame;
 
     private Handler mHandler=new Handler(Looper.getMainLooper()){
         @Override
@@ -167,38 +175,70 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
     @Override
     public void setOnCreate() {
         EventBus.getDefault().register(this);
+        initBaiduFaceAuthState = false;
         // 双目摄像头IR 图像预览
         irPreviewView = findViewById(R.id.ir_camera_preview_view);
         if (SingleBaseConfig.getBaseConfig().getMirrorVideoNIR() == 1) {
             irPreviewView.setRotationY(180);
         }
         mPreview = new BaiduPreviewTexture(this, irPreviewView);
+        BaiduFaceUtil.stopBaiduFaceWebsocketService();
         AppLogUtils.i(true, TAG, "BaiduFaceActivity, onCreate()");
         super.setOnCreate();
     }
 
+
     @Override
     public void onPause() {
         super.onPause();
-        AppLogUtils.i(true, TAG, "BaiduFaceActivity, onPause()");
+        Log.i(TAG, "BaiduFaceActivity, onPause()");
+
+
+
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        if(initBaiduFaceAuthState) {
+            stopCameraPreview();
+            startCameraPreview();
+        }
+        Log.i(TAG, "BaiduFaceActivity, onStart()");
+    }
 
+    @Override
+    protected void onStop() {
+        super.onStop();
+        if(mHandler!=null) {
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    stopCameraPreview();
+                }
+            });
+        }
+        Log.i(TAG, "BaiduFaceActivity, onStop()");
     }
 
     @Override
     public void onResume() {
         super.onResume();
-        AppLogUtils.i(true, TAG, "BaiduFaceActivity, onResume()");
+
+        Log.i(TAG, "BaiduFaceActivity, onResume()");
 
     }
 
 
     public void OnDestoryListener() {
         super.OnDestoryListener();
-            EventBus.getDefault().unregister(this);
+        EventBus.getDefault().unregister(this);
         AppLogUtils.i(true, TAG, "BaiduFaceActivity, onDestroy()");
         AppHandler.getHandler().removeCallbacks(mPersonCardTimeoutRunnable);
+        BaiDuFaceView.getInstance().setViewNull();
         removeBaiduFaceControllerCallback();
-        stopCameraPreview();
+        BaiduFaceUtil.stopBaiduFaceWebsocketService();
+        initBaiduFaceAuthState=false;
     }
 
     @Override
@@ -213,6 +253,7 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
      */
     @Override
     public void doAfterLicenseSuccess() {
+
         initBaiduFaceControllerCallback();
 
         initListener(); // 初始化模型
@@ -222,12 +263,14 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
         initViews();
         initFaceCheck();
 
+        stopCameraPreview();
         startCameraPreview();
 
         BaiduFaceUtil.startBaiduFaceWebsocketService();
 
         queryAllUsers();
-
+        //todo 必須放在最底下,onResume会启动预览,这个时候如果初始设置未初始化完成,后面会报空指针
+        initBaiduFaceAuthState=true;
     }
 
     private void initBaiduFaceControllerCallback() {
@@ -309,6 +352,23 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
                 SingleBaseConfig.getBaseConfig().getRgbVideoDirection(),
                 PREFER_WIDTH, PERFER_HEIGH);
 
+        //设置结果页视图
+        baiDuView_FloatingResultPageFrame = findViewById(R.id.baiDuView_FloatingResultPageFrame);
+        baiDuView_GeneralResultPageFrame = findViewById(R.id.baiDuView_GeneralResultPageFrame);
+        showResultPage();
+
+    }
+
+    private void showResultPage() {
+        baiDuView_FloatingResultPageFrame.setVisibility(View.GONE);
+        baiDuView_GeneralResultPageFrame.setVisibility(View.GONE);
+        if (ConfigManager.isFloatingPages()) {
+            //结果页初始化
+            BaiDuFaceView.getInstance().ResultView(baiDuView_FloatingResultPageFrame,null);
+        } else {
+            //结果页初始化
+            BaiDuFaceView.getInstance().ResultView(baiDuView_GeneralResultPageFrame,null);
+        }
     }
 
 
@@ -355,6 +415,10 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
             if (mCameraNum < 2) {
                 return;
             }
+            int type=SingleBaseConfig.getBaseConfig().getType();
+            if (type != 2 || type != 4){ // RGB+NIR活体:2   RGB+NIR+Depth活体:4
+                return;
+            }
             if (SingleBaseConfig.getBaseConfig().getRBGCameraId() != -1) {
                 mCamera = Camera.open(Math.abs(SingleBaseConfig.getBaseConfig().getRBGCameraId() - 1));
             } else {
@@ -376,10 +440,15 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
             irPreviewView.setLayoutParams(layoutParams);
             mPreview.setCamera(mCamera, PREFER_WIDTH, PERFER_HEIGH);
             initNirFaceConfig(PERFER_HEIGH, PREFER_WIDTH);
-            mCamera.setPreviewCallback(new Camera.PreviewCallback() {
+            byte[] buffer=new byte[460800];
+            mCamera.addCallbackBuffer(buffer);
+            mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
                 @Override
                 public void onPreviewFrame(byte[] data, Camera camera) {
-                    dealIr(data);
+                    if(camera!=null) {
+                        camera.addCallbackBuffer(data);
+                        dealIr(data);
+                    }
                 }
             });
         } catch (Exception e) {
@@ -389,17 +458,22 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
     }
 
     private void dealRgb(byte[] data) {
-      //  Log.i("______456","rgb数据"+data.length);
+        //  Log.i("______456","rgb数据"+data.length);
+
         glMantleSurfacView.setFrame();
+
         bdFaceImageConfig.setData(data);
         checkData();
+
     }
 
     private void dealIr(byte[] data) {
-      //  Log.i("______456","nir数据"+data.length);
+        //  Log.i("______456","nir数据"+data.length);
 //        SystemClock.sleep(30);
+
         bdNirFaceImageConfig.setData(data);
         checkData();
+
     }
 
     private synchronized void checkData() {
@@ -458,6 +532,13 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
                                 doPersonCardResult(livenessModel);
                             }
 
+                        }else{
+                            if (livenessModel != null && livenessModel.getBdNirFaceImageInstance() != null) {
+                                livenessModel.getBdNirFaceImageInstance().destory();
+                            }
+                            if (livenessModel != null && livenessModel.getBdFaceImageInstance() != null) {
+                                livenessModel.getBdFaceImageInstance().destory();
+                            }
                         }
 
 
@@ -489,7 +570,9 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
         if (livenessModel == null) {
             return;
         }
-
+        if (glMantleSurfacView == null) {
+            return;
+        }
         glMantleSurfacView.onGlDraw(livenessModel.getTrackFaceInfo(),
                 livenessModel.getBdFaceImageInstance(),
                 FaceOnDrawTexturViewUtil.drawFaceColor(mUser, livenessModel));
@@ -509,6 +592,7 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
             }
             if (mCamera != null) {
                 mCamera.stopPreview();
+                mCamera.setPreviewCallbackWithBuffer(null);
                 mCamera.setPreviewCallback(null);
                 mCamera.release();
                 mCamera = null;
@@ -589,6 +673,7 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
                 }
                 if ((currentTime - startTime) > (ConfigManager.getAuthenticationBeanListBean().getOneToNContinueFailTime() * 1000)) {
                     TaskStatus.setStatus(TaskStatus.TASK_STATUS_FACE);
+                    invoke_StopVerify();
                     AppHandler.getHandler().removeCallbacks(FaceErrorRunnable);
                     AppHandler.getHandler().post(FaceErrorRunnable);
                 }
@@ -604,7 +689,6 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
 
 
             AppLogUtils.i(true, TAG, "doScanFaceResult(), " + user.getUserName() + " 欢迎您");
-
             AppHandler.getHandler().post(new Runnable() {
                 @Override
                 public void run() {
@@ -641,7 +725,6 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
         String faceRequestParams = BaiduFaceUtil.getScanFaceRequestParams(user);
 
         //setAuthCodeOrVid(jsonObject,extInfoJsonObject);
-
         //重置现场照片、姓名、身份证号等用户信息
         setUserInformationBean(livenessModel);
         //销毁按钮
@@ -716,7 +799,7 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
         if (curTime < startTime || curTime > endTime) {
 
             FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "不在有效期", 500, "不在有效期");
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
 
             return true;
         }
@@ -727,20 +810,23 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
         if (livenessModel == null) {
             return;
         }
-
         User user = livenessModel.getUser();
+
         UserInfoItem userInfoItem = BaiduFaceUtil.getUserInfo(user);
         String userName = userInfoItem.getUserName();
         String idNumber = userInfoItem.getIdNumber();
         String phone = userInfoItem.getPhone();
-
+        String photo = userInfoItem.getPhoto();
+        UserInfoManager.getInstance().setUserInformationBean(userName, idNumber, "", photo, phone);
         //人脸图片
         BDFaceImageInstance rgbImage = livenessModel.getBdFaceImageInstance();
         if (rgbImage != null) {
             Bitmap bitmap = BitmapUtils.getInstaceBmp(rgbImage);
-            byte[] photoByteArray = BitmapUtils.bitmapToBytes(bitmap);
-            String photoBase64Str = CommonUtil.byteArrayToBase64String(photoByteArray);
-            UserInfoManager.getInstance().setUserInformationBean(userName, idNumber, "", photoBase64Str, phone);
+//            Log.e("","-------------重置现场照片6");
+//            byte[] photoByteArray = BitmapUtils.bitmapToBytes(bitmap);
+//            String photoBase64Str = CommonUtil.byteArrayToBase64String(photoByteArray);
+//            String photoBase64Str = CommonUtil.bitmapToString(bitmap);
+            UserInfoManager.getInstance().setUserInformationBean(userName, idNumber, "", "", phone,bitmap);
 
         } else {
             AppLogUtils.e(true, TAG, "updateScenePhoto(), bdFaceImageInstance == null, 结果页无法显示现场照片");
@@ -814,9 +900,6 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
         @Override
         public void run() {
             String failText = "比对失败";
-            if (!StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getFailText())) {
-                failText = ConfigManager.getAuthenticationBeanListBean().getFailText();
-            }
             doPersonCardResult_fail(failText, failText);
         }
     };
@@ -884,53 +967,54 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
      */
     private void doPersonCardResult(LivenessModel livenessModel) {
         AppLogUtils.i(true, TAG, "doPersonCardResult(), livenessModel=" + livenessModel);
-
         if (livenessModel == null) {
             return;
         }
-
-        //活体阈值判断显示
-        float rgbLivenessScore = livenessModel.getRgbLivenessScore();
-        float rgbLivenessThreshold = bdLiveConfig.rgbLiveScore;//rgb活体阈值
-
         // 人脸识别阈值判断
         // 比对分值,相似度分数
         float compareScore = livenessModel.getScore();
-        //float idThreshold = SingleBaseConfig.getBaseConfig().getIdThreshold();
-        float idThreshold = 0.5F;
+        float idThreshold = SingleBaseConfig.getBaseConfig().getIdThreshold();
 
-        AppLogUtils.i(true, TAG, "doPersonCardResult(), 人证比对,rgbLivenessScore=" + rgbLivenessScore + " ,rgbLivenessThreshold=" + rgbLivenessThreshold
-                + " ,compareScore=" + compareScore + " ,idThreshold=" + idThreshold);
+        if (!ConfigManager.getAuthenticationBeanListBean().getLivingControl()){  //活体检测未开启
+            doPersonCardComparison(compareScore,idThreshold,livenessModel);
 
-        if (rgbLivenessScore >= rgbLivenessThreshold) {
-
-            if (compareScore >= idThreshold) {
-                AppLogUtils.i(true, TAG, "doPersonCardResult(), 人证比对成功");
-                //销毁1:1人脸连续未通过的Runnable
-                AppHandler.getHandler().removeCallbacks(personCardFaceErrorRunnable);
-                AppHandler.getHandler().post(new Runnable() {
-                    @Override
-                    public void run() {
-                        doPersonCardResult_Success(livenessModel);
-                    }
-                });
+        }else {    //活体检测开启
+            //活体阈值判断显示
+            float rgbLivenessScore = livenessModel.getRgbLivenessScore();
+            float rgbLivenessThreshold = bdLiveConfig.rgbLiveScore;//rgb活体阈值
+            AppLogUtils.i(true, TAG, "doPersonCardResult(), 人证比对,rgbLivenessScore=" + rgbLivenessScore + " ,rgbLivenessThreshold=" + rgbLivenessThreshold
+                    + " ,compareScore=" + compareScore + " ,idThreshold=" + idThreshold);
 
+            if (rgbLivenessScore >= rgbLivenessThreshold) {
+                doPersonCardComparison(compareScore,idThreshold,livenessModel);
             } else {
-                AppLogUtils.i(true, TAG, "doPersonCardResult(), 人证比对失败,人脸比对阈值未达到");
-                if (!isCreatedRunnable) {
-                    isCreatedRunnable = true;
-                    AppHandler.getHandler().removeCallbacks(personCardFaceErrorRunnable);
-                    AppHandler.getHandler().postDelayed(personCardFaceErrorRunnable, ConfigManager.getAuthenticationBeanListBean().getOneToOneContinueFailTime() * 1000);
-                }
+                AppLogUtils.i(true, TAG, "doPersonCardResult(), 人证比对失败,活体检测未通过");
             }
-
-        } else {
-            AppLogUtils.i(true, TAG, "doPersonCardResult(), 人证比对失败,活体检测未通过");
         }
 
-
     }
 
+    private void doPersonCardComparison(float compareScore,float idThreshold,LivenessModel livenessModel){
+        if (compareScore >= idThreshold) {
+            AppLogUtils.i(true, TAG, "doPersonCardResult(), 人证比对成功");
+            //销毁1:1人脸连续未通过的Runnable
+            AppHandler.getHandler().removeCallbacks(personCardFaceErrorRunnable);
+            AppHandler.getHandler().post(new Runnable() {
+                @Override
+                public void run() {
+                    doPersonCardResult_Success(livenessModel);
+                }
+            });
+
+        } else {
+            AppLogUtils.i(true, TAG, "doPersonCardResult(), 人证比对失败,人脸比对阈值未达到");
+            if (!isCreatedRunnable) {
+                isCreatedRunnable = true;
+                AppHandler.getHandler().removeCallbacks(personCardFaceErrorRunnable);
+                AppHandler.getHandler().postDelayed(personCardFaceErrorRunnable, ConfigManager.getAuthenticationBeanListBean().getOneToOneContinueFailTime() * 1000);
+            }
+        }
+    }
     private void doPersonCardResult_Success(LivenessModel livenessModel) {
         AppLogUtils.i(true, TAG, "doPersonCardResult_Success()");
 
@@ -971,7 +1055,7 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
             DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, DataReturns.FACE_DATA_VIRTUAL);
         } else {
             AppLogUtils.i(true, TAG, "doPersonCardResult_fail(), 通用模式");
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
         }
 
     }
@@ -983,7 +1067,7 @@ public class BaiduFacePreviewActivity extends BaiduFaceMainActivity {
      * Time 2024/10/19
      * Description: 补光灯
      *
-    **/
+     **/
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void ledLight(LedLightEvent event) {
         if (event == null||mHandler==null) {

+ 12 - 0
app/src/main/java/com/hanghui/senic/baiduface/BaiduFaceUtil.java

@@ -179,7 +179,19 @@ public class BaiduFaceUtil {
         Context context = MyAppliction.getContext();
         Intent intent = new Intent(context, WebsocketService.class);
         context.startService(intent);
+
+
     }
+    public static void stopBaiduFaceWebsocketService() {
+        AppLogUtils.i(true, TAG, "stopBaiduFaceWebsocketService()" );
+
+        Context context = MyAppliction.getContext();
+        Intent intent = new Intent(context, WebsocketService.class);
+        context.stopService(intent);
+
+
+    }
+
 
     public static String getScanFaceRequestParams(User user) {
 

+ 163 - 42
app/src/main/java/com/hanghui/senic/baiduface/WebsocketService.java

@@ -1,9 +1,14 @@
 package com.hanghui.senic.baiduface;
 
+import static com.hanghui.senic.baiduface.BaiduFaceConstant.STATUS_cancel;
 import static com.hanghui.senic.baiduface.BaiduFaceConstant.STATUS_processing;
 import static com.hanghui.senic.baiduface.BaiduFaceConstant.STATUS_success;
 
+import android.annotation.SuppressLint;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
 import android.app.Service;
+import android.content.Context;
 import android.content.Intent;
 import android.os.Handler;
 import android.os.HandlerThread;
@@ -54,6 +59,7 @@ public class WebsocketService extends Service {
     private CustomWebSocketListener mWebSocketListener = new CustomWebSocketListener();
 
     private volatile static  ConcurrentHashMap<String, WebSocketTask> webSocketTaskMap;  //todo 人脸执行队列任务 MAP
+    private volatile boolean isOnDestory=false; //服务是否销毁
 
     private Runnable mUserInfoReportRunnable = new Runnable() {
         @Override
@@ -80,6 +86,8 @@ public class WebsocketService extends Service {
         public void run() {
             sendMessage_heartbeat();
             mHandlerThreadHandler.postDelayed(this, HEART_BEAT_INTERVAL);
+            rebortApp();
+
         }
     };
 
@@ -91,8 +99,6 @@ public class WebsocketService extends Service {
     private HandlerThread mHandlerThread;
     private Handler mHandlerThreadHandler;
 
-    //相同的userId过滤
-    private HashMap<Integer, String> mUserHashMap = new HashMap<>();
     private int errorUserDataCount;//错误的用户数据
 
     @Override
@@ -108,7 +114,8 @@ public class WebsocketService extends Service {
         AppLogUtils.i(true, TAG + " ,onStartCommand", "onStartCommand()");
 
         //test_processUserData_delete();
-
+        isOnDestory=false;
+        cleanFaceQueue(); //清除刷脸队列
         initWebSocket();
 
         return START_STICKY;
@@ -127,17 +134,40 @@ public class WebsocketService extends Service {
 
     @Override
     public void onDestroy() {
+        isOnDestory=true;
         super.onDestroy();
-
         AppLogUtils.i(true, TAG + " ,WebSocket, onDestroy()", "WebSocket, onDestroy()");
-
+        closeWebSocket();
         mHandlerThreadHandler.removeCallbacks(mUserInfoReportRunnable);
         mHandlerThreadHandler.removeCallbacks(mHeartbeatRunnable);
         mHandlerThreadHandler.removeCallbacks(mHeartbeatTimeOutRunnable);
+        cleanFaceQueue();
+    }
 
-        closeWebSocket();
+    /**
+     *
+     * @author xwh
+     * Time 2024/10/23
+     * Description: 清除人脸下发队列
+     *
+    **/
+    private void cleanFaceQueue(){
+        if(webSocketTaskMap!=null) {
+            for (String key : webSocketTaskMap.keySet()) {
+                WebSocketTask webSocketTask = webSocketTaskMap.get(key);
+                if (webSocketTask == null) {
+                    continue;
+                }
+                webSocketTask.setWebSocketTaskEnum(WebSocketTaskEnum.CANCEL);
+                webSocketTaskMap.put(key,webSocketTask);
+                mFaceDataHandlerThreadHandler.removeCallbacks(webSocketTask.getRunnable());
+            }
+            webSocketTaskMap.clear();
+        }
     }
 
+
+
     private void initHandlerThread() {
         //处理人脸数据下发的HandlerThread
         mFaceDataHandlerThread = new HandlerThread("faceDataProcess_handlerThread");
@@ -268,7 +298,6 @@ public class WebsocketService extends Service {
                 AppLogUtils.e(true, TAG + " ,WebSocket, onMessage()", "WebSocket, onMessage(), 数据错误, userFaceData == null");
                 return;
             }
-
             //全量下发或者增量下发时,text可能会有很大的数据量,会导致OOM,因此不打印数据
             if(isNeedLogText(userFaceData) ) {
                 AppLogUtils.i(true, TAG + " ,WebSocket, onMessage()", "WebSocket, onMessage(), WebSocket接收到文本消息, text=" + text);
@@ -276,7 +305,11 @@ public class WebsocketService extends Service {
                 AppLogUtils.i(true, TAG + " ,WebSocket, onMessage()", "WebSocket, onMessage(), WebSocket接收到文本消息, op=" + userFaceData.getOp() );
             }
 
+            if(BaiduFaceConstant.OP_ISSUE_CANCEL.equals(userFaceData.getOp())){ //取消任务
+                processUserData_Cancel(userFaceData.getData());
+                return;
 
+            }
             //todo 接收到下发的消息,依次放进队列按照顺序执行
             executeAddFacetasks(userFaceData);
 
@@ -337,7 +370,11 @@ public class WebsocketService extends Service {
         if(userFaceData==null){
             return;
         }
-
+     //   Log.i("____789","新增:"+userFaceData.getOp()+"   ");
+        if(isOnDestory){
+        //    Log.i("____789","executeAddFacetasks:"+"isOnDestory = true   ");
+            return;
+        }
         Runnable runnable=new Runnable() {
             @Override
             public void run() {
@@ -347,6 +384,14 @@ public class WebsocketService extends Service {
             }
         };
         if(userFaceData.getData()!=null) {
+            String traceId =userFaceData.getData().getTraceId(); //任务ID
+            if(TextUtils.isEmpty(traceId)){
+                return;
+            }
+            if(getWebSocketTaskMap().containsKey(traceId)){
+                return;
+            }
+            //TODO 人脸执行队列任务更新状态 WAIT
             WebSocketTask webSocketTask = new WebSocketTask(WebSocketTaskEnum.WAIT, runnable);
             getWebSocketTaskMap().put(userFaceData.getData().getTraceId(), webSocketTask);
         }
@@ -390,6 +435,7 @@ public class WebsocketService extends Service {
             AppLogUtils.e(true, TAG + " ,receiveUserFaceData", "WebSocket, receiveUserFaceData, 数据错误, userFaceData == null");
             return;
         }
+
         String sn = userFaceData.getSn();
         if(sn == null || !sn.equals(ConfigManager.SN)) {
             AppLogUtils.e(true, TAG + " ,receiveUserFaceData", "WebSocket, receiveUserFaceData, 数据错误, sn为空或者与本设备的sn不匹配");
@@ -426,6 +472,7 @@ public class WebsocketService extends Service {
 
             //全量下发时,先清空本地的数据,再新增数据
             FaceApi.getInstance().userClean();
+            FaceSDKManager.getInstance().cleanSearch();
 
             //开始处理人脸数据
             processUserData_issue(data);
@@ -537,26 +584,46 @@ public class WebsocketService extends Service {
      */
     public synchronized void processUserData_issue(UserFaceData.Data data) {
         AppLogUtils.i(true, TAG + " ,processUserData_issue", "processUserData_issue(), item.size=" + data.getItems().size());
-        mUserHashMap.clear();
+        if(isOnDestory){
+            return;
+        }
         errorUserDataCount = 0;
 
-
         ArrayList<UserFaceData.Data.Item> userItems = data.getItems();
 
         ArrayList<UserFaceDataIssueCallback.Data.Item> callbackItems = new ArrayList<>(); //已处理的数据, 回调给后台
 
-        int totalSize = userItems.size();
-
-        int currentPercent = -1; //todo 当前下发进度
-
+        int totalSize = userItems.size(); //todo 需要下发总数
+        int currentCount =0; //todo 当前已下发总数
+        boolean isTaskCancel =false; //当前任务是否被取消
+        String traceId= data.getTraceId();
+     //   Log.i("____789","当前任务:"+traceId+"   ");
+        if (!TextUtils.isEmpty(traceId)
+                && getWebSocketTaskMap().containsKey(traceId) &&
+                getWebSocketTaskMap().get(traceId) != null) {
+            if (getWebSocketTaskMap().get(traceId)
+                    .getWebSocketTaskEnum() == WebSocketTaskEnum.CANCEL) { //TODO 如果任务已取消 返回
+            //    Log.i("____789", "当前任务已取消:" + traceId + "   ");
+                return;
+            }
+            WebSocketTask tempTask = getWebSocketTaskMap().get(traceId);//TODO 人脸执行队列任务更新状态 RUNNING
+            tempTask.setWebSocketTaskEnum(WebSocketTaskEnum.RUNNING);
+            getWebSocketTaskMap().put(traceId, tempTask);
+        }
+        Log.i("____789","   "+traceId+"准备轮询下发");
         for (int i = 0; i < totalSize; i++) {
 
             if (userItems.size() <= i) { //todo 避免数组越界
                 break;
             }
-            String traceId= data.getTraceId();
-            if(!TextUtils.isEmpty(traceId)&&getWebSocketTaskMap().containsKey(traceId)){
 
+            if(!TextUtils.isEmpty(traceId)&&getWebSocketTaskMap().containsKey(traceId)){
+                if (getWebSocketTaskMap().get(traceId) != null
+                        && getWebSocketTaskMap().get(traceId)
+                        .getWebSocketTaskEnum() == WebSocketTaskEnum.CANCEL){ //任务取消
+                    isTaskCancel = true;
+                    break;
+                }
             }
             //处理每个用户的数据
             UserFaceData.Data.Item userItem = userItems.get(i);
@@ -622,8 +689,11 @@ public class WebsocketService extends Service {
 
                     code = CODE_success;
                     msg = "下发成功";
-                    User user = DBManager.getInstance().queryUser(userId);
-                    FaceSDKManager.getInstance().initPush2(user);
+                    User user=FaceApi.getInstance().getUserByUserId(userId);
+
+                    if(user!=null) {
+                        FaceSDKManager.getInstance().initPush2(user);
+                    }
                 } else {
                     AppLogUtils.e(true, TAG + " ,processUserData_issue", "processUserData_issue(), 人脸注册失败 userId=" + userId + " ,userName=" + userName);
 
@@ -631,10 +701,7 @@ public class WebsocketService extends Service {
                     msg = "下发失败";
                 }
 
-
-                // 人脸数据下发结果统计,相同的userId过滤
-                mUserHashMap.put(userItem.getUserId(), userItem.getUserName());
-
+                currentCount++;
             }
 
             //回调给后台
@@ -643,27 +710,27 @@ public class WebsocketService extends Service {
             callbackItem.setCode(code);
             callbackItem.setMsg(msg);
             callbackItems.add(callbackItem);
-            Log.i("____________________123","注册数据"+callbackItems.size()+"      "+(int) (callbackItems.size() * 1.0 / totalSize * 100));
-            if (callbackItems.size() < totalSize ) {
-                int tempPercent = 0;
-                if (totalSize > 0) {
-                    tempPercent = (int) (callbackItems.size() * 1.0 / totalSize * 100);
-                }
-                if (tempPercent > currentPercent) { //todo 当前进度如果有更新,同步后台百分比
-                    currentPercent = tempPercent;
-                    sendMessage_issueCallback(data.getTraceId(), STATUS_processing, "下发中", totalSize, callbackItems);
-                }
+            if (callbackItems.size() > 30 && callbackItems.size() < totalSize) {
+                sendMessage_issueCallback(data.getTraceId(), STATUS_processing, "下发中", totalSize,currentCount, callbackItems);
+                callbackItems=new ArrayList<>();
             }
-
-
         }
-        sendMessage_issueCallback(data.getTraceId(), STATUS_success, "下发任务成功完成", totalSize, callbackItems);
-
+        Log.i("____789","   "+traceId+"     下发完成或结束");
+        sendMessage_issueCallback(data.getTraceId(), isTaskCancel?STATUS_cancel:STATUS_success, "下发任务成功完成", totalSize, currentCount,callbackItems);
+
+        if(!TextUtils.isEmpty(traceId)&&getWebSocketTaskMap().containsKey(traceId)){ //todo 人脸执行队列任务更新状态
+            WebSocketTask tempTask=getWebSocketTaskMap().get(traceId);
+            if ( tempTask!= null){
+                tempTask.setWebSocketTaskEnum( isTaskCancel?WebSocketTaskEnum.CANCEL:WebSocketTaskEnum.COMPLETE);
+                getWebSocketTaskMap().put(traceId,tempTask);
+            }
+        }
+        callbackItems.clear();
         //人脸数据下发结果统计
         if( callbackItems.size() == totalSize ) { //最后一条数据
             String result = "本次共下发 " + totalSize + " 条人脸数据" + " ,其中错误的数据 " + errorUserDataCount + " 条, " +
                     "正确的数据 " + (totalSize - errorUserDataCount) + " 条, " +
-                    "正确的数据中,不同userid的数据共有 " + mUserHashMap.size() + " 条.";
+                    "正确的数据中,不同userid的数据共有 " + currentCount + " 条.";
             AppLogUtils.i(true, "processUserData_issue, 人脸数据下发结果统计", "processUserData_issue, 人脸数据下发结果统计: " + result );
         }
 //        initFaceSearchData();
@@ -776,23 +843,48 @@ public class WebsocketService extends Service {
 
         //清空本地的数据
         FaceApi.getInstance().userClean();
-
+        FaceSDKManager.getInstance().cleanSearch();
         initFaceSearchData();
 
         sendMessage_deleteAllCallback(data.getTraceId(), STATUS_success, "删除成功");
 
 
 
+    }
+    /**
+     *
+     * @author xwh
+     * Time 2024/10/21
+     * Description: 任务取消
+     *
+    **/
+    public void processUserData_Cancel(UserFaceData.Data data){
+        if(data ==null){
+            return;
+        }
+        if(TextUtils.isEmpty(data.getTraceId())){
+            return;
+        }
+        Log.i("____789"," 取消下发"+data.getTraceId());
+        ConcurrentHashMap<String, WebSocketTask> tempMap= getWebSocketTaskMap();
+        if(tempMap.containsKey(data.getTraceId())){
+            WebSocketTask tempTask=tempMap.get(data.getTraceId());
+            tempTask.setWebSocketTaskEnum(WebSocketTaskEnum.CANCEL);
+            mFaceDataHandlerThreadHandler.removeCallbacks(tempTask.getRunnable());
+            tempMap.put(data.getTraceId(),tempTask);
+        }
+
     }
 
 
+
     /**
      * 人脸数据下发的回调
      *
      * @param totalCount    后台总共下发的用户数量
      * @param callbackItems 客户端已处理的用户数据
      */
-    private void sendMessage_issueCallback(String traceId, String status, String msg, int totalCount,
+    private void sendMessage_issueCallback(String traceId, String status, String msg, int totalCount, int currCount,
                                            ArrayList<UserFaceDataIssueCallback.Data.Item> callbackItems) {
         if (TextUtils.isEmpty(traceId)) {
             AppLogUtils.e(true, TAG + " ,sendMessage_issueCallback", "WebSocket, sendMessage_deleteAllCallback(), traceId为空");
@@ -803,7 +895,7 @@ public class WebsocketService extends Service {
             return;
         }
 
-        int callbackItemSize = callbackItems.size();
+        int callbackItemSize = currCount;
 
         int percent = 0;
         if(totalCount == 0) {
@@ -826,8 +918,8 @@ public class WebsocketService extends Service {
         data.setIssuePercent(percent);
         //data.setItems(callbackItems);
         //百度人脸下发的回调,Data.items字段,处理过程中不需要传items数据,最后一条数据时再传items数据
-        if(callbackItemSize < totalCount ) {
-            data.setItems(null);
+        if(status.equals(STATUS_processing)) {
+            data.setItems(callbackItems);
         } else { //处理最后一条数据
             data.setItems(callbackItems);
         }
@@ -973,6 +1065,9 @@ public class WebsocketService extends Service {
 
         for (String key : usersMap.keySet()) {
             User user = usersMap.get(key);
+            if(user==null){
+               continue;
+            }
             int userId = -1;
             try {
                 userId = Integer.parseInt(user.getUserId());
@@ -1049,4 +1144,30 @@ public class WebsocketService extends Service {
         }
         return webSocketTaskMap;
     }
+
+    private void rebortApp(){
+        try {
+            long currentTime=System.currentTimeMillis();
+            long appHeartTime=MyAppliction.getAppHeartbeatTime();
+            if (appHeartTime > 0 && currentTime - appHeartTime >= 60 * 1000) {
+                Intent intent = new Intent( MyAppliction.getContext().getApplicationContext(), BaiduFacePreviewActivity.class);
+                @SuppressLint("WrongConstant")
+                PendingIntent restartIntent = PendingIntent.getActivity( MyAppliction.getContext().getApplicationContext(), 0, intent,
+                        Intent.FLAG_ACTIVITY_NEW_TASK);
+                //退出程序
+                AlarmManager mgr = (AlarmManager) MyAppliction.getContext().getSystemService(Context.ALARM_SERVICE);
+                mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 500, restartIntent); //1秒钟后重启应用
+                if( MyAppliction.getContext() instanceof MyAppliction){
+                    ((MyAppliction) MyAppliction.getContext()).finishActivity();
+                    System.exit(0);
+                }else{
+                    System.exit(0);
+                }
+
+            }
+        }catch (Exception e){
+
+        }
+
+    }
 }

+ 11 - 0
app/src/main/java/com/hanghui/senic/bean/UserInformationBean.java

@@ -1,11 +1,22 @@
 package com.hanghui.senic.bean;
 
+import android.graphics.Bitmap;
+
 public class UserInformationBean {
     private String name;
     private String idNumber;
     private String idPhoto;
     private String scenePhoto;
     private String mobile;
+    private Bitmap bitmap;
+
+    public Bitmap getBitmap() {
+        return bitmap;
+    }
+
+    public void setBitmap(Bitmap bitmap) {
+        this.bitmap = bitmap;
+    }
 
     public String getMobile() {
         return mobile;

+ 17 - 0
app/src/main/java/com/hanghui/senic/common/CommonUtil.java

@@ -15,6 +15,7 @@ import android.net.Network;
 import android.net.NetworkInfo;
 import android.net.Uri;
 import android.net.wifi.WifiManager;
+import android.os.AsyncTask;
 import android.text.TextUtils;
 import android.text.format.Formatter;
 import android.util.Base64;
@@ -30,6 +31,7 @@ import com.hanghui.senic.service.usbserialdemo.utile.X1.RelaysAndLedUtile;
 import com.hanghui.senic.service.usbserialdemo.utile.X5.X5RelaysAndLedUtile;
 import com.hanghui.senic.service.usbserialdemo.utile.loacat.AppLogUtils;
 
+import java.io.ByteArrayOutputStream;
 import java.net.InetAddress;
 
 
@@ -66,6 +68,21 @@ public class CommonUtil {
         activity.startActivity(intent);
     }
 
+    public static String bitmapToString(Bitmap bitmap) {
+        //将Bitmap转换成字符串
+        try {
+            String string = null;
+            ByteArrayOutputStream bStream = new ByteArrayOutputStream();
+            bitmap.compress(Bitmap.CompressFormat.PNG, 30, bStream);
+            byte[] bytes = bStream.toByteArray();
+            string = Base64.encodeToString(bytes, Base64.DEFAULT);
+            return string;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "";
+        }
+    }
+
     public static String byteArrayToBase64String(byte[] data) {
         if (data == null) {
             return "";

+ 2 - 1
app/src/main/java/com/hanghui/senic/common/DataReturns.java

@@ -1,5 +1,6 @@
 package com.hanghui.senic.common;
 
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.bean.FederatedPlatformsResponseBean;
 import com.hanghui.senic.bean.FederatedPlatformsRequestBean;
@@ -102,7 +103,7 @@ public class DataReturns {
         //展示悬浮框
         AppLogUtils.i(true, "预检查调度中心-结果页渲染", "双方数据满足,执行结果页渲染:" + federatedPlatformsData + "----" + facesData);
 //        BaiduFaceResultView.addIsvResultView(federatedPlatformsDatas);
-        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsData);
+        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsData);
         clearData();
         AppHandler.getHandler().removeCallbacks(resetDataRunnable);
 

+ 12 - 0
app/src/main/java/com/hanghui/senic/common/UserInfoManager.java

@@ -1,5 +1,7 @@
 package com.hanghui.senic.common;
 
+import android.graphics.Bitmap;
+
 import com.hanghui.senic.bean.UserInformationBean;
 
 /**
@@ -33,6 +35,7 @@ public class UserInfoManager {
             userInformationBean.setIdPhoto("");
             userInformationBean.setScenePhoto("");
             userInformationBean.setMobile("");
+            userInformationBean.setBitmap(null);
         }
         return userInformationBean;
     }
@@ -53,6 +56,15 @@ public class UserInfoManager {
         userInformationBean.setMobile(mobile);
     }
 
+    public void setUserInformationBean(String name, String idNumber, String IDPhoto, String ScenePhoto, String mobile, Bitmap bitmap) {
+        userInformationBean = new UserInformationBean();
+        userInformationBean.setScenePhoto(ScenePhoto);
+        userInformationBean.setName(name);
+        userInformationBean.setIdPhoto(IDPhoto);
+        userInformationBean.setIdNumber(idNumber);
+        userInformationBean.setMobile(mobile);
+        userInformationBean.setBitmap(bitmap);
+    }
     /**
      * 更新UserInformationBean的ScenePhoto字段(现场照片)
      *

+ 2 - 1
app/src/main/java/com/hanghui/senic/controller/BlacklistManager.java

@@ -1,6 +1,7 @@
 package com.hanghui.senic.controller;
 
 import com.hanghui.senic.MyAppliction;
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.bean.BlacklistConfigBean;
 import com.hanghui.senic.bean.FederatedPlatformsResponseBean;
@@ -82,7 +83,7 @@ public class BlacklistManager {
         if (isBlacklistExistUser && ConfigManager.getAuthenticationBeanListBean().getForbidPassSwitch()) {
             FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B",
                     ConfigManager.getAuthenticationBeanListBean().getForbidPassText(), 500, ConfigManager.getAuthenticationBeanListBean().getForbidPassVoice());
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             BlacklistManager.getInstance().isBlacklistExistUser = false;
             return true;
         }

+ 3 - 2
app/src/main/java/com/hanghui/senic/controller/IDCardController.java

@@ -4,6 +4,7 @@ import android.media.SoundPool;
 
 import com.hanghui.senic.MyAppliction;
 import com.hanghui.senic.R;
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ClickButtonFloatView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.baiduface.BaiduFaceController;
@@ -116,7 +117,7 @@ public abstract class IDCardController extends BaseController {
         //SmileController.getInstance().invokeStopVerify();//打断当次刷脸
         BaiduFaceController.getInstance().invokeStopVerify();
         ClickButtonFloatView.getInstance().removeClickButtonFloatView();
-        ResultViewManager.getInstance().removeResultView();
+        BaiDuFaceView.getInstance().removeResultView();
         if (ConfigManager.isPreCheck()) {
             if (ConfigManager.getAuthenticationBean().getData().get(0).isUsePersonCard()) {
                 //SmileController.getInstance().invokePersonCardWithSetState(name, idNumber, base64Str);
@@ -185,7 +186,7 @@ public abstract class IDCardController extends BaseController {
         //SmileController.getInstance().invokeStopVerify();//打断当次刷脸
         BaiduFaceController.getInstance().invokeStopVerify();
         ClickButtonFloatView.getInstance().removeClickButtonFloatView();
-        ResultViewManager.getInstance().removeResultView();
+        BaiDuFaceView.getInstance().removeResultView();
 
         requestFederatedPlatforms_icCard(type);
     }

+ 3 - 2
app/src/main/java/com/hanghui/senic/controller/PassportController.java

@@ -3,6 +3,7 @@ package com.hanghui.senic.controller;
 import android.os.Environment;
 import android.widget.Toast;
 
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ClickButtonFloatView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.bean.FederatedPlatformsResponseBean;
@@ -157,7 +158,7 @@ public class PassportController extends BaseController {
         }
         if (!isPassDocuments(obj) && !type.equals("103")) {
             FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "无效证件", 500, "无效证件");
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             isPassportIn = false;
             PassportController.getInstance().openOCrRecoge();
             return;
@@ -357,7 +358,7 @@ public class PassportController extends BaseController {
                 AppLogUtils.e(true, " 护照机 - PassportHandler", "护照机状态 20 读取失败  " + msg);
                 if (isPassportIn) {
                     FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "请再试一次", 500, "请再试一次");
-                    ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                    BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                     isPassportIn = false;
                 }
                 openOCrRecoge();

+ 2 - 0
app/src/main/java/com/hanghui/senic/controller/QRCodeController.java

@@ -212,6 +212,8 @@ public class QRCodeController extends BaseController {
         try {
             CommonUtil.getCurrentActivity().unregisterReceiver(QRCodeController.getInstance().mUsbReceiver);
             CommonUtil.getCurrentActivity().unbindService(QRCodeController.getInstance().usbConnection);
+            Intent intent = new Intent(CommonUtil.getCurrentActivity(),UsbService.class);
+            CommonUtil.getCurrentActivity().stopService(intent);
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 24 - 19
app/src/main/java/com/hanghui/senic/network/HttpRequest.java

@@ -7,6 +7,7 @@ import android.content.Intent;
 import android.icu.util.Calendar;
 import android.os.Build;
 import android.os.Handler;
+import android.util.Log;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baidu.idl.main.facesdk.model.BaseConfig;
@@ -15,6 +16,7 @@ import com.common.pos.api.util.PosUtil;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.hanghui.senic.MyAppliction;
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.baiduface.BaiduFaceController;
 import com.hanghui.senic.bean.AlipayUserInfoBean;
@@ -290,12 +292,15 @@ public class HttpRequest {
         baseConfig.setQualityControl(ConfigManager.getAuthenticationBeanListBean().getQualityControl());
         baseConfig.setBlur(ConfigManager.getAuthenticationBeanListBean().getBlur());
         baseConfig.setIllumination(ConfigManager.getAuthenticationBeanListBean().getIllum());
-        if (ConfigManager.getAuthenticationBeanListBean().getLivingControl()){
+        if (!ConfigManager.getAuthenticationBeanListBean().getLivingControl()){
+            baseConfig.setLivingControl(false);
             baseConfig.setType(0);
         } else {
             //设置活体检测模式
+            baseConfig.setLivingControl(true);
             baseConfig.setType(ConfigManager.getAuthenticationBeanListBean().getLiveType());
         }
+
         baseConfig.setRgbLiveScore(ConfigManager.getAuthenticationBeanListBean().getRgbLiveScore());
         baseConfig.setNirLiveScore(ConfigManager.getAuthenticationBeanListBean().getNirLiveScore());
         baseConfig.setDepthLiveScore(ConfigManager.getAuthenticationBeanListBean().getDepthLiveScore());
@@ -932,7 +937,7 @@ public class HttpRequest {
                         }
                         AppLogUtils.e(true, "核验接口返回处理中心-通用", "关闭预检查:返回数据code非200,通知调度中心处理");
                         federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", msg, 500, msg);
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
                     if (!EncryptionAndDecryptionUtil.checkSign(
@@ -941,14 +946,14 @@ public class HttpRequest {
                             decryptBean.getData().getSign(),
                             String.valueOf(decryptBean.getData().getReqTimestamp()))) {
                         federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "核验接口验签出错", 500, "核验接口验签出错");
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
                     String decryptData = "";
                     decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptPrivateKey(), decryptBean.getData().getBizContent());
                     if (StringIsNull.IsStringNull(decryptData)) {
                         federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "核验接口解密失败", 500, "核验接口解密失败");
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
                     AppLogUtils.i(true, "加密接口请求入参", "加密接口请求数据返回  " + o);
@@ -965,12 +970,12 @@ public class HttpRequest {
                         federatedPlatformsResponseBean.setMsg("核验接口请求失败");
                     }
                     federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", federatedPlatformsResponseBean.getMsg(), 500, federatedPlatformsResponseBean.getMsg());
-                    ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                    BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                     return;
                 }
                 CompleteDataUtil.completeFederatedPlatformsResponseBean(federatedPlatformsResponseBean);
                 //展示悬浮框
-                ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             }
         });
     }
@@ -1027,7 +1032,7 @@ public class HttpRequest {
                         }
                         AppLogUtils.i(true, "核验接口返回处理中心", "开启预检查:返回数据code非200,通知调度中心处理");
                         federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", decryptBean.getMsg(), decryptBean.getCode(), decryptBean.getMsg());
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
                     //验签失败
@@ -1037,14 +1042,14 @@ public class HttpRequest {
                             decryptBean.getData().getSign(),
                             String.valueOf(decryptBean.getData().getReqTimestamp()))) {
                         federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "核验接口验签出错", 500, "核验接口验签出错");
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
                     String decryptData = "";
                     decryptData = EncryptionAndDecryptionUtil.decrypt(ConfigManager.getAuthenticationBeanListBean().getCheckVerifyEncryptPrivateKey(), decryptBean.getData().getBizContent());
                     if (StringIsNull.IsStringNull(decryptData)) {
                         federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "核验接口解密失败", 500, "核验接口解密失败");
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
                     AppLogUtils.i(true, "接口请求_加密接口请求", "加密接口请求数据返回  " + decryptData);
@@ -1064,7 +1069,7 @@ public class HttpRequest {
                     AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启预检查:返回数据code非200,通知调度中心处理");
                     federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", federatedPlatformsResponseBean.getMsg(), federatedPlatformsResponseBean.getCode(),
                             federatedPlatformsResponseBean.getMsg());
-                    ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                    BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                     return;
                 }
                 CompleteDataUtil.completeFederatedPlatformsResponseBean(federatedPlatformsResponseBean);
@@ -1094,7 +1099,7 @@ public class HttpRequest {
 
                     } else {//二要素数据缺失,无法进行人证比对, 此时不用比对,直接成功
                         AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,开启预检查:刷码或手输证件号返回无用户信息二要素,默认不比对,直接成功 " + name + "-" + idNumber + ",通知调度中心处理");
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                     }*/
 
                     //百度人脸的人证比对必须要有照片
@@ -1106,13 +1111,13 @@ public class HttpRequest {
 
                     } else {//照片数据缺失,无法进行人证比对, 此时不用比对,直接成功
                         AppLogUtils.i(true, "核验接口返回处理中心-预检查", "开启人证比对,通用模式:刷码或手输证件号,接口返回没有照片,此时不需要人证比对");
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                     }
 
 
                 } else {
                     AppLogUtils.i(true, "核验接口返回处理中心-预检查", "不开启人证比对,通用模式:核验接口已返回数据,通知调度中心处理");
-                    ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                    BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                 }
             }
         });
@@ -1180,7 +1185,7 @@ public class HttpRequest {
         String finalAvatarBase64Str = jsonObject.getString("avatarBase64");
         if (StringIsNull.IsStringNull(ConfigManager.getAuthenticationBeanListBean().getServiceAddress())) {
             FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "商户平台地址为空", 500, "商户平台地址为空");
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             return;
         }
         //判断商户平台密钥是否为空
@@ -1202,7 +1207,7 @@ public class HttpRequest {
                             decryptBean.setMsg(ConfigManager.getAuthenticationBeanListBean().getTenantFailedTips());
                         }
                         FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", decryptBean.getMsg(), 500, decryptBean.getMsg());
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
                     if (!EncryptionAndDecryptionUtil.checkSign(
@@ -1211,7 +1216,7 @@ public class HttpRequest {
                             decryptBean.getData().getSign(),
                             String.valueOf(decryptBean.getData().getReqTimestamp()))) {
                         FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "商户接口验签出错", 500, "商户接口验签出错");
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
 
@@ -1220,7 +1225,7 @@ public class HttpRequest {
                             decryptBean.getData().getBizContent());
                     if (StringIsNull.IsStringNull(decryptData)) {
                         FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "商户平台解密失败", 500, "商户平台解密失败");
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                         return;
                     }
                     alipayUserInfoBean = ConfigManager.getGson().fromJson(decryptData, AlipayUserInfoBean.class);
@@ -1233,7 +1238,7 @@ public class HttpRequest {
                         alipayUserInfoBean.setOpenVoiceMsg("商户平台请求失败");
                     }
                     FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", alipayUserInfoBean.getErrmsg(), 500, alipayUserInfoBean.getErrmsg());
-                    ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                    BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                     return;
                 }
                 String Base64 = "";
@@ -1443,7 +1448,7 @@ public class HttpRequest {
                         msg = "特殊码换三要素接⼝请求失败";
                     }
                     FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", msg, 500, msg);
-                    ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                    BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                     return;
                 }
                 String name = StringIsNull.ReturnString(specialCodeTradeThreeElementsBean.getData().getCertName());

+ 1 - 0
app/src/main/java/com/hanghui/senic/presenter/MyPresenter.java

@@ -220,6 +220,7 @@ public class MyPresenter<T> implements ContractInterface.PAuthentication, Contra
             @Override
             public void doAfterResponse(Object o) {
                 AppLogUtils.i(true, "接口请求_上报应用状态接口", "应用状态数据返回  " + o);
+                MyAppliction.setAppHeartbeatTime(System.currentTimeMillis());
             }
         });
     }

+ 10 - 9
app/src/main/java/com/hanghui/senic/service/usbserialdemo/utile/ConfigManager.java

@@ -29,6 +29,7 @@ import com.common.pos.api.util.PosUtil;
 import com.google.gson.Gson;
 import com.hanghui.senic.MyAppliction;
 import com.hanghui.senic.R;
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ClickButtonFloatView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.bean.AuthenticationBean;
@@ -1050,7 +1051,7 @@ public class ConfigManager {
         if (ConfigManager.getAuthenticationBean().getData().get(0).isOpenAgeLimit()) {//是否开启年龄限制
             if (StringIsNull.IsStringNull(idNumber)) {
                 FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "未获取有效身份证号码", 500, "未获取有效身份证号码");
-                ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                 return true;
             }
             //判断年龄是否在限定区间内
@@ -1058,7 +1059,7 @@ public class ConfigManager {
             if (age == -1) {
                 AppLogUtils.e(true, "年龄限制开启", "开启年龄限制,未获取有效身份证号");
                 FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", "未获取有效身份证号码", 500, "未获取有效身份证号码");
-                ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                 return true;
             }
             if (age >= ConfigManager.getAuthenticationBean().getData().get(0).getLimitSectionStart() &&
@@ -1083,7 +1084,7 @@ public class ConfigManager {
                 }
                 FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError_B", ConfigManager.getAuthenticationBean().getData().get(0).getAgeForbidText(),
                         500, ConfigManager.getAuthenticationBean().getData().get(0).getAgeForbidText());
-                ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
 
                 return true;
             }
@@ -1100,11 +1101,11 @@ public class ConfigManager {
         if (!ConfigManager.getAuthenticationBean().getData().get(0).isUseLinkage()) {
             AppLogUtils.i(true, "核验接口关闭 ", "联动平台关闭,展示本地结果页");
             if (ConfigManager.isPreCheck()){
-                federatedPlatformsResponseBean = ResultViewManager.getInstance().setShowLocalOutcomeBean();
+                federatedPlatformsResponseBean = BaiDuFaceView.getInstance().setShowLocalOutcomeBean();
                 DataReturns.getInstance().doDataReturns(federatedPlatformsResponseBean, null);
             }else {
-                ResultViewManager.getInstance().removeRequestingRunnable();
-                ResultViewManager.getInstance().setShowLocalOutcome();
+                BaiDuFaceView.getInstance().removeRequestingRunnable();
+                BaiDuFaceView.getInstance().setShowLocalOutcome();
             }
             return true;
         }
@@ -1120,7 +1121,7 @@ public class ConfigManager {
         if (StringIsNull.IsStringNull(ConfigManager.getAuthenticationBean().getData().get(0).getLinkageAds())) {
             AppLogUtils.i(true, "核验接口请求中心 ", "核票接口地址为空");
             federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "核验接口地址为空", 500, "核验接口地址为空");
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             return true;
         }
         return false;
@@ -1138,7 +1139,7 @@ public class ConfigManager {
                         StringIsNull.IsStringNull(ConfigManager.getAuthenticationBean().getData().get(0).getCheckVerifyEncryptAppSecret()))
         ) {
             FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "核验接口密钥未配置", 500, "核验接口密钥未配置");
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             return true;
         }
         return false;
@@ -1156,7 +1157,7 @@ public class ConfigManager {
                         StringIsNull.IsStringNull(ConfigManager.getAuthenticationBean().getData().get(0).getTenantEncryptAppKey()))
         ) {
             FederatedPlatformsResponseBean federatedPlatformsResponseBean = DataManager.getInstance().getErrorOutcome("LocalError", "商户平台密钥未配置", 500, "商户平台密钥未配置");
-            ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+            BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             return true;
         }
         return false;

+ 3 - 3
app/src/main/java/com/hanghui/senic/service/usbserialdemo/utile/NFCOnlineIdCard/ReadCardManager.java

@@ -30,9 +30,9 @@ public class ReadCardManager {
      * 端口:9699
      * envCode:26814
      */
-    public static String appid = "TESTID20210809203718";
-    public static String ip = "es-test.eidlink.com";
-    public static int envCode = 26814;
+    public static String appid = "01SJ2211250857001232";
+    public static String ip = "es.eidlink.com";
+    public static int envCode = 52302;
     public static int port = 9699;
 
     /**

+ 3 - 2
app/src/main/java/com/hanghui/senic/service/usbserialdemo/utile/OcrThread.java

@@ -7,6 +7,7 @@ import android.os.Environment;
 import android.util.Log;
 import android.widget.ImageView;
 
+import com.hanghui.senic.activity.view.BaiDuFaceView;
 import com.hanghui.senic.activity.view.ResultViewManager;
 import com.hanghui.senic.bean.FederatedPlatformsResponseBean;
 import com.hanghui.senic.common.AppHandler;
@@ -118,7 +119,7 @@ public class OcrThread extends Thread {
                         federatedPlatformsResponseBean.setData(dataDTO);
                         federatedPlatformsResponseBean.setMsg("证件正在识别中");
                         PassportController.getInstance().isPassportIn = false;
-                        ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                        BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
                     }
                 }, 2000);
             } else {
@@ -131,7 +132,7 @@ public class OcrThread extends Thread {
                 dataDTO.setIsOpen(-1);
                 federatedPlatformsResponseBean.setData(dataDTO);
                 federatedPlatformsResponseBean.setMsg("证件正在识别中");
-                ResultViewManager.getInstance().addIsvResultView(federatedPlatformsResponseBean);
+                BaiDuFaceView.getInstance().getPlatformsCod(federatedPlatformsResponseBean);
             }
 
             idCardAPI.SetIOStatus(5, 0);

+ 6 - 2
app/src/main/java/com/hanghui/senic/utils/ImageLoaderUtils.java

@@ -2,12 +2,14 @@ package com.hanghui.senic.utils;
 
 import android.app.Activity;
 import android.content.Context;
+import android.util.Log;
 import android.widget.ImageView;
 
 import androidx.annotation.DrawableRes;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.request.BaseRequestOptions;
+import com.hanghui.senic.R;
 
 /**
  * Description: $
@@ -21,7 +23,10 @@ public class ImageLoaderUtils {
     public static void loadImage(Object imageUrl, ImageView imageView){
         loadImage(imageUrl,imageView,null);
     }
-
+    public static void loadImageColor( ImageView imageView){
+        int colorResId = R.color.f000000;
+        Glide.with(imageView.getContext()).load(colorResId).into(imageView);
+    }
     public static void loadImage(Object imageUrl, ImageView imageView, BaseRequestOptions requestOptions ){
         if(imageView ==null){
             return;
@@ -30,7 +35,6 @@ public class ImageLoaderUtils {
             return;
         }
 
-
         if (requestOptions == null) {
             loadNetworkPic(imageView.getContext(), imageUrl, imageView);
         } else {

+ 10 - 0
app/src/main/res/layout/activity_baiduface_preview.xml

@@ -5,6 +5,11 @@
     android:id="@+id/rootLayout"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
+    <ImageView
+        android:id="@+id/iv_bg_image"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:scaleType="fitXY"/>
 
 
     <!-- 相机预览页面 -->
@@ -27,6 +32,11 @@
     <include
         layout="@layout/layout_bottom"/>
 
+    <!--结果页-->
+    <include
+        layout="@layout/window_outcome_floating_pages" />
+    <include
+        layout="@layout/window_outcome_general" />
 
     <!-- debug按钮 -->
     <TextView

+ 7 - 2
app/src/main/res/layout/layout_bottom.xml

@@ -26,7 +26,9 @@
         android:layout_below="@id/tv_status"
         android:layout_marginTop="@dimen/dp_10"
         android:background="@drawable/shape_bottom_info"
-        android:padding="@dimen/dp_20">
+        android:paddingTop="@dimen/dp_20"
+        android:paddingLeft="@dimen/dp_20"
+        android:paddingBottom="@dimen/dp_20">
 
         <!-- 各个外设的状态图标 -->
         <LinearLayout
@@ -86,8 +88,9 @@
         <!-- 设置 -->
         <RelativeLayout
             android:id="@+id/settingLayout"
-            android:layout_width="@dimen/dp_55"
+            android:layout_width="@dimen/dp_75"
             android:layout_height="@dimen/dp_60"
+            android:paddingRight="@dimen/dp_20"
             android:layout_alignParentRight="true">
 
             <ImageView
@@ -116,6 +119,7 @@
             android:layout_height="wrap_content"
             android:layout_below="@+id/tv_time"
             android:layout_centerHorizontal="true"
+            android:layout_marginRight="@dimen/dp_20"
             android:layout_marginTop="@dimen/dp_20">
 
             <TextView
@@ -148,6 +152,7 @@
             android:layout_centerHorizontal="true"
             android:layout_marginTop="@dimen/dp_5"
             android:text="CTID提供技术支持"
+            android:layout_marginRight="@dimen/dp_20"
             android:textColor="@color/white"
             android:textSize="@dimen/sp_20" />
 

+ 3 - 1
app/src/main/res/layout/window_outcome_floating_pages.xml

@@ -4,7 +4,9 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:id="@+id/baiDuView_FloatingResultPageFrame"
+    android:orientation="vertical"
+    android:visibility="gone">
 
     <ImageView
         android:id="@+id/OutcomeActivity_bgImagee"

+ 3 - 1
app/src/main/res/layout/window_outcome_general.xml

@@ -4,7 +4,9 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:id="@+id/baiDuView_GeneralResultPageFrame"
+    android:orientation="vertical"
+    android:visibility="gone">
 
     <ImageView
         android:id="@+id/OutcomeActivity_bgImagee"

+ 31 - 21
datalibrary/src/main/java/com/example/datalibrary/api/FaceApi.java

@@ -225,6 +225,13 @@ public class FaceApi {
         if (TextUtils.isEmpty(userId)) {
             return null;
         }
+        if (users != null && users.containsKey(userId)) {
+            User user = users.get(userId);
+            if (user != null&&user.getId()!=0) {
+                return user;
+            }
+
+        }
         return DBManager.getInstance().queryUser(userId);
     }
 
@@ -233,33 +240,36 @@ public class FaceApi {
      * 更新用户
      */
     public boolean userUpdate(User user) {
-        if (user == null) {
-            return false;
-        }
+        synchronized (DBManager.class) {
+            if (user == null) {
+                return false;
+            }
 
-        boolean ret = DBManager.getInstance().updateUser(user);
+            boolean ret = DBManager.getInstance().updateUser(user);
 
-        if(ret) {
-            String userId = user.getUserId();
-            int size = users.size();
+            if (ret) {
+                String userId = user.getUserId();
+                int size = users.size();
 
-            //先从内存中寻找
-            for (String key : users.keySet()) {
-                User curUser = users.get(key);
-                if (curUser == null) {
-                    continue;
-                }
-                if (userId != null && userId.equals(curUser.getUserId())) {
-                    curUser.setUserName(user.getUserName());
-                    curUser.setImageName(user.getImageName());
-                    curUser.setUserInfo(user.getUserInfo());
-                    curUser.setFeature(user.getFeature());
-                    users.put(curUser.getUserId(),curUser);
+                //先从内存中寻找
+                for (String key : users.keySet()) {
+                    User curUser = users.get(key);
+                    if (curUser == null) {
+                        continue;
+                    }
+                    if (userId != null && userId.equals(curUser.getUserId())) {
+                        curUser.setUserName(user.getUserName());
+                        curUser.setImageName(user.getImageName());
+                        curUser.setUserInfo(user.getUserInfo());
+                        curUser.setFeature(user.getFeature());
+                        curUser.setUserInfo(user.getUserInfo());
+                        users.put(curUser.getUserId(), curUser);
+                    }
                 }
             }
-        }
 
-        return ret;
+            return ret;
+        }
     }
 
     /**

+ 64 - 60
datalibrary/src/main/java/com/example/datalibrary/db/DBManager.java

@@ -257,38 +257,40 @@ public class DBManager {
      * 添加用户
      */
     public boolean addUser(User user) {
-        if (mDBHelper == null) {
-            return false;
-        }
-        try {
-            mDatabase = mDBHelper.getWritableDatabase();
-            beginTransaction(mDatabase);
+        synchronized (DBManager.class) {
+            if (mDBHelper == null) {
+                return false;
+            }
+            try {
+                mDatabase = mDBHelper.getWritableDatabase();
+                beginTransaction(mDatabase);
 
-            ContentValues cv = new ContentValues();
-            cv.put("user_id", user.getUserId());
-            cv.put("user_name", user.getUserName());
-            cv.put("user_info", user.getUserInfo());
-            cv.put("group_id", GROUP_ID);
-            cv.put("face_token", user.getFaceToken());
-            cv.put("feature", user.getFeature());
-            cv.put("image_name", user.getImageName());
-            cv.put("ctime", System.currentTimeMillis());
-            cv.put("update_time", System.currentTimeMillis());
+                ContentValues cv = new ContentValues();
+                cv.put("user_id", user.getUserId());
+                cv.put("user_name", user.getUserName());
+                cv.put("user_info", user.getUserInfo());
+                cv.put("group_id", GROUP_ID);
+                cv.put("face_token", user.getFaceToken());
+                cv.put("feature", user.getFeature());
+                cv.put("image_name", user.getImageName());
+                cv.put("ctime", System.currentTimeMillis());
+                cv.put("update_time", System.currentTimeMillis());
 
-            long rowId = mDatabase.insert(DBHelper.TABLE_USER, null, cv);
-            if (rowId < 0) {
+                long rowId = mDatabase.insert(DBHelper.TABLE_USER, null, cv);
+                if (rowId < 0) {
+                    return false;
+                }
+
+                setTransactionSuccessful(mDatabase);
+                Log.i(TAG, "insert user success:" + rowId);
+            } catch (Exception e) {
+                Log.e(TAG, "addUser e = " + e.getMessage());
                 return false;
+            } finally {
+                endTransaction(mDatabase);
             }
-
-            setTransactionSuccessful(mDatabase);
-            Log.i(TAG, "insert user success:" + rowId);
-        } catch (Exception e) {
-            Log.e(TAG, "addUser e = " + e.getMessage());
-            return false;
-        } finally {
-            endTransaction(mDatabase);
+            return true;
         }
-        return true;
     }
 
     /**
@@ -402,44 +404,46 @@ public class DBManager {
      * 查询用户(根据userId)
      */
     public User queryUser(String userId) {
-        Cursor cursor = null;
+        synchronized (DBManager.class) {
+            Cursor cursor = null;
 
-        try {
-            if (mDBHelper == null) {
-                return null;
-            }
-            SQLiteDatabase db = mDBHelper.getReadableDatabase();
-            String where = "user_id = ? and group_id = ? ";
-            String[] whereValue = {userId, GROUP_ID};
-            cursor = db.query(DBHelper.TABLE_USER, null, where, whereValue, null, null, null);
-            if (cursor != null && cursor.getCount() > 0 && cursor.moveToNext()) {
-                int dbId = cursor.getInt(cursor.getColumnIndex("_id"));
-                String userName = cursor.getString(cursor.getColumnIndex("user_name"));
-                long updateTime = cursor.getLong(cursor.getColumnIndex("update_time"));
-                long ctime = cursor.getLong(cursor.getColumnIndex("ctime"));
-                String userInfo = cursor.getString(cursor.getColumnIndex("user_info"));
-                String faceToken = cursor.getString(cursor.getColumnIndex("face_token"));
-                byte[] feature = cursor.getBlob(cursor.getColumnIndex("feature"));
-                String imageName = cursor.getString(cursor.getColumnIndex("image_name"));
+            try {
+                if (mDBHelper == null) {
+                    return null;
+                }
+                SQLiteDatabase db = mDBHelper.getReadableDatabase();
+                String where = "user_id = ? and group_id = ? ";
+                String[] whereValue = {userId, GROUP_ID};
+                cursor = db.query(DBHelper.TABLE_USER, null, where, whereValue, null, null, null);
+                if (cursor != null && cursor.getCount() > 0 && cursor.moveToNext()) {
+                    int dbId = cursor.getInt(cursor.getColumnIndex("_id"));
+                    String userName = cursor.getString(cursor.getColumnIndex("user_name"));
+                    long updateTime = cursor.getLong(cursor.getColumnIndex("update_time"));
+                    long ctime = cursor.getLong(cursor.getColumnIndex("ctime"));
+                    String userInfo = cursor.getString(cursor.getColumnIndex("user_info"));
+                    String faceToken = cursor.getString(cursor.getColumnIndex("face_token"));
+                    byte[] feature = cursor.getBlob(cursor.getColumnIndex("feature"));
+                    String imageName = cursor.getString(cursor.getColumnIndex("image_name"));
 
-                User user = new User();
-                user.setId(dbId);
-                user.setUserId(userId);
-                user.setGroupId(GROUP_ID);
-                user.setUserName(userName);
-                user.setCtime(ctime);
-                user.setUpdateTime(updateTime);
-                user.setUserInfo(userInfo);
-                user.setFaceToken(faceToken);
-                user.setFeature(feature);
-                user.setImageName(imageName);
+                    User user = new User();
+                    user.setId(dbId);
+                    user.setUserId(userId);
+                    user.setGroupId(GROUP_ID);
+                    user.setUserName(userName);
+                    user.setCtime(ctime);
+                    user.setUpdateTime(updateTime);
+                    user.setUserInfo(userInfo);
+                    user.setFaceToken(faceToken);
+                    user.setFeature(feature);
+                    user.setImageName(imageName);
 
-                return user;
+                    return user;
+                }
+            } finally {
+                closeCursor(cursor);
             }
-        } finally {
-            closeCursor(cursor);
+            return null;
         }
-        return null;
     }
 
     /**

+ 18 - 5
datalibrary/src/main/java/com/example/datalibrary/gatecamera/CameraPreviewManager.java

@@ -152,6 +152,7 @@ public class CameraPreviewManager implements SurfaceHolder.Callback , TextureVie
         if (mCamera != null) {
             try {
                 mCamera.stopPreview();
+                mCamera.setPreviewCallbackWithBuffer(null);
                 mCamera.setPreviewCallback(null);
                 mPreviewed = false;
                 mCamera.release();
@@ -212,16 +213,28 @@ public class CameraPreviewManager implements SurfaceHolder.Callback , TextureVie
             mCamera.setParameters(params);
             if (mTextureView != null){
                 try {
-                    mCamera.setPreviewCallback(new Camera.PreviewCallback() {
+                    byte[] buffer=new byte[460800];
+                    mCamera.addCallbackBuffer(buffer);
+                    mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
                         @Override
                         public void onPreviewFrame(byte[] bytes, Camera camera) {
-                          //  Log.i("______456","rgb摄像头预览数据"+bytes.length);
-                            if (mCameraDataCallback != null) {
-                                mCameraDataCallback.onGetCameraData(bytes, camera,
-                                        videoWidth, videoHeight);
+                            if(camera!=null) {
+                                camera.addCallbackBuffer(bytes);
+                                if (mCameraDataCallback != null) {
+                                    mCameraDataCallback.onGetCameraData(bytes, camera,
+                                            videoWidth, videoHeight);
+                                }
                             }
                         }
                     });
+
+                    /*mCamera.setPreviewCallback(new Camera.PreviewCallback() {
+                        @Override
+                        public void onPreviewFrame(byte[] bytes, Camera camera) {
+                          //  Log.i("______456","rgb摄像头预览数据"+bytes.length);
+
+                        }
+                    });*/
                     mCamera.setPreviewTexture(mSurfaceTexture);
 
                     mCamera.startPreview();

+ 1 - 0
datalibrary/src/main/java/com/example/datalibrary/gl/view/GlMantleSurfacView.java

@@ -12,6 +12,7 @@ import android.os.Build;
 import android.os.Handler;
 import android.os.Looper;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.TextureView;
 import android.widget.RelativeLayout;
 

+ 22 - 24
datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java

@@ -4,14 +4,9 @@ import static com.example.datalibrary.model.GlobalSet.FEATURE_SIZE;
 
 import android.content.Context;
 import android.graphics.Bitmap;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
 import android.text.TextUtils;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
-
 import com.baidu.idl.main.facesdk.FaceAuth;
 import com.baidu.idl.main.facesdk.FaceCrop;
 import com.baidu.idl.main.facesdk.FaceDetect;
@@ -43,7 +38,6 @@ import com.hanghui.senic.lib_base.event.LedLightEvent;
 
 import org.greenrobot.eventbus.EventBus;
 
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -214,6 +208,11 @@ public class FaceSDKManager {
         }
     }
 
+    public void cleanSearch(){
+        synchronized (faceModel.getFaceSearch()) {
+            faceModel.getFaceSearch().featureClear();
+        }
+    }
     private void setFail(LivenessModel livenessModel) {
         Log.e("faceId", livenessModel.getFaceInfo().faceID + "");
         if (failNumber >= 2) {
@@ -1148,27 +1147,28 @@ public class FaceSDKManager {
         livenessModel.setRgbDetectDuration(System.currentTimeMillis() - startDetectTime);
         // track
         FaceInfo[] faceInfos = getTrackCheck(rgbInstance);
-
         // 检测结果判断
         if (faceInfos == null || faceInfos.length == 0) {
-
-            if (bdNirFaceImageConfig != null && bdFaceCheckConfig != null) {
-                BDFaceImageInstance nirInstance = getBdImage(bdNirFaceImageConfig, bdFaceCheckConfig.darkEnhance);
-                // track
-                FaceInfo[] nirFaceinfos = getTrackCheck(nirInstance);
-
-                if (nirFaceinfos != null && nirFaceinfos.length > 0) {
-                    // 最优人脸控制
-                    float bestImageScore = nirFaceinfos[0].bestImageScore * 100;
-                    if (bestImageScore > 90
-                            && onQualityCheck(nirFaceinfos[0], bdFaceCheckConfig.bdQualityConfig,
-                            null)) {
-                        EventBus.getDefault().post(new LedLightEvent(true, 0));
+                if(bdNirFaceImageConfig!=null){
+                    BDFaceImageInstance nirInstance = getBdImage(bdNirFaceImageConfig, bdFaceCheckConfig.darkEnhance);
+                    // track
+                    FaceInfo[] nirFaceinfos = getTrackCheck(nirInstance);
+
+                    if (nirFaceinfos != null && nirFaceinfos.length > 0) {
+                        // 最优人脸控制
+                        float bestImageScore = nirFaceinfos[0].bestImageScore * 100;
+                        if (bestImageScore > 80
+                                && onQualityCheck(nirFaceinfos[0], bdFaceCheckConfig.bdQualityConfig,
+                                null)) {
+                            EventBus.getDefault().post(new LedLightEvent(true, 0));
+                        }
                     }
+                    nirInstance.destory();
+
                 }
-                nirInstance.destory();
 
-            }
+
+
             detectListener.onDetectFail();
             return;
         }
@@ -1228,11 +1228,9 @@ public class FaceSDKManager {
             // 光照结果过滤
             float illum = faceInfo.illum;
             Log.e("illum", "illum = " + illum);
-            Log.e("illum2", "illum2 = " + bdQualityConfig.illum);
             if (illum < bdQualityConfig.illum) {
                 faceDetectCallBack.onTip(-1, "图片光照不通过");
                 stringBufferDetected.append("图片光照不通过");
-
             }
 
 

+ 1 - 0
registerlibrary/src/main/java/com/baidu/idl/main/facesdk/registerlibrary/user/activity/BatchImportActivity.java

@@ -352,6 +352,7 @@ public class BatchImportActivity extends BaseActivity implements View.OnClickLis
             // 设置数据库状态
 //            ShareManager.getInstance(mContext).setDBState(false);
             FaceApi.getInstance().userClean();
+            FaceSDKManager.getInstance().cleanSearch();
             if (FaceApi.getInstance().getAllUserList() != null &&
                     FaceApi.getInstance().getAllUserList().size() > 0){
                 mRelativeShow.setVisibility(View.VISIBLE);