투케이2K

210. (AndroidStudio/android/java) 카메라 (camera) 후레시 (flash) 기능 on 켜기 , off 끄기 수행 실시 본문

Android

210. (AndroidStudio/android/java) 카메라 (camera) 후레시 (flash) 기능 on 켜기 , off 끄기 수행 실시

투케이2K 2021. 10. 11. 10:02

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : java


[소스 코드]

	/**
	 * [카레라 후레쉬 켜기 , 끄기 설명]
	 * 1. [퍼미션] : 사전 카메라 퍼미션을 사용자로부터 권한 인증을 받아야합니다
	 *   <uses-permission android:name="android.permission.CAMERA" />
	 *   <uses-permission android:name="android.permission.FLASHLIGHT" />
	 *   <uses-feature android:name="android.hardware.camera.flash" />
	 *   <uses-feature android:name="android.hardware.camera2.full" />
	 *
	 * 2. [로직 정리] :
	 *   퍼미션 권한 사용자로부터 허용 받기
	 *   카메라 후레쉬 (Flash) 기능을 지워하는지 체크
	 *   모바일 버전 (23) 마시멜로우 기준 카메라 ON , OFF 처리 실시
	 * */
	
	
	
	CameraManager mCameraManager = null;
	Camera mCamera = null;
	boolean mCameraFlag = false; //TODO [ON = true / OFF = false]
	public void cameraFlashON(){
		//TODO [hasSystemFeature FEATURE_CAMERA_FLASH 사용해 후레쉬 지원 체크 실시]
		if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) { // [카메라 후레쉬 기능 지원]
			try {
				if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ //TODO [마시멜로우 이상 버전 처리]
					mCameraManager = (CameraManager) getSystemService(CAMERA_SERVICE); // [카메라 객체 서비스 생성]
					String cameraId = ""; // [카메라 아이디 값 저장]
					for (String id : mCameraManager.getCameraIdList()) { // [카메라 아이디 값 찾음]
						CameraCharacteristics c = mCameraManager.getCameraCharacteristics(id);
						Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
						Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
						if (flashAvailable != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
							cameraId = id;
							break;
						}
					}
					if(cameraId != null && cameraId.length() > 0 && !cameraId.equals("") && !cameraId.contains("null")){
						Log.d("---", "---");
						Log.w("//===========//", "================================================");
						Log.d("", "\n" + "[A_Test_Java > cameraFlashON() 메소드 : 카메라 후레쉬 기능 지원 확인]");
						Log.d("", "\n" + "[상태 : "+String.valueOf("true")+"]");
						Log.d("", "\n" + "[SDK : "+String.valueOf("마시멜로우 이상")+"]");
						Log.d("", "\n" + "[카메라 ID : "+String.valueOf(cameraId)+"]");
						Log.d("", "\n" + "[로직 : "+String.valueOf("후레쉬 ON 수행 실시")+"]");
						Log.w("//===========//", "================================================");
						Log.d("---", "---");
						if(mCameraFlag == false){ // [카메라가 OFF 상태일 경우]
							mCameraManager.setTorchMode(cameraId, true);
							mCameraFlag = true;
						}
					}
					else {
						Log.d("---", "---");
						Log.e("//===========//", "================================================");
						Log.d("", "\n" + "[A_Test_Java > cameraFlashON() 메소드 : 카메라 후레쉬 기능 지원 확인]");
						Log.d("", "\n" + "[상태 : "+String.valueOf("true")+"]");
						Log.d("", "\n" + "[SDK : "+String.valueOf("마시멜로우 이상")+"]");
						Log.d("", "\n" + "[카메라 ID : "+String.valueOf("")+"]");
						Log.d("", "\n" + "[로직 : "+String.valueOf("후레쉬 ON 수행 실패")+"]");
						Log.e("//===========//", "================================================");
						Log.d("---", "---");
						mCameraFlag = false;
						Toast.makeText(getApplication(), "카메라 아이디 값을 확인하지 못했습니다.",Toast.LENGTH_SHORT).show();
					}
				}
				else { //TODO [마시멜로우 미만 버전 처리]
					Log.d("---", "---");
					Log.w("//===========//", "================================================");
					Log.d("", "\n" + "[A_Test_Java > cameraFlashON() 메소드 : 카메라 후레쉬 기능 지원 확인]");
					Log.d("", "\n" + "[상태 : "+String.valueOf("true")+"]");
					Log.d("", "\n" + "[SDK : "+String.valueOf("마시멜로우 미만")+"]");
					Log.w("//===========//", "================================================");
					Log.d("---", "---");
					if(mCameraFlag == false){ // [카메라가 OFF 상태일 경우]
						mCamera = Camera.open();
						Camera.Parameters params = mCamera.getParameters();
						params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);

						mCamera.setParameters(params);
						mCamera.startPreview();
						mCameraFlag = true;
					}
				}
			} catch (Exception e) {
				mCameraFlag = false;
				e.printStackTrace();
			}
		}
		else { // [카메라 후레쉬 기능 지원 안함]
			Log.d("---", "---");
			Log.e("//===========//", "================================================");
			Log.d("", "\n" + "[A_Test_Java > cameraFlashON() 메소드 : 카메라 후레쉬 기능 지원 확인]");
			Log.d("", "\n" + "[상태 : "+String.valueOf("false")+"]");
			Log.e("//===========//", "================================================");
			Log.d("---", "---");
			mCameraFlag = false;
			Toast.makeText(getApplication(), "카메라 후레쉬 기능을 지원하지 않는 기기입니다.",Toast.LENGTH_SHORT).show();
		}
	}



	public void cameraFlashOFF(){
		//TODO [hasSystemFeature FEATURE_CAMERA_FLASH 사용해 후레쉬 지원 체크 실시]
		if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) { // [카메라 후레쉬 기능 지원]
			try {
				if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ //TODO [마시멜로우 이상 버전 처리]
					mCameraManager = (CameraManager) getSystemService(CAMERA_SERVICE); // [카메라 객체 서비스 생성]
					String cameraId = ""; // [카메라 아이디 값 저장]
					for (String id : mCameraManager.getCameraIdList()) { // [카메라 아이디 값 찾음]
						CameraCharacteristics c = mCameraManager.getCameraCharacteristics(id);
						Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
						Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
						if (flashAvailable != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
							cameraId = id;
							break;
						}
					}
					if(cameraId != null && cameraId.length() > 0 && !cameraId.equals("") && !cameraId.contains("null")){
						Log.d("---", "---");
						Log.w("//===========//", "================================================");
						Log.d("", "\n" + "[A_Test_Java > cameraFlashOFF() 메소드 : 카메라 후레쉬 기능 지원 확인]");
						Log.d("", "\n" + "[상태 : "+String.valueOf("true")+"]");
						Log.d("", "\n" + "[SDK : "+String.valueOf("마시멜로우 이상")+"]");
						Log.d("", "\n" + "[카메라 ID : "+String.valueOf(cameraId)+"]");
						Log.d("", "\n" + "[로직 : "+String.valueOf("후레쉬 OFF 수행 실시")+"]");
						Log.w("//===========//", "================================================");
						Log.d("---", "---");
						if(mCameraFlag == true){ // [카메라 ON 상태인 경우]
							mCameraManager.setTorchMode(cameraId, false);
							mCameraFlag = false;
						}
					}
					else {
						Log.d("---", "---");
						Log.e("//===========//", "================================================");
						Log.d("", "\n" + "[A_Test_Java > cameraFlashOFF() 메소드 : 카메라 후레쉬 기능 지원 확인]");
						Log.d("", "\n" + "[상태 : "+String.valueOf("true")+"]");
						Log.d("", "\n" + "[SDK : "+String.valueOf("마시멜로우 이상")+"]");
						Log.d("", "\n" + "[카메라 ID : "+String.valueOf("")+"]");
						Log.d("", "\n" + "[로직 : "+String.valueOf("후레쉬 OFF 수행 실패")+"]");
						Log.e("//===========//", "================================================");
						Log.d("---", "---");
						mCameraFlag = false;
						Toast.makeText(getApplication(), "카메라 아이디 값을 확인하지 못했습니다.",Toast.LENGTH_SHORT).show();
					}
				}
				else { //TODO [마시멜로우 미만 버전 처리]
					Log.d("---", "---");
					Log.w("//===========//", "================================================");
					Log.d("", "\n" + "[A_Test_Java > cameraFlashOFF() 메소드 : 카메라 후레쉬 기능 지원 확인]");
					Log.d("", "\n" + "[상태 : "+String.valueOf("true")+"]");
					Log.d("", "\n" + "[SDK : "+String.valueOf("마시멜로우 미만")+"]");
					Log.w("//===========//", "================================================");
					Log.d("---", "---");
					if(mCameraFlag == true){ // [카메라 ON 상태인 경우]
						mCamera.stopPreview();
						mCamera.release();
						mCamera = null;
						mCameraFlag = false;
					}
				}
			} catch (Exception e) {
				mCameraFlag = false;
				e.printStackTrace();
			}
		}
		else { // [카메라 후레쉬 기능 지원 안함]
			Log.d("---", "---");
			Log.e("//===========//", "================================================");
			Log.d("", "\n" + "[A_Test_Java > cameraFlashOFF() 메소드 : 카메라 후레쉬 기능 지원 확인]");
			Log.d("", "\n" + "[상태 : "+String.valueOf("false")+"]");
			Log.e("//===========//", "================================================");
			Log.d("---", "---");
			mCameraFlag = false;
			Toast.makeText(getApplication(), "카메라 후레쉬 기능을 지원하지 않는 기기입니다.",Toast.LENGTH_SHORT).show();
		}
	}

[결과 출력]


 

반응형
Comments