package com.basic.security.activity; import android.content.Intent; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.SystemClock; import android.view.WindowManager; import android.widget.LinearLayout; import com.alfeye.a1io.A1IoDevBaseUtil; import com.alfeye.a1io.A1IoDevManager; import com.alfeye.a1io.DeviceControl; import com.alfeye.readcardlib.readcard.ReadCardUtil; import com.alfeye.seriallib.Listener.OnDistanceListener; import com.alfeye.seriallib.Listener.OnRadarDistanceListener; import com.alfeye.seriallib.SerialDevice.DistanceSensor; import com.alfeye.seriallib.SerialDevice.RadarDistanceSensor; import com.alfeye.seriallib.android_serialport_api.SerialPortFinder; import com.basic.security.R; import com.basic.security.activity.helper.MaLoggedInTimeoutToLogout; import com.basic.security.base.BaseApplication; import com.basic.security.manager.DatabaseManager; import com.basic.security.manager.IdCardManager; import com.basic.security.manager.impl.cblite.DeviceManager; import com.basic.security.manager.impl.sqlite.SlDeviceManager; import com.basic.security.receiver.WebRtcBroadCastReceiver; import com.basic.security.service.KeepLifeService; import com.basic.security.service.UpgradeAppService; import com.basic.security.utils.Constants; import com.basic.security.utils.KeyboardUtil; import com.basic.security.utils.MultipartUtilityV2; import com.basic.security.utils.NetUtil; import com.basic.security.utils.PermissionHelper; import com.basic.security.utils.ProcessImageAndDrawResults; import com.basic.security.utils.ToastUtil; import com.basic.security.utils.socket.RelayServerUtil2; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static com.basic.security.utils.Constants.isNewIDCardReader; @EActivity(R.layout.activity_main) public class MainActivity extends MaLoggedInTimeoutToLogout { public static long lastTimeDetectedFace = 0; public static boolean faceDbInitComplete = false; public static RadarDistanceSensor distanceSensor; public boolean mainActivityInitComplete = false; //1是usb模式 0是串口模式 5.1.1 // public ReadUtil readUtil; //新的pad 白色 身份证读卡器 public ReadCardUtil readCardUtil; public A1IoDevBaseUtil basUtil; @ViewById LinearLayout id111; long startTime = 0; private List integers = new ArrayList<>(); // private DistanceSensor sr04Device; private String[] allDevices; /** * 距离感应器 */ private boolean isOpen = false; //最大缓存数量 private int MaxCacheNumber = 5; //开灯距离 private int MIN_SRDEV = 1000; //关灯距离 private int SRDEVNO = 1400; private SensorManager sensorManager; private Sensor lightSensor; public MainActivity getActivity() { return this; } @Override protected void onDestroy() { super.onDestroy(); if (Constants.useAlf) { basUtil.closeLED(); basUtil.closeDIST(); distanceSensor.close(); // sr04Device.close(); } } public boolean needLight() { return Constants.useLight && (currentFragment == fragment_su_auto_wait_face || currentFragment == fragment_su_logged_wait_face || currentFragment == fragment_su_logged_nic_wait_face || currentFragment == fragment_su_logged_ic_wait_face || currentFragment == fragment_door_access_result || currentFragment == fragment_admin_face_login || currentFragment == fragment_home || currentFragment == fragment_account_setting); } int lightStrong = 10; //开灯 public synchronized void serialDeviceOpenLamp(int distance) { // System.out.println("MainActivity.serialDeviceOpenLamp 0 " + needLight()); if (needLight()) { // System.out.println("MainActivity.serialDeviceOpenLamp 1 " + needLight()); if (distance != 0) { integers.add(distance); if (integers.size() >= MaxCacheNumber) { Collections.sort(integers); if (integers.get(MaxCacheNumber - 1) <= MIN_SRDEV) { lastTimeDetectedFace = System.currentTimeMillis(); if (!isOpen) { isOpen = true; basUtil.openLED(100); // BaseApplication.getApplication().executorService.execute(()->{ // try { // while (isOpen) { // lightStrong += 4; // if (lightStrong > 100) // break; // basUtil.openLED(lightStrong); // SystemClock.sleep(100); // } // } catch (Exception e) { // e.printStackTrace(); // } // // }); basUtil.openIRDA(); } } if (integers.get(MaxCacheNumber - 1) <= MIN_SRDEV && !isOpen) { ProcessImageAndDrawResults.shouldExtractFeatureFirstTimeInWaitFace = 2; if (currentFragment == fragment_home) { showFragment(fragment_su_auto_wait_face); } } else if (integers.get(0) >= SRDEVNO && isOpen ) { } else { } integers.clear(); if (System.currentTimeMillis() - lastTimeDetectedFace > 2 * 1000) { if (isOpen) { isOpen = false; basUtil.closeLED(); basUtil.closeIRDA(); } } } } else { integers.clear(); } } if (System.currentTimeMillis() - lastTimeDetectedFace > 2 * 1000) { if (isOpen) { isOpen = false; basUtil.closeLED(); basUtil.closeIRDA(); } } } @AfterViews protected void afterViews() { BaseApplication.getApplication().executorService.execute(()->{ while (true) { try { serialDeviceOpenLamp(0); SystemClock.sleep(1*1000); } catch (Exception e) { e.printStackTrace(); } } }); BaseApplication.getApplication().executorService.execute(new Runnable() { @Override public void run() { try { MultipartUtilityV2.uploadCrashDirectory(); } catch (Exception e) { e.printStackTrace(); } } }); DatabaseManager.setCustomDatabaseFiles(this); String ip = NetUtil.getIPAddress(true); Constants.erlangLocalNode = SlDeviceManager.getDeviceId() + "@" + ip; Constants.deviceId = DeviceManager.getDeviceId(); if (Constants.useAlf) { distanceSensor = new RadarDistanceSensor("/dev/ttyUSB0", new OnRadarDistanceListener() { @Override public void onRevData(final int data) { // System.out.println("MainActivity.onRevData " + data); if (data > 0) { serialDeviceOpenLamp(data); } else { serialDeviceOpenLamp(-data); } // openLED(); // runOnUiThread(new Runnable() { // @Override // public void run() { // stringBuffer.insert(0, "雷达测距: " + data + "\n"); // if (stringBuffer.length() > 1200) { // stringBuffer.delete(800, stringBuffer.length()); // } // tvDisTxt.setText(stringBuffer.toString()); // } // }); } @Override public void onCmdResult(final String result) { runOnUiThread(new Runnable() { @Override public void run() { if (result.contains("OK") || result.contains("TH")) { System.out.println("MainActivity.run " + result); // tvSetResultTxt.append(result); } } }); } }); distanceSensor.open(); // sr04Device = new DistanceSensor("/dev/ttyUSB0", new Sr04DeviceDate()); allDevices = new SerialPortFinder().getAllDevicesPath(); //获取SensorManager对象 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); //获取Sensor对象 lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); sensorManager.registerListener(new MySensorListener(), lightSensor, SensorManager.SENSOR_DELAY_NORMAL); basUtil = A1IoDevManager.initIOManager(); basUtil.openDIST(); // boolean open = sr04Device.open(); basUtil.closeLED(); basUtil.closeIRDA(); } if (!PermissionHelper.hasWriteStoragePermission(this)) { PermissionHelper.requestWriteStoragePermission(this); } getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 保持屏幕常亮 hideSystemUIThread(); addFragments(); addCameraToFragment(); addVideoViewToFragment(); addToolbarButtonsToFragment(); addTimeoutToBlank(); addIdCardPhoneComponent(); addBackgroundAndBorderComponent(); addCameras(); setUpClickHook(); addFaceComponents(); addSystemSettingTabs(); addSystemSettingHintTabs(); addPersonManagerComponents(); logoutChecker(); hideOneFragment(fragment_menu); hideOneFragment(fragment_person_identity); hideOneFragment(fragment_face_list); hideOneFragment(fragment_face_detail); hideOneFragment(fragment_system_setting_tabs); hideOneFragment(fragment_su_auto_ic_wait_phone); hideOneFragment(fragment_su_logged_ic_wait_idcard); hideOneFragment(fragment_su_logged_ic_compare_success); hideOneFragment(fragment_background_and_border); showFragment(fragment_home); mainActivityInitComplete = true; checkDeviceId(); // DeviceControl.sendInformationScreen(this, false); // DeviceControl.hideNavigationBar(this, true); // com.basic.security.utils.DeviceControl.devicesTatusbar(this, false); stopService(new Intent(this, KeepLifeService.class)); startService(new Intent(this, KeepLifeService.class)); stopService(new Intent(this, UpgradeAppService.class)); startService(new Intent(this, UpgradeAppService.class)); // System.out.println("MainActivity.afterViews"); if (Constants.useAlf) { DeviceControl.setSystemLauncher(BaseApplication.getApplication(), "com.basic.security"); DeviceControl.configCameraHdr(BaseApplication.getApplication(), true); } if (Constants.useAlf) { RelayServerUtil2.startOpenDoorThread(); } // WebRtcBroadCastReceiver webRtcBroadCastReceiver = new WebRtcBroadCastReceiver(); // IntentFilter intentFilter = new IntentFilter(); // intentFilter.addAction("video.call.status"); // registerReceiver(webRtcBroadCastReceiver, intentFilter); // new ANRWatchDog().start(); } @Override protected void onResume() { super.onResume(); WebRtcBroadCastReceiver.webRtcClientConnected = false; WebRtcBroadCastReceiver.webRtcServerStarted = false; // System.out.println("MainActivity.onResume"); if (Constants.needIdCardModule) { Intent intent1 = new Intent(); intent1.setPackage("com.basic.project.idcardservice"); intent1.setAction("com.basic.read.IDCard"); intent1.putExtra("type", "start_service"); intent1.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); startService(intent1); } } @Override protected void onPause() { super.onPause(); // System.out.println("MainActivity.onPause"); KeyboardUtil.hideSoftKeyboard(); } @Override protected void onStop() { super.onStop(); // System.out.println("MainActivity.onStop"); // exitApp(); } @Override public void onBackPressed() { long currentTime = System.currentTimeMillis(); if ((currentTime - startTime) >= 2000) { ToastUtil.show("再按一次退出"); startTime = currentTime; } else { // ErlangProcess.stopErlangProcess(); exitApp(); } } private void exitApp() { if (Constants.needIdCardModule) { if (isNewIDCardReader) { if (readCardUtil != null) { readCardUtil.stopReadCard(); readCardUtil.destroy(); } } else { IdCardManager.unRegisterBroadcast(this); } } finish(); System.exit(0); } public void upgradeAppThread() { // while(true) { // try { // // DeviceControl.startInstallApk( // BaseApplication.getApplication(), // "com.basic.security", // "/sdcard/download/"+Constants.updateApkFileName, // true, // true // ); // } catch (Exception e) { // e.printStackTrace(); // } // SystemClock.sleep(5000); // } } public boolean needCopyCameraData() { if ( // AccountManager.adminLoggedIn() currentFragment == fragment_su_logged_wait_face || currentFragment == fragment_su_logged_ic_wait_face || currentFragment == fragment_su_logged_nic_wait_face ) { // System.out.println("MainActivity.needCopyCameraData true"); return true; } else { // System.out.println("MainActivity.needCopyCameraData false"); return false; } } public class Sr04DeviceDate implements OnDistanceListener { @Override public void onRevData(final int i1) { serialDeviceOpenLamp(i1); } } public class MySensorListener implements SensorEventListener { @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { } } }