Torch Light based on Camera API 2
Android has deprecated its old camera API Class and now added a new Camera API 2 class from Android 5+. The code for torch light based on new Camera API 2 class is defined below:
import android.content.Context;
import android.content.pm.PackageManager;
import android.util.Log;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager.TorchCallback;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CaptureRequest;
private CameraCaptureSession mSession;
private CaptureRequest.Builder mBuilder;
CameraDevice mCameraDevice;
CameraManager mCameraManager;
CameraCharacteristics mCameraCharacteristics;
boolean flashAvailable = false;
String cameraId;
String[] list=new String[10];
// ———————– code to check number of torch lights available to a mobile ———————-
public ArrayList getFlashIds()
{
ArrayList cIds = new ArrayList();
if (Build.VERSION.SDK_INT <= 21)
{
android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
cIds.add(“1”);
} else { // back-facing camera
cIds.add(“0”);
}
return cIds;
}
mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try
{
list = mCameraManager.getCameraIdList();
for(int i=0;i<list.length;i++)
{
mCameraCharacteristics = mCameraManager.getCameraCharacteristics(list[i]);
flashAvailable = mCameraCharacteristics.get(mCameraCharacteristics.FLASH_INFO_AVAILABLE);
if(flashAvailable == true)
{
cIds.add(list[i]);
}
}
}
catch (CameraAccessException e)
{
e.printStackTrace();
BA.Log(“Error: ” + e.getReason() + “”);
}
return cIds;
}
//—————————————————————
// ———————- code to turn Torch Light on based on id ————————-
// ———————- id=0 is for back light, while id=1 is for front torch light —————
public void cam2On(String Id)
{
mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
if (mCameraManager == null)
{
BA.Log(“Camera not initiated”);
}
try
{
//list = mCameraManager.getCameraIdList();
//BA.Log(list[0]);
//BA.Log(“Test”);
//mCameraCharacteristics = mCameraManager.getCameraCharacteristics(list[0]);
mCameraCharacteristics = mCameraManager.getCameraCharacteristics(Id);
flashAvailable = mCameraCharacteristics.get(mCameraCharacteristics.FLASH_INFO_AVAILABLE);
}
catch (CameraAccessException e) {
e.printStackTrace();
BA.Log(“Error: ” + e.getReason() + “”);
}
if (flashAvailable) {
//BA.Log(“flash available”);
try {
//BA.Log(“1”);
mCameraManager.setTorchMode(Id, true);
//BA.Log(“1.5”);
// mCameraManager.registerTorchCallback(torchCallback, null);
//BA.Log(“2”);
try {
mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);
mSession.setRepeatingRequest(mBuilder.build(), null, null);
} catch (Exception e) {
e.printStackTrace();
}
} catch (CameraAccessException e) {
e.printStackTrace();
BA.Log(“Open camera Error: ” + e.getReason() + “”);
}
} else {
BA.Log(“Flash not available”);
}
}
//================= Cam2 OFF ======================
public void cam2Off(String Id)
{
mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
if (mCameraManager == null)
{
BA.Log(“Camera not initiated”);
}
try
{
//list = mCameraManager.getCameraIdList();
//BA.Log(list[0]);
//BA.Log(“Test”);
//mCameraCharacteristics = mCameraManager.getCameraCharacteristics(list[0]);
mCameraCharacteristics = mCameraManager.getCameraCharacteristics(Id);
flashAvailable = mCameraCharacteristics.get(mCameraCharacteristics.FLASH_INFO_AVAILABLE);
}
catch (CameraAccessException e) {
e.printStackTrace();
BA.Log(“Error: ” + e.getReason() + “”);
}
if (flashAvailable) {
//BA.Log(“flash available”);
try {
mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
mSession.setRepeatingRequest(mBuilder.build(), null, null);
} catch (Exception e) {
e.printStackTrace();
}
try {
// mCameraManager.unregisterTorchCallback(torchCallback);
//BA.Log(“1”);
mCameraManager.setTorchMode(Id, false);
//BA.Log(“1.5”);
} catch (CameraAccessException e) {
e.printStackTrace();
BA.Log(“Open camera Error: ” + e.getReason() + “”);
}
} else {
BA.Log(“Flash not available”);
}
}
//==================================================
//public CameraManager.TorchCallback torchCallback = new CameraManager.TorchCallback()
public static abstract class torchCallback {
// @Override
public void onTorchModeUnavailable (String cameraId) {
BA.Log(cameraId + ” mode Unavailable”);
}
public void onTorchModeChanged(String cameraId, boolean enabled)
{
BA.Log(“torch mode changed”);
BA.Log(cameraId + “: ” + enabled);
}
}
An Android App based on this Camera API 2 class is: Torch Light+