新增人脸识别,隐患随手拍图标入口,人脸识别 手机端功能实现。

master
hwf453 1 year ago
parent 14b88ebee1
commit 8c12a6d167

@ -5,11 +5,11 @@ plugins {
android { android {
namespace 'com.rehome.dywoa' namespace 'com.rehome.dywoa'
compileSdk 34 compileSdk 35
defaultConfig { defaultConfig {
applicationId "com.rehome.dywoa" applicationId "com.rehome.dywoa"
minSdk 24 minSdk 24
targetSdk 34 targetSdk 35
versionCode 19 versionCode 19
versionName "1.1.8" versionName "1.1.8"
multiDexEnabled true multiDexEnabled true

@ -116,6 +116,10 @@
android:name=".ui.activity.FaceRecognitionActivity" android:name=".ui.activity.FaceRecognitionActivity"
android:exported="false" android:exported="false"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity
android:name=".ui.activity.FaceRecognitionAppActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.SisActivity" android:name=".ui.activity.SisActivity"
android:exported="false" android:exported="false"

@ -19,6 +19,7 @@ import com.tencent.bugly.crashreport.CrashReport;
import com.xuexiang.xui.XUI; import com.xuexiang.xui.XUI;
import com.yolanda.nohttp.NoHttp; import com.yolanda.nohttp.NoHttp;
import com.zhy.autolayout.config.AutoLayoutConifg; import com.zhy.autolayout.config.AutoLayoutConifg;
import org.litepal.LitePalApplication; import org.litepal.LitePalApplication;
import com.sangfor.sdk.SFUemSDK; import com.sangfor.sdk.SFUemSDK;
@ -57,8 +58,6 @@ public class App extends LitePalApplication {
String applicationId = App.getApplicationId(context); String applicationId = App.getApplicationId(context);
showLog(applicationId); showLog(applicationId);
//YhpcFragment
} }
@Override @Override
@ -70,17 +69,11 @@ public class App extends LitePalApplication {
/** /**
* sdk,attachBaseContextsdksdk * sdk,attachBaseContextsdksdk
*/
initSdk(base);
/**
* *
*/
GlobalListenerManager.getInstance().init(base);
/**
* dpsppx * dpsppx
*/ */
initSdk(base);
GlobalListenerManager.getInstance().init(base);
DpPxSpTransformUtil.init(getResources().getDisplayMetrics().density); DpPxSpTransformUtil.init(getResources().getDisplayMetrics().density);
} }
@ -118,20 +111,20 @@ public class App extends LitePalApplication {
case MODE_SUPPORT_MUTABLE: case MODE_SUPPORT_MUTABLE:
case MODE_VPN: { //只使用VPN功能场景 case MODE_VPN: { //只使用VPN功能场景
//Map<SFSDKExtras, String> extra = new HashMap<>(); //Map<SFSDKExtras, String> extra = new HashMap<>();
int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用 int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用
sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式 sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式
SFUemSDK.getInstance().initSDK(this, sdkMode,sdkFlags,null); SFUemSDK.getInstance().initSDK(this, sdkMode, sdkFlags, null);
break; break;
} }
case MODE_SANDBOX: { //只使用安全沙箱功能场景 case MODE_SANDBOX: { //只使用安全沙箱功能场景
int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用 int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用
SFUemSDK.getInstance().initSDK(this, sdkMode,sdkFlags,null); SFUemSDK.getInstance().initSDK(this, sdkMode, sdkFlags, null);
break; break;
} }
case MODE_VPN_SANDBOX: { //同时使用VPN功能+安全沙箱功能场景 case MODE_VPN_SANDBOX: { //同时使用VPN功能+安全沙箱功能场景
int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用 int sdkFlags = SFSDKFlags.FLAGS_HOST_APPLICATION; //表明是单应用或者是主应用
sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式 sdkFlags |= SFSDKFlags.FLAGS_VPN_MODE_TCP; //表明使用VPN功能中的TCP模式
SFUemSDK.getInstance().initSDK(this, sdkMode,sdkFlags,null); SFUemSDK.getInstance().initSDK(this, sdkMode, sdkFlags, null);
break; break;
} }
default: { default: {

@ -64,6 +64,8 @@ public class Contans {
public static final String YJYA_GET_ACTION_LIST = "api/emergency/getExecutionList"; public static final String YJYA_GET_ACTION_LIST = "api/emergency/getExecutionList";
//执行应急预案 //执行应急预案
public static final String YJYA_ACTION_URL = "api/emergency/updateExecutionToIdAndUser"; public static final String YJYA_ACTION_URL = "api/emergency/updateExecutionToIdAndUser";
//海康人脸识别
public static final String FACE_RECOGNITION_APP_URL = "api/app/face/faceRecognition";
public static String YHPC = "AJH/AJH_YHPCSC.ashx";//隐患排查 public static String YHPC = "AJH/AJH_YHPCSC.ashx";//隐患排查

@ -0,0 +1,798 @@
package com.rehome.dywoa.ui.activity;
import static com.google.mlkit.vision.face.FaceDetectorOptions.PERFORMANCE_MODE_FAST;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ImageFormat;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
//import android.hardware.Camera;
import android.graphics.RectF;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CaptureRequest;
import android.media.Image;
import android.media.ImageReader;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.text.TextUtils;
import android.util.Log;
import android.util.Size;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.TextureView;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.mlkit.vision.common.InputImage;
import com.google.mlkit.vision.face.Face;
import com.google.mlkit.vision.face.FaceDetection;
import com.google.mlkit.vision.face.FaceDetector;
import com.google.mlkit.vision.face.FaceDetectorOptions;
import com.rehome.dywoa.R;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import com.rehome.dywoa.base.BaseActivity;
import com.rehome.dywoa.utils.BitmapUtil;
import com.rehome.dywoa.utils.BitmapUtils;
public class FaceRecognitionAppActivity extends BaseActivity {
private LinearLayout ll_textureView;
private TextureView mTextureView;
private Surface mPreviewSurface;
private String mCameraId; // 后置相机id
private HandlerThread mBackgroundThread; // 处理回调结果的后台线程
private Handler mBackgroundHandler; // 处理回调结果的handler
private Size[] supportedSizes; // 相机支持的拍照分辨率大小
private CameraDevice mCameraDevice;
private CameraCaptureSession mCameraCaptureSession; // 相机会话
private CaptureRequest.Builder mPreviewBuilder;
private ImageReader mImageReader;
private int cameraPosition;//0代表前置摄像头1代表后置摄像头
//摄像头Id数组
private String[] cameraIdList;
private static final int CAMERA_REQUEST_CODE = 3;//请求码
private ImageView imgView;
private Timer timer;
private int faceRecognTricker = 1;
static boolean startFaceRecognition = true;
// private static final String[] permission = new String[]{
// Manifest.permission.CAMERA
// };
@Override
public int getContentViewID() {
return R.layout.activity_face_recognition_app;
}
@Override
public void initView() {
initToolbar("人脸识别", "切换摄像头", new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
}, new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cameraIdList != null && cameraIdList.length > 1) {
changeCamera();
} else {
showToast("当前设备不支持摄像头切换");
}
}
});
}
@Override
public void initData() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_face_recognition);
startFaceRecognition = true;
faceRecognTricker = 1;
// ll_textureView = findViewById(R.id.ll_textureView);
// mTextureView = new TextureView(this);
// ll_textureView.addView(mTextureView);
mTextureView = findViewById(R.id.textureView);
imgView = findViewById(R.id.iv_photo);
mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surfaceTexture, int i, int i1) {
mPreviewSurface = new Surface(surfaceTexture); // 得到用于预览的Surface
}
@Override
public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surfaceTexture, int i, int i1) {
}
@Override
public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surfaceTexture) {
return false;
}
@Override
public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surfaceTexture) {
}
});
// button.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
//
// // 1、配置人脸检测器
// FaceDetectorOptions faceDetectorOptions = new FaceDetectorOptions.Builder()
// .setPerformanceMode(PERFORMANCE_MODE_FAST)
// .build();
// //2、获取人脸检测器
// FaceDetector detector = FaceDetection.getClient(faceDetectorOptions);
//
// // 3、从资源中加载图片
// bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_photo);
// imgView.setImageBitmap(bitmap);
// InputImage image = InputImage.fromBitmap(bitmap, 0);
//
// // 4、处理图片
// detector.process(image)
// .addOnSuccessListener(new OnSuccessListener<List<Face>>() {
// @Override
// public void onSuccess(List<Face> faces) {
// //Log.e("TAG", "onSuccess: " + 1);
// showLog("onSuccess: " + 1);
// if (faces != null) {
// showLog(String.valueOf(faces.size()));
// }
//
// imgView.setImageBitmap(drawWithRectangle(faces));
// }
// })
// .addOnFailureListener(new OnFailureListener() {
// @Override
// public void onFailure(@NonNull Exception e) {
// Notice();
// }
// });
// }
// });
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
openFrontCamera();
}
}, 1000);
}
private void startFaceDetector(Bitmap rectBitmap, byte[] bytes) {
// 1、配置人脸检测器
FaceDetectorOptions faceDetectorOptions = new FaceDetectorOptions.Builder()
.setPerformanceMode(PERFORMANCE_MODE_FAST)
.build();
//2、获取人脸检测器
FaceDetector detector = FaceDetection.getClient(faceDetectorOptions);
// 3、从资源中加载图片
// bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_photo);
// imgView.setImageBitmap(bitmap);
InputImage image = InputImage.fromBitmap(rectBitmap, 0);
// 4、处理图片
detector.process(image)
.addOnSuccessListener(new OnSuccessListener<List<Face>>() {
@Override
public void onSuccess(List<Face> faces) {
//Log.e("TAG", "onSuccess: " + 1);
showLog("onSuccess: " + 1);
// imgView.setImageBitmap(rectBitmap);
// mTextureView.setVisibility(View.GONE);
if (faces != null && faces.size() > 0) {
showLog(String.valueOf(faces.size()));
//imgView.setImageBitmap(drawWithRectangle(faces,rectBitmap));
//imgView.setImageBitmap(rectBitmap);
showLog(String.valueOf(rectBitmap.getWidth()));
showLog(String.valueOf(rectBitmap.getHeight()));
//Bitmap bitmapResize = BitmapUtils.resizeBitmap(rectBitmap, rectBitmap.getWidth()/4, rectBitmap.getHeight()/4);
Bitmap bitmapResize = BitmapUtils.resizeBitmap(rectBitmap, 480, 640);
byte[] bitmapResizeByte = BitmapUtils.bitmapToByte(bitmapResize);
showLog(String.valueOf(bitmapResize.getWidth()));
showLog(String.valueOf(bitmapResize.getHeight()));
showLog(String.valueOf(bitmapResizeByte.length));
//imgView.setImageBitmap(bitmapResize);
imgView.setImageBitmap(drawWithRectangle(faces, bitmapResize));
//BitmapUtils.resizeBitmap(rectBitmap,rectBitmap.getWidth()/3, rectBitmap.getHeight()/3);
mTextureView.setVisibility(View.GONE);
//stopCamera();
Intent resultIntent = new Intent();
resultIntent.putExtra("FaceRecognition", bitmapResizeByte);
setResult(RESULT_OK, resultIntent);
finish();
} else {
startFaceRecognition = true;
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Notice();
startFaceRecognition = true;
}
});
}
//Bitmap保存成文件
private void saveBitmapToFile(Bitmap bitmap) {
// 创建一个输出流来写入图片数据
FileOutputStream fos = null;
try {
File file = new File("路径/文件名"); // 指定保存位置及文件名
fos = new FileOutputStream(file);
// 将Bitmap对象转换成字节数组并写入输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0 /* 无压缩 */, bos);
byte[] bytes = bos.toByteArray();
fos.write(bytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
protected void onResume() {
super.onResume();
faceRecognTricker = 1;
if (timer == null) {
try {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
faceRecognTricker++;
}
}, 1000, 1000);
// 设定指定的时间time,此处为10000毫秒
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
startFaceRecognition = true;
if (timer != null) {
timer.cancel();
}
stopPreview();
closeCaptureSession();
stopBackgroundThread();
closeCamera();
}
private void openFrontCamera() {
// 获取CameraManager
CameraManager cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
try {
// 获取相机列表
cameraIdList = cameraManager.getCameraIdList();
mCameraId = null;
for (String cameraId : cameraIdList) {
CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId); // 获取相机特性
if (cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT) { // 前置相机
cameraPosition = 0;
mCameraId = cameraId;
// 拍照支持的分辨率
supportedSizes = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(ImageReader.class);
break;
}
}
// 打开相机结果的回调函数(监听器)
CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice cameraDevice) {
mCameraDevice = cameraDevice;
// 回调函数的代码在子线程中执行所以不能直接发出Toast消息只能通过主线程发出
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
createCaptureSession();
//Toast.makeText(getBaseContext(), "Camera opened", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public void onDisconnected(@NonNull CameraDevice cameraDevice) {
mCameraDevice = null;
}
@Override
public void onError(@NonNull CameraDevice cameraDevice, int i) {
cameraDevice.close();
mCameraDevice = null;
}
};
// 启动处理返回结果的后台线程
if (mBackgroundHandler == null) startBackgroundThread();
// 打开相机需要的权限检查
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(FaceRecognitionAppActivity.this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
showToast("像机权限未授权,请先授权像机权限");
return;
}
// 打开相机
cameraManager.openCamera(mCameraId, stateCallback, mBackgroundHandler);
showLog(mCameraId);
//cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private void openBackCamera() {
// 获取CameraManager
CameraManager cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
try {
// 获取相机列表
cameraIdList = cameraManager.getCameraIdList();
mCameraId = null;
for (String cameraId : cameraIdList) {
CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId); // 获取相机特性
if (cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK) { // 后置相机
cameraPosition = 1;
mCameraId = cameraId;
// 拍照支持的分辨率
supportedSizes = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(ImageReader.class);
break;
}
}
// 打开相机结果的回调函数(监听器)
CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice cameraDevice) {
mCameraDevice = cameraDevice;
// 回调函数的代码在子线程中执行所以不能直接发出Toast消息只能通过主线程发出
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
createCaptureSession();
//Toast.makeText(getBaseContext(), "Camera opened", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public void onDisconnected(@NonNull CameraDevice cameraDevice) {
mCameraDevice = null;
}
@Override
public void onError(@NonNull CameraDevice cameraDevice, int i) {
cameraDevice.close();
mCameraDevice = null;
}
};
// 启动处理返回结果的后台线程
if (mBackgroundHandler == null) startBackgroundThread();
// 打开相机需要的权限检查
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(FaceRecognitionAppActivity.this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
showToast("像机权限未授权,请先授权像机权限");
return;
}
// 打开相机
cameraManager.openCamera(mCameraId, stateCallback, mBackgroundHandler);
showLog(mCameraId);
//cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private void startBackgroundThread() {
mBackgroundThread = new HandlerThread("CameraBackground");
mBackgroundThread.start();
mBackgroundHandler = new Handler(mBackgroundThread.getLooper());
}
private void stopBackgroundThread() {
if (mBackgroundThread != null) {
mBackgroundThread.quitSafely();
try {
mBackgroundThread.join();
mBackgroundThread = null;
mBackgroundHandler = null;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* CaptureSession
*/
private void createCaptureSession() throws CameraAccessException {
// 创建ImageReader
createImageReader();
// 接收图像数据的Surface
List<Surface> surfaceList = new ArrayList<Surface>();
surfaceList.add(mPreviewSurface);
surfaceList.add(mImageReader.getSurface());
// 处理创建结果的回调函数(监听器)
CameraCaptureSession.StateCallback sessionStateCallback = new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
mCameraCaptureSession = cameraCaptureSession;
// 回调函数的代码在子线程中执行所以不能直接发出Toast消息只能通过主线程发出
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
startPreview();
//Toast.makeText(getBaseContext(), "CaptureSession created", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
}
};
// 创建CameSession
mCameraDevice.createCaptureSession(surfaceList, sessionStateCallback, mBackgroundHandler);
}
/**
* ImageReader
*/
private void createImageReader() {
if (mImageReader == null) {
// 创建ImageReader最多保存5张图片
int width = supportedSizes[0].getWidth();
int height = supportedSizes[0].getHeight();
Log.i("app", "capture: size=" + width + ", " + height);
mImageReader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 1);
ImageReader.OnImageAvailableListener listener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader imageReader) {
//获取最新的一帧的Image
Image image = imageReader.acquireLatestImage();
//因为是ImageFormat.JPEG格式所以 image.getPlanes()返回的数组只有一个也就是第0个。
ByteBuffer byteBuffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
//ImageFormat.JPEG格式直接转化为Bitmap格式。
Bitmap temp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
//因为摄像机数据默认是横的所以需要旋转90度。
//Bitmap newBitmap = BitmapUtil.rotateBitmap(temp, 90);
//抛出去展示或存储。
//一定需要close否则不会收到新的Image回调。
image.close();
// showLog("Image available");
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
// ByteBuffer buffer = image.getPlanes()[0].getBuffer();
// byte[] bytes = new byte[buffer.remaining()];
// buffer.get(bytes);
// Bitmap rectBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);//将data byte型数组转换成bitmap文件
if(faceRecognTricker%4==0){
showLog("Image available");
if(startFaceRecognition==true){
startFaceRecognition=false;
Bitmap newBitmap;
if (cameraPosition == 1) {
newBitmap = BitmapUtil.rotateBitmap(temp, 90);
} else {
newBitmap = BitmapUtil.rotateBitmap(temp, -90);
}
startFaceDetector(newBitmap, bytes);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
//mBackgroundHandler.post(new ImageSaver(image, picFile)); // 在后台线程中将图像保存到文件
}
};
mImageReader.setOnImageAvailableListener(listener, mBackgroundHandler); // 设置监听器,拍照完成后会执行上面的方法
}
}
/**
*
*
* @throws CameraAccessException
*/
private void startPreview() throws CameraAccessException {
// 通过Builder模式创建CaptureRequest创建时使用预览模板
CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
// 自动对焦
// builder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
// // 人脸检测模式
// builder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE, CameraCharacteristics.STATISTICS_FACE_DETECT_MODE_SIMPLE);
// 加入接收图像数据的Surface
builder.addTarget(mPreviewSurface);
builder.addTarget(mImageReader.getSurface());
// 创建处理结果的回调函数(监听器)
CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {};
// 发送重复请求,让相机不断向预览组件发送图像数据
mCameraCaptureSession.setRepeatingRequest(builder.build(), captureCallback, mBackgroundHandler);
}
/**
*
*
* @throws CameraAccessException
*/
private void stopPreview() {
try {
if (mCameraCaptureSession != null) {
mCameraCaptureSession.stopRepeating(); // 取消重复请求
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* CaptureSession
*/
private void closeCaptureSession() {
try {
if (mCameraCaptureSession != null) {
mCameraCaptureSession.close();
mCameraCaptureSession = null;
//Toast.makeText(getBaseContext(), "CaptureSession closed", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*/
private void closeCamera() {
try {
if (mCameraDevice != null) {
mCameraDevice.close();
mCameraDevice = null;
//Toast.makeText(getBaseContext(), "Camera closed", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*/
private void stopCamera() {
try {
stopPreview();
closeCaptureSession();
stopBackgroundThread();
closeCamera();
if(mImageReader!=null){
mImageReader=null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
*/
public synchronized void changeCamera() {
//startFaceRecognition=true;
stopCamera();
if (cameraPosition == 0) {
openBackCamera();
} else {
openFrontCamera();
}
}
public void showLog(String logText) {
if (isApkInDebug(context)) {
if (TextUtils.isEmpty(logText)) {
Log.i("app", "logText is null");
} else {
Log.i("app", logText);
}
}
}
private void Notice() {
showLog("识别失败");
Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT);
}
/**
*
*
* @param faces
* @return {@link Bitmap}
*/
private Bitmap drawWithRectangle(List<Face> faces, Bitmap rectBitmap) {
//复制一个新的Bitmap
Bitmap copiedBitmap = rectBitmap.copy(rectBitmap.getConfig(), true);
;
for (Face face : faces) {
//获取边界状态
Rect bounds = face.getBoundingBox();
// 初始化Paint
Paint paint = new Paint();
// 设置矩形颜色
paint.setColor(Color.BLUE);
// 设置绘制样式为轮廓绘制
paint.setStyle(Paint.Style.STROKE);
// 设置为你需要的宽度
paint.setStrokeWidth(10);
Canvas canvas = new Canvas(copiedBitmap);
canvas.drawRect(bounds, paint);
}
return copiedBitmap;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (CAMERA_REQUEST_CODE == requestCode) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
openFrontCamera();
} else {
//权限拒绝
Toast.makeText(this, "权限拒绝,无法开启摄像头,请手动设置开启APP访问摄像头权限", Toast.LENGTH_SHORT).show();
}
}
}
/**
* @param sizeMap
* @param viewWidth
* @param viewHeight
* @return
*/
public static Size getMinPreSizeNew(Size[] sizeMap, int viewWidth, final int viewHeight) {
List<Size> sizeWidthEqual = new ArrayList<>();
//先查找preview中是否存在与surfaceview相同宽高的尺寸
for (Size size : sizeMap) {
//选择更高倍率相机尺寸
if (size.getWidth() > viewHeight && size.getHeight() > viewWidth) {
float beishuW = size.getWidth() * 1.0f / viewHeight * 1.0f;
float beishuH = size.getHeight() * 1.0f / viewWidth * 1.0f;
if (beishuH == beishuW) {
return size;
}
}
//优先选择大小相等的尺寸
if ((size.getWidth() == viewHeight) && (size.getHeight() == viewWidth)) {
return size;
}
//再次选择能够满足我们遮罩层的的容差的
if (size.getHeight() == viewWidth) {
sizeWidthEqual.add(size);
}
}
if (sizeWidthEqual.size() > 0) {
//找一个分辨率最大的尺寸
Collections.sort(sizeWidthEqual, new Comparator<Size>() {
@Override
public int compare(Size o1, Size o2) {
return Math.abs(o1.getWidth()-viewHeight) -Math.abs(o2.getWidth()-viewHeight);//相机宽度由小到大排序
}
});
//图片宽度和屏幕高度越接近 像素越好
return sizeWidthEqual.get(0);
} else {
//以上都不满足自己设置一个条件选择一个相机尺寸展示就可以了。理论上都是被淘汰四五年前的低端机
return sizeMap[0];
}
}
}

@ -211,10 +211,11 @@ class LoginActivity : BaseActivityOaToolbarViewBinding<ActivityLoginBinding>() {
// binding.etPassword.setText("A000000a.") // binding.etPassword.setText("A000000a.")
//ceshi1 //ceshi1
// binding.etUsername.setText("ceshi1") binding.etUsername.setText("ceshi1")
// binding.etPassword.setText("A000000a.") binding.etPassword.setText("A000000a.")
//瑞洪 RH00002/王总 RH00002/chao工 RH00003/范红波
//瑞洪 RH00002/王总 RH00002/chao工 RH00003/范红波
// binding.etUsername.setText("RH00002") // binding.etUsername.setText("RH00002")
// binding.etPassword.setText("A000000a.") // binding.etPassword.setText("A000000a.")

@ -286,9 +286,24 @@ public class CJFragment extends BaseFragment {
btn_selectCheckResult.setText(info.getCJJG()); btn_selectCheckResult.setText(info.getCJJG());
} }
} else { } else {
//未检
rb1.setChecked(true); rb1.setChecked(true);
rb2.setChecked(false); rb2.setChecked(false);
rb3.setChecked(false); rb3.setChecked(false);
if(isEdit){
if(!TextUtils.isEmpty(info.getMEAMETHOD())){
if(info.getMEAMETHOD().equals("抄表")){
}else{
//观察
List<String> selectList = stringToList(info.getMEASTANDARDSELECT());
if(selectList!=null&&selectList.size()>0){
btn_selectCheckResult.setText(selectList.get(0));
et_jg.setText(selectList.get(0));
}
}
}
}
} }
// rb1.setChecked(info.isSBZT()); // rb1.setChecked(info.isSBZT());

@ -446,7 +446,7 @@ public class SdjgzActivity extends BaseActivity {
public void handleNfc(String result) { public void handleNfc(String result) {
//super.handleNfc(result); //super.handleNfc(result);
//tvNodata.setText(result); //tvNodata.setText(result);
//result = "0475ABEAC21B90"; //result = "04D49CEAC21B90";
if (list.size() != 0) { if (list.size() != 0) {
showLog("--------"); showLog("--------");
showLog(GsonUtils.GsonString(list)); showLog(GsonUtils.GsonString(list));

@ -85,12 +85,22 @@ public class SjcjFragment extends BaseFragment {
btn_submit_qx.setOnClickListener(new View.OnClickListener() { btn_submit_qx.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent intent = new Intent(requireActivity(), SQxgdlrfActivity.class); if(lists!=null&&lists.size()>0){
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); Intent intent = new Intent(requireActivity(), SQxgdlrfActivity.class);
if (!TextUtils.isEmpty(lists.get(item - 1).getASSETNUM())) { intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("kks", lists.get(item - 1).getASSETNUM()); if (!TextUtils.isEmpty(lists.get(item - 1).getASSETNUM())) {
showLog("kks:"+lists.get(item - 1).getASSETNUM());
String kks = lists.get(item - 1).getASSETNUM();
intent.putExtra("kks", kks);
}
startActivity(intent);
} }
startActivity(intent); // Intent intent = new Intent(requireActivity(), SQxgdlrfActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// if (!TextUtils.isEmpty(lists.get(item - 1).getASSETNUM())) {
// intent.putExtra("kks", lists.get(item - 1).getASSETNUM());
// }
// startActivity(intent);
} }
}); });

@ -588,7 +588,7 @@ public class SxgzActivity extends BaseActivity {
// result = "048B94EAC21B91"; // result = "048B94EAC21B91";
//result = "041894EAC21B91"; //result = "041894EAC21B91";
// result = "048D93EAC21B90"; // result = "044092EAC21B90";
if(TextUtils.isEmpty(result)){ if(TextUtils.isEmpty(result)){
return; return;

@ -1,22 +1,43 @@
package com.rehome.dywoa.ui.fragment; package com.rehome.dywoa.ui.fragment;
import static android.app.Activity.RESULT_OK;
import android.Manifest;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.os.Handler;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Base64;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.gson.Gson;
import com.rehome.dywoa.App; import com.rehome.dywoa.App;
import com.rehome.dywoa.Contans; import com.rehome.dywoa.Contans;
import com.rehome.dywoa.MainActivity; import com.rehome.dywoa.MainActivity;
import com.rehome.dywoa.R; import com.rehome.dywoa.R;
import com.rehome.dywoa.adapter.GridViewAdapter; import com.rehome.dywoa.adapter.GridViewAdapter;
import com.rehome.dywoa.base.BaseFragment; import com.rehome.dywoa.base.BaseFragment;
import com.rehome.dywoa.base.MipcaActivityCapture;
import com.rehome.dywoa.bean.FwSingleLoginResult;
import com.rehome.dywoa.bean.GridItem; import com.rehome.dywoa.bean.GridItem;
import com.rehome.dywoa.bean.WaitForBean; import com.rehome.dywoa.bean.WaitForBean;
import com.rehome.dywoa.ui.activity.BiShowActivity; import com.rehome.dywoa.ui.activity.BiShowActivity;
import com.rehome.dywoa.ui.activity.FaceRecognitionActivity;
import com.rehome.dywoa.ui.activity.FaceRecognitionAppActivity;
import com.rehome.dywoa.ui.activity.FanWeiActivity; import com.rehome.dywoa.ui.activity.FanWeiActivity;
import com.rehome.dywoa.ui.activity.HightRiskActivity; import com.rehome.dywoa.ui.activity.HightRiskActivity;
import com.rehome.dywoa.ui.activity.JiZhuActivity; import com.rehome.dywoa.ui.activity.JiZhuActivity;
@ -30,32 +51,51 @@ import com.rehome.dywoa.ui.activity.WaitForToDoActivity;
import com.rehome.dywoa.ui.activity.YjyaActivity; import com.rehome.dywoa.ui.activity.YjyaActivity;
import com.rehome.dywoa.ui.activity.sbxdjgl.SbxdjglActivity; import com.rehome.dywoa.ui.activity.sbxdjgl.SbxdjglActivity;
import com.rehome.dywoa.ui.activity.sbxj.XscbglActivity; import com.rehome.dywoa.ui.activity.sbxj.XscbglActivity;
import com.rehome.dywoa.utils.DataPassUtils;
import com.rehome.dywoa.utils.GsonUtils; import com.rehome.dywoa.utils.GsonUtils;
import com.rehome.dywoa.utils.HttpListener; import com.rehome.dywoa.utils.HttpListener;
import com.rehome.dywoa.utils.NoProgresshttpUtils; import com.rehome.dywoa.utils.NoProgresshttpUtils;
import com.rehome.dywoa.utils.NohttpUtils;
import com.rehome.dywoa.utils.RSAUtils;
import com.rehome.dywoa.utils.UiUtlis;
import com.rehome.dywoa.weiget.AutoGridView; import com.rehome.dywoa.weiget.AutoGridView;
import com.yolanda.nohttp.NoHttp; import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.RequestMethod; import com.yolanda.nohttp.RequestMethod;
import com.yolanda.nohttp.rest.Request; import com.yolanda.nohttp.rest.Request;
import com.yolanda.nohttp.rest.Response; import com.yolanda.nohttp.rest.Response;
import java.io.File;
import java.io.FileOutputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.UUID;
import cn.hutool.core.io.IoUtil;
public class HomeFragment extends BaseFragment { public class HomeFragment extends BaseFragment {
private static final String[] permission = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private static final int CAMERA_REQUEST_CODE = 4;//人脸识别请求摄像头权限
private String username; private String username;
private String firstDeparment; private String firstDeparment;
public static final int REQUEST_CODE_ADD = 1; public static final int REQUEST_CODE_ADD = 1;
public static final int REQUEST_CODE_AUDIT = 2; public static final int REQUEST_CODE_AUDIT = 2;
private static HomeFragment instance = null; private static HomeFragment instance = null;
private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "com.rehome.dywoa/images";
TextView tv_todo_count; TextView tv_todo_count;
LinearLayout ll_account; LinearLayout ll_account;
ImageView iv; ImageView iv;
@ -75,6 +115,9 @@ public class HomeFragment extends BaseFragment {
SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd");
//人脸识别
ActivityResultLauncher<Intent> launcherResultFaceRecognition;
public static HomeFragment getInstance() { public static HomeFragment getInstance() {
if (instance == null) { if (instance == null) {
instance = new HomeFragment(); instance = new HomeFragment();
@ -91,9 +134,20 @@ public class HomeFragment extends BaseFragment {
protected void initView() { protected void initView() {
username = App.getInstance().getUserInfo().getManid(); username = App.getInstance().getUserInfo().getManid();
firstDeparment = App.getInstance().getUserInfo().getFirstDeparment(); firstDeparment = App.getInstance().getUserInfo().getFirstDeparment();
//android 10 以上
if (context.getExternalFilesDir(null) != null) {
path = Objects.requireNonNull(context.getExternalFilesDir(null)).getPath() + "/images";
} else {
path = context.getFilesDir().getPath() + "/images";
}
findView(); findView();
initLists(); initLists();
setAdapter(); setAdapter();
launcherResultFaceRecognition = createFaceRecognitionActivityResultLauncher();
ll_account.setOnClickListener(new View.OnClickListener() { ll_account.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -167,6 +221,101 @@ public class HomeFragment extends BaseFragment {
initData(); initData();
} }
/**
* ActivityResultLauncher
*
* @return
*/
private ActivityResultLauncher<Intent> createFaceRecognitionActivityResultLauncher() {
return registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
int resultCode = result.getResultCode();
if (resultCode == RESULT_OK) {
Intent resultIntent = result.getData();
byte[] faceByte = resultIntent.getByteArrayExtra("FaceRecognition");
String fileName = UUID.randomUUID().toString()+".png";
File fileDir = new File(path);
if(!fileDir.exists()){
fileDir.mkdir();
}
String fileTempName = path + File.separator + fileName;
showLog(fileTempName);
try {
FileOutputStream fileOutputStream = new FileOutputStream(fileTempName);
IoUtil.write(fileOutputStream,true,faceByte);
File fileFaceUpToServer = new File(fileTempName);
showLog(String.valueOf(fileFaceUpToServer.length()));
String url = "http://10.25.188.110:8088/"+Contans.FACE_RECOGNITION_APP_URL;
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.POST);
// showLog(json);
// request.setDefineRequestBodyForJson(json);
request.add("face", fileFaceUpToServer);
if(DataPassUtils.checkCanDj()){
if(App.getInstance().getUserInfo()!=null&&App.getInstance().getUserInfo().getToken()!=null){
String token = App.getInstance().getUserInfo().getToken();
String credential = "Bearer " + token;
request.addHeader("Authorization", credential);
request.addHeader("token", token);
showLog(request.url());
}
}
NohttpUtils.getInstance().add(mActivity,30,request,new HttpListener<String>(){
@Override
public void onSucceed(int what, Response<String> response) throws ParseException {
String jsonResult = response.get();
showLog("-----face------");
showLog(jsonResult);
}
@Override
public void onFailed(int what, Response<String> response) {
showLog("getSisToken onFailed");
}
}, true, true, "人脸识别中,请稍候...");
} catch (Exception e) {
e.printStackTrace();
}
// 将字节数组转换为Base64编码的字符串
// String base64String = "";
// try {
// base64String = RSAUtils.encryptBASE64(faceByte);
// } catch (Exception e) {
// throw new RuntimeException(e);
// }
// showLog(base64String);
// showLog(String.valueOf(base64String.length()));
//
// showLog("----------");
// String headBase64String = "data:image/png;base64," + base64String;
// //showLog(headBase64String);
// showLog(String.valueOf(headBase64String.length()));
// HashMap<String,String> param = new HashMap<>();
// param.put("face",base64String);
// String json = new Gson().toJson(param);
}
}
});
}
private void setAdapter() { private void setAdapter() {
// String[] results = App.getInstance().getUserInfo().getPermissionsResult().split(";"); // String[] results = App.getInstance().getUserInfo().getPermissionsResult().split(";");
// final List<String> resultList = Arrays.asList(results); // final List<String> resultList = Arrays.asList(results);
@ -328,14 +477,25 @@ public class HomeFragment extends BaseFragment {
intentHightRisk.putExtra("type",typeHightRisk); intentHightRisk.putExtra("type",typeHightRisk);
intentHightRisk.putExtra("urlLog",urlWHightRisk); intentHightRisk.putExtra("urlLog",urlWHightRisk);
startActivity(intentHightRisk); startActivity(intentHightRisk);
break; break;
// case 10: case 10:
// TAG = GridViewDialog.TAG_GONGHUI; if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
// break; Intent intentFaceRecognition = new Intent(mActivity, FaceRecognitionAppActivity.class);
// case 11: intentFaceRecognition.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// TAG = GridViewDialog.TAG_JD; launcherResultFaceRecognition.launch(intentFaceRecognition);
// break; } else {
ActivityCompat.requestPermissions(mActivity, permission, CAMERA_REQUEST_CODE);
}
break;
case 11:
Intent intentYhTake = new Intent(mActivity, HightRiskActivity.class);
intentYhTake.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// String typeHightRisk = "高风险";
// String urlWHightRisk = "https://mis.dywzhny.com.cn/mobile/ebdapp/view/998396522831962120/page/1069629959971758112-8233268850081530012";
// intentYhTake.putExtra("type",typeHightRisk);
// intentYhTake.putExtra("urlLog",urlWHightRisk);
startActivity(intentYhTake);
break;
// case 12: // case 12:
// TAG = GridViewDialog.TAG_AF; // TAG = GridViewDialog.TAG_AF;
// break; // break;
@ -346,6 +506,28 @@ public class HomeFragment extends BaseFragment {
}); });
} }
/**
*
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//人脸识别
if (CAMERA_REQUEST_CODE==requestCode){
if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(mActivity, FaceRecognitionAppActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
launcherResultFaceRecognition.launch(intent);
}else {
//权限拒绝
showToast("权限拒绝,无法打开摄像头,请手动设置开启APP访问摄像头权限");
}
}
}
private void initLists() { private void initLists() {
items = new ArrayList<>(); items = new ArrayList<>();
@ -355,9 +537,9 @@ public class HomeFragment extends BaseFragment {
// String[] titles = {"管控一体化","两票系统", "SIS系统", "机组参数","巡检","点检","运行日志","kks码查询","应急预案","用车","用印","BI"}; // String[] titles = {"管控一体化","两票系统", "SIS系统", "机组参数","巡检","点检","运行日志","kks码查询","应急预案","用车","用印","BI"};
// int[] imgIds = {R.drawable.icon_runlog_home,R.drawable.icon_liangpiao, R.drawable.icon_sis_new, R.drawable.icon_gcjd_new,R.drawable.xjgz,R.drawable.icon_dianjian,R.drawable.icon_runlog_home,R.drawable.icon_kks,R.drawable.icon_yjya,R.drawable.icon_use_car,R.drawable.icon_use_seal,R.drawable.icon_bi}; // int[] imgIds = {R.drawable.icon_runlog_home,R.drawable.icon_liangpiao, R.drawable.icon_sis_new, R.drawable.icon_gcjd_new,R.drawable.xjgz,R.drawable.icon_dianjian,R.drawable.icon_runlog_home,R.drawable.icon_kks,R.drawable.icon_yjya,R.drawable.icon_use_car,R.drawable.icon_use_seal,R.drawable.icon_bi};
String[] titles = {"管控一体化","两票系统", "SIS系统", "机组参数","巡检","点检","kks码查询","应急预案","BI","高风险"}; String[] titles = {"管控一体化","两票系统", "SIS系统", "机组参数","巡检","点检","kks码查询","应急预案","BI","高风险","人脸识别","隐患随手拍"};
int[] imgIds = {R.drawable.icon_gkyth,R.drawable.icon_lpqt, R.drawable.icon_sis_new_first, R.drawable.icon_jzcs_new,R.drawable.icon_qj_new,R.drawable.icon_dj_new, int[] imgIds = {R.drawable.icon_gkyth,R.drawable.icon_lpqt, R.drawable.icon_sis_new_first, R.drawable.icon_jzcs_new,R.drawable.icon_qj_new,R.drawable.icon_dj_new,
R.drawable.icon_kks_search,R.drawable.icon_yjya,R.drawable.icon_bi,R.drawable.icon_high_risk}; R.drawable.icon_kks_search,R.drawable.icon_yjya,R.drawable.icon_bi,R.drawable.icon_high_risk,R.drawable.icon_face_re,R.drawable.icon_rinhuan_take};

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.activity.FaceRecognitionAppActivity">
<include layout="@layout/layout_base" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:background="@drawable/radius"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
tools:layout_editor_absoluteX="85dp"
tools:layout_editor_absoluteY="70dp"
tools:srcCompat="@tools:sample/avatars" />
<TextureView
android:id="@+id/textureView"
android:layout_width="wrap_content"
android:layout_height="400dp"
android:layout_marginBottom="20dp"/>
<LinearLayout
android:id="@+id/ll_textureView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:visibility="gone"
android:background="@drawable/radius"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
</LinearLayout>

@ -1,10 +1,10 @@
apply plugin: 'com.android.library' apply plugin: 'com.android.library'
android { android {
compileSdk 34 compileSdk 35
defaultConfig { defaultConfig {
minSdk 24 minSdk 24
targetSdk 34 targetSdk 35
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} }
namespace 'com.zhy.autolayout' namespace 'com.zhy.autolayout'

@ -1,10 +1,10 @@
apply plugin: 'com.android.library' apply plugin: 'com.android.library'
android { android {
compileSdk 34 compileSdk 35
defaultConfig { defaultConfig {
minSdk 24 minSdk 24
targetSdk 34 targetSdk 35
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} }
namespace 'org.litepal' namespace 'org.litepal'

@ -2,10 +2,10 @@ apply plugin: 'com.android.library'
android { android {
compileSdk 34 compileSdk 35
defaultConfig { defaultConfig {
minSdk 24 minSdk 24
targetSdk 34 targetSdk 35
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} }
namespace 'com.zhihu.matisse' namespace 'com.zhihu.matisse'

@ -1,10 +1,10 @@
apply plugin: 'com.android.library' apply plugin: 'com.android.library'
android { android {
compileSdk 34 compileSdk 35
defaultConfig { defaultConfig {
minSdk 24 minSdk 24
targetSdk 34 targetSdk 35
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} }
namespace 'com.yolanda.nohttp' namespace 'com.yolanda.nohttp'

@ -1,10 +1,10 @@
apply plugin: 'com.android.library' apply plugin: 'com.android.library'
android { android {
compileSdk 34 compileSdk 35
defaultConfig { defaultConfig {
minSdk 24 minSdk 24
targetSdk 34 targetSdk 35
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} }
namespace 'com.lcodecore.tkrefreshlayout' namespace 'com.lcodecore.tkrefreshlayout'

@ -1,10 +1,10 @@
apply plugin: 'com.android.library' apply plugin: 'com.android.library'
android { android {
compileSdk 34 compileSdk 35
defaultConfig { defaultConfig {
minSdk 24 minSdk 24
targetSdk 34 targetSdk 35
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} }
namespace 'com.vincent.videocompressor' namespace 'com.vincent.videocompressor'

Loading…
Cancel
Save