|
|
@@ -30,6 +30,7 @@ import android.util.Size;
|
|
|
import android.util.SparseIntArray;
|
|
|
import android.view.Surface;
|
|
|
import android.view.TextureView;
|
|
|
+import android.widget.ImageView;
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
|
|
@@ -82,6 +83,8 @@ public class CameraActivity extends BaseCameraActivity {
|
|
|
private HandlerThread mBackgroundThread;
|
|
|
|
|
|
private AutoFitTextureView textureView;
|
|
|
+ private boolean mIsFlashOpen = false;
|
|
|
+ private ImageView iv_flash;
|
|
|
|
|
|
private Semaphore mCameraOpenCloseLock = new Semaphore(1);
|
|
|
|
|
|
@@ -151,6 +154,15 @@ public class CameraActivity extends BaseCameraActivity {
|
|
|
public void initViews(Bundle savedInstanceState) {
|
|
|
textureView = findViewById(R.id.textureView);
|
|
|
textureView.setSurfaceTextureListener(textureListener);
|
|
|
+ iv_flash = findViewById(R.id.iv_flash);
|
|
|
+ iv_flash.setOnClickListener(v -> {
|
|
|
+ mIsFlashOpen = !mIsFlashOpen;
|
|
|
+ if (mIsFlashOpen) {
|
|
|
+ iv_flash.setImageResource(R.mipmap.flash_open);
|
|
|
+ } else {
|
|
|
+ iv_flash.setImageResource(R.mipmap.flash_close);
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -279,6 +291,7 @@ public class CameraActivity extends BaseCameraActivity {
|
|
|
// 解决预览太暗的问题
|
|
|
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, getRange());
|
|
|
captureRequestBuilder.addTarget(surface);
|
|
|
+
|
|
|
cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
|
|
|
@Override
|
|
|
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
|
|
|
@@ -306,6 +319,7 @@ public class CameraActivity extends BaseCameraActivity {
|
|
|
Log.e("tag", "updatePreview error, return");
|
|
|
}
|
|
|
captureRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
|
|
|
+ //justFlashLight(captureRequestBuilder);
|
|
|
try {
|
|
|
cameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler);
|
|
|
} catch (CameraAccessException e) {
|
|
|
@@ -402,8 +416,6 @@ public class CameraActivity extends BaseCameraActivity {
|
|
|
// Orientation
|
|
|
int rotation = getWindowManager().getDefaultDisplay().getRotation();
|
|
|
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation));
|
|
|
-
|
|
|
-
|
|
|
reader.setOnImageAvailableListener(readerListener, mBackgroundHandler);
|
|
|
|
|
|
final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession.CaptureCallback() {
|
|
|
@@ -416,6 +428,7 @@ public class CameraActivity extends BaseCameraActivity {
|
|
|
|
|
|
};
|
|
|
|
|
|
+ justFlashLight(captureBuilder);
|
|
|
cameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
|
|
|
@Override
|
|
|
public void onConfigured(CameraCaptureSession session) {
|
|
|
@@ -435,6 +448,51 @@ public class CameraActivity extends BaseCameraActivity {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void justFlashLight(CaptureRequest.Builder captureBuilder) {
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
|
+ if (mIsFlashOpen) {
|
|
|
+ captureBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
|
|
|
+ captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
|
|
|
+ } else {
|
|
|
+ captureBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
|
|
|
+ captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 只有摄像头关闭的时候,才能用以下的方法
|
|
|
+ /*try {
|
|
|
+ //获取CameraManager
|
|
|
+ CameraManager mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
|
|
|
+ //获取当前手机所有摄像头设备ID
|
|
|
+ String[] ids = mCameraManager.getCameraIdList();
|
|
|
+ for (String id : ids) {
|
|
|
+ CameraCharacteristics c = mCameraManager.getCameraCharacteristics(id);
|
|
|
+ //查询该摄像头组件是否包含闪光灯
|
|
|
+ Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
|
|
|
+ Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
|
|
|
+ if (flashAvailable != null && flashAvailable
|
|
|
+ && lensFacing != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
|
|
|
+ //打开或关闭手电筒
|
|
|
+ mCameraManager.setTorchMode(id, true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (CameraAccessException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }*/
|
|
|
+ } else {
|
|
|
+ if (mIsFlashOpen) {
|
|
|
+ // 拍完关闭闪光灯
|
|
|
+ captureBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
|
|
|
+ //captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ captureBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
|
|
|
+ //captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
|
|
|
@Override
|
|
|
public void onImageAvailable(ImageReader reader) {
|