Notice
Recent Posts
Recent Comments
Link
투케이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();
}
}
[결과 출력]
반응형
'Android' 카테고리의 다른 글
Comments