11package com .simplemobiletools .flashlight ;
22
3+ import android .annotation .TargetApi ;
4+ import android .content .Context ;
35import android .hardware .Camera ;
6+ import android .hardware .camera2 .CameraAccessException ;
7+ import android .hardware .camera2 .CameraManager ;
8+ import android .os .Build ;
9+ import android .util .Log ;
410
511public class MyCameraImpl {
12+ private static final String TAG = MyCameraImpl .class .getSimpleName ();
613 private Camera camera ;
714 private Camera .Parameters params ;
815 private boolean isFlashlightOn ;
916 private MyCamera callback ;
17+ private Context context ;
1018
11- public MyCameraImpl (MyCamera camera ) {
19+ public MyCameraImpl (MyCamera camera , Context cxt ) {
1220 callback = camera ;
21+ context = cxt ;
1322 setupCamera ();
1423 }
1524
@@ -25,6 +34,9 @@ public void toggleFlashlight() {
2534 }
2635
2736 public void setupCamera () {
37+ if (isMarshmallow ())
38+ return ;
39+
2840 if (camera == null ) {
2941 try {
3042 camera = Camera .open ();
@@ -35,33 +47,58 @@ public void setupCamera() {
3547 if (isFlashlightOn )
3648 enableFlashlight ();
3749 } catch (Exception e ) {
50+ Log .e (TAG , "setup camera " + e .getMessage ());
3851 callback .cameraUnavailable ();
3952 }
4053 }
4154 }
4255
4356 private void enableFlashlight () {
44- if (camera == null || params == null )
45- return ;
57+ if (isMarshmallow ()) {
58+ toggleMarshmallowFlashlight (true );
59+ } else {
60+ if (camera == null || params == null )
61+ return ;
4662
47- params .setFlashMode (Camera .Parameters .FLASH_MODE_TORCH );
48- camera .setParameters (params );
63+ params .setFlashMode (Camera .Parameters .FLASH_MODE_TORCH );
64+ camera .setParameters (params );
65+ }
4966 callback .enableFlashlight ();
5067 }
5168
5269 private void disableFlashlight () {
53- if (camera == null || params == null )
54- return ;
70+ if (isMarshmallow ()) {
71+ toggleMarshmallowFlashlight (false );
72+ } else {
73+ if (camera == null || params == null )
74+ return ;
5575
56- params .setFlashMode (Camera .Parameters .FLASH_MODE_OFF );
57- camera .setParameters (params );
76+ params .setFlashMode (Camera .Parameters .FLASH_MODE_OFF );
77+ camera .setParameters (params );
78+ }
5879 callback .disableFlashlight ();
5980 }
6081
82+ @ TargetApi (Build .VERSION_CODES .M )
83+ private void toggleMarshmallowFlashlight (boolean enable ) {
84+ try {
85+ final CameraManager manager = (CameraManager ) context .getSystemService (Context .CAMERA_SERVICE );
86+ final String [] list = manager .getCameraIdList ();
87+ manager .setTorchMode (list [0 ], enable );
88+ } catch (CameraAccessException e ) {
89+ Log .e (TAG , "toggle marshmallow flashlight " + e .getMessage ());
90+ callback .cameraUnavailable ();
91+ }
92+ }
93+
6194 public void releaseCamera () {
6295 if (camera != null ) {
6396 camera .release ();
6497 camera = null ;
6598 }
6699 }
100+
101+ private boolean isMarshmallow () {
102+ return android .os .Build .VERSION .SDK_INT >= android .os .Build .VERSION_CODES .M ;
103+ }
67104}
0 commit comments