안드로이드 기기의 카메라 플래시(LED 손전등)는 별도의 하드웨어 API 없이 CameraManager 클래스만으로도 간단하게 제어할 수 있습니다. 이 글에서는 토글 버튼 하나로 플래시라이트를 켜고 끄는 안드로이드 앱을 만드는 전체 과정을 단계별로 살펴보겠습니다.
1단계: 새 프로젝트 생성
안드로이드 스튜디오를 실행한 뒤, 메뉴에서 File → New Project를 선택하고 빈 액티비티 템플릿으로 새 프로젝트를 생성합니다. 프로젝트 이름과 패키지명, 최소 SDK 버전 등 필요한 정보를 모두 입력하세요.
2단계: 레이아웃 작성 (activity_main.xml)
플래시라이트를 켜고 끄기 위한 토글 버튼(ToggleButton)을 화면 중앙에 배치합니다. 아래 코드를 res/layout/activity_main.xml에 추가하세요.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<ToggleButton
android:id="@+id/onOffFlashlight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="Turn Off"
android:textOff="Turn On"
android:checked="false"
android:text="Turn On/Off Camera LED/ Flashlight Android" />
</LinearLayout>3단계: 메인 액티비티 구현 (MainActivity.java)
핵심 로직은 다음과 같습니다. 먼저 기기가 플래시를 지원하는지 확인하고, 지원하지 않으면 경고 대화상자를 띄운 후 앱을 종료합니다. 그다음 CameraManager를 통해 카메라 ID를 가져오고, 토글 버튼의 상태 변화에 따라 setTorchMode()를 호출해 플래시를 제어합니다.
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraManager;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.widget.CompoundButton;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
private CameraManager mCameraManager;
private String mCameraId;
private ToggleButton toggleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 플래시 지원 여부 확인
boolean isFlashAvailable = getApplicationContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT);
if (!isFlashAvailable) {
showNoFlashError();
}
// CameraManager 서비스 가져오기
mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
mCameraId = mCameraManager.getCameraIdList()[0];
} catch (CameraAccessException e) {
e.printStackTrace();
}
toggleButton = findViewById(R.id.onOffFlashlight);
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switchFlashLight(isChecked);
}
});
}
// 플래시 미지원 기기용 에러 대화상자
public void showNoFlashError() {
AlertDialog alert = new AlertDialog.Builder(this)
.create();
alert.setTitle("Oops!");
alert.setMessage("Flash not available in this device...");
alert.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
alert.show();
}
// 플래시라이트 켜기/끄기
public void switchFlashLight(boolean status) {
try {
mCameraManager.setTorchMode(mCameraId, status);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
}참고: 안드로이드 6.0(API 23) 이상에서는 setTorchMode()를 사용할 때 카메라를 열지 않고도 플래시를 직접 제어할 수 있어 배터리와 리소스 소모가 적습니다.
4단계: 권한 설정 (AndroidManifest.xml)
플래시 제어에는 카메라 권한이 필요합니다. 아래처럼 androidManifest.xml에 CAMERA 권한과 플래시 하드웨어 사용 선언을 추가하세요.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.flash" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>실행 및 결과 확인
이제 실제 안드로이드 기기를 컴퓨터에 연결하고 앱을 실행해 보겠습니다. 안드로이드 스튜디오에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run(실행) 아이콘을 클릭하세요. 목록에서 자신의 모바일 기기를 선택하면 앱이 설치되고 실행됩니다.
앱이 실행되면 화면 중앙에 토글 버튼이 나타납니다. 버튼을 눌러 Turn On 상태로 바꾸면 후면 카메라의 플래시 LED가 켜지고, 다시 눌러 Turn Off 상태로 바꾸면 꺼집니다.

마무리
이렇게 CameraManager.setTorchMode() API를 활용하면 몇 줄의 코드만으로 플래시라이트 기능을 구현할 수 있습니다. 손전등 앱, 알림 알림등, QR 코드 스캐너 보조 조명 등 다양한 앱에서 응용해 보세요. 단, 일부 기기는 플래시를 지원하지 않으므로 반드시 hasSystemFeature()로 사전 체크하는 것을 잊지 마세요.