概要
APIレベル23 / Android 6.0 / Marshmallowから、従来手法では必要だった"android.permission.FLASHLIGHT"のパーミッション不要でカメラのライトのON/OFF制御が出来るようになっています。この対応方法について説明します。
コード
android.hardware.camera2.CameraManagerを利用します。サンプルコードを以下に記載しますが、とっても簡単に対応出来ます。
FlashlightTorchCOntroller
import android.annotation.TargetApi;
import android.content.Context;
import android.hardware.camera2.CameraManager;
import androidx.annotation.NonNull;
import android.os.Handler;
@TargetApi(23)
public class FlashlightTorchController {
private CameraManager cameraManager;
private String cameraID;
private boolean SW;
public FlashlightTorchController(Context context) {
SW = false;
cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
// カメラマネージャーにトーチモードのコールバックを登録
cameraManager.registerTorchCallback(new CameraManager.TorchCallback() {
// トーチモードが変更された時の処理
@Override
public void onTorchModeChanged(@NonNull String cameraId, boolean enabled) {
super.onTorchModeChanged(cameraId, enabled);
// カメラIDをセット
cameraID = cameraId;
// SWに現在の状態をセット
SW = enabled;
}
}, new Handler());
}
public void toggle() {
if (cameraManager == null || cameraID == null)
return ;
cameraManager.setTorchMode(cameraID, !SW);
}
}