mirror of
https://github.com/SimpleMobileTools/Simple-Flashlight.git
synced 2025-06-05 21:59:19 +02:00
do not require the Camera permission on marshmallow+
This commit is contained in:
@ -47,7 +47,7 @@ public class MainActivity extends AppCompatActivity implements MyCamera {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setupCameraImpl() {
|
private void setupCameraImpl() {
|
||||||
cameraImpl = new MyCameraImpl(this);
|
cameraImpl = new MyCameraImpl(this, this);
|
||||||
cameraImpl.toggleFlashlight();
|
cameraImpl.toggleFlashlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,15 +1,24 @@
|
|||||||
package com.simplemobiletools.flashlight;
|
package com.simplemobiletools.flashlight;
|
||||||
|
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.content.Context;
|
||||||
import android.hardware.Camera;
|
import android.hardware.Camera;
|
||||||
|
import android.hardware.camera2.CameraAccessException;
|
||||||
|
import android.hardware.camera2.CameraManager;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
public class MyCameraImpl {
|
public class MyCameraImpl {
|
||||||
|
private static final String TAG = MyCameraImpl.class.getSimpleName();
|
||||||
private Camera camera;
|
private Camera camera;
|
||||||
private Camera.Parameters params;
|
private Camera.Parameters params;
|
||||||
private boolean isFlashlightOn;
|
private boolean isFlashlightOn;
|
||||||
private MyCamera callback;
|
private MyCamera callback;
|
||||||
|
private Context context;
|
||||||
|
|
||||||
public MyCameraImpl(MyCamera camera) {
|
public MyCameraImpl(MyCamera camera, Context cxt) {
|
||||||
callback = camera;
|
callback = camera;
|
||||||
|
context = cxt;
|
||||||
setupCamera();
|
setupCamera();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,6 +34,9 @@ public class MyCameraImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setupCamera() {
|
public void setupCamera() {
|
||||||
|
if (isMarshmallow())
|
||||||
|
return;
|
||||||
|
|
||||||
if (camera == null) {
|
if (camera == null) {
|
||||||
try {
|
try {
|
||||||
camera = Camera.open();
|
camera = Camera.open();
|
||||||
@ -35,33 +47,58 @@ public class MyCameraImpl {
|
|||||||
if (isFlashlightOn)
|
if (isFlashlightOn)
|
||||||
enableFlashlight();
|
enableFlashlight();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "setup camera " + e.getMessage());
|
||||||
callback.cameraUnavailable();
|
callback.cameraUnavailable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enableFlashlight() {
|
private void enableFlashlight() {
|
||||||
if (camera == null || params == null)
|
if (isMarshmallow()) {
|
||||||
return;
|
toggleMarshmallowFlashlight(true);
|
||||||
|
} else {
|
||||||
|
if (camera == null || params == null)
|
||||||
|
return;
|
||||||
|
|
||||||
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
|
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
|
||||||
camera.setParameters(params);
|
camera.setParameters(params);
|
||||||
|
}
|
||||||
callback.enableFlashlight();
|
callback.enableFlashlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disableFlashlight() {
|
private void disableFlashlight() {
|
||||||
if (camera == null || params == null)
|
if (isMarshmallow()) {
|
||||||
return;
|
toggleMarshmallowFlashlight(false);
|
||||||
|
} else {
|
||||||
|
if (camera == null || params == null)
|
||||||
|
return;
|
||||||
|
|
||||||
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
|
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
|
||||||
camera.setParameters(params);
|
camera.setParameters(params);
|
||||||
|
}
|
||||||
callback.disableFlashlight();
|
callback.disableFlashlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.M)
|
||||||
|
private void toggleMarshmallowFlashlight(boolean enable) {
|
||||||
|
try {
|
||||||
|
final CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
|
||||||
|
final String[] list = manager.getCameraIdList();
|
||||||
|
manager.setTorchMode(list[0], enable);
|
||||||
|
} catch (CameraAccessException e) {
|
||||||
|
Log.e(TAG, "toggle marshmallow flashlight " + e.getMessage());
|
||||||
|
callback.cameraUnavailable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void releaseCamera() {
|
public void releaseCamera() {
|
||||||
if (camera != null) {
|
if (camera != null) {
|
||||||
camera.release();
|
camera.release();
|
||||||
camera = null;
|
camera = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isMarshmallow() {
|
||||||
|
return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ public class MyWidgetProvider extends AppWidgetProvider implements MyCamera {
|
|||||||
final PendingIntent pendingIntent = PendingIntent.getBroadcast(cxt, 0, intent, 0);
|
final PendingIntent pendingIntent = PendingIntent.getBroadcast(cxt, 0, intent, 0);
|
||||||
remoteViews = new RemoteViews(cxt.getPackageName(), R.layout.widget);
|
remoteViews = new RemoteViews(cxt.getPackageName(), R.layout.widget);
|
||||||
remoteViews.setOnClickPendingIntent(R.id.toggle_btn, pendingIntent);
|
remoteViews.setOnClickPendingIntent(R.id.toggle_btn, pendingIntent);
|
||||||
cameraImpl = new MyCameraImpl(this);
|
cameraImpl = new MyCameraImpl(this, cxt);
|
||||||
|
|
||||||
final Resources res = cxt.getResources();
|
final Resources res = cxt.getResources();
|
||||||
final int appColor = res.getColor(R.color.colorPrimary);
|
final int appColor = res.getColor(R.color.colorPrimary);
|
||||||
|
Reference in New Issue
Block a user