The base of this project is LED provided along with the Camera in a typical Android smart phone. After seeing that Play Store has a number of apps that ask for unnecessary permissions, I decided to create an app that toggles the LED without asking for any type of permission. This app also implements a service that detects when the device is shook (used to toggle the flashlight).
As of June 24th of 2018, Flashlight is licensed under Apache License version 2.0.
Latest apk: Flashlight.apk
Source Code (zip): Flashlight.zip
Source Code (tar.gz): Flashlight.tar.gz
- Code Optimization : RamusisTrenksmas
- Logo and Images : Dee-y
The majority of the code is written in Java and is simple. For detecting shake motion: Declare global variables:
SensorManager sensorManager = null;
public static final float SHAKE_THRESHOLD = 10.25f; // How hard should user shake to invoke the service
public static final int MIN_TIME_BETWEEN_SHAKES = 1000;
private long lastShakeTime = 0;
private boolean isFlashlightOn = false;
Initialize sensorManager:
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
if (sensorManager != null) {
Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener((SensorEventListener) this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
Make class implement SensorEventListener interface and override it's onSensorChanged method:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
if ((curTime - lastShakeTime) > MIN_TIME_BETWEEN_SHAKES) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
double acceleration = Math.sqrt(Math.pow(x, 2) +
Math.pow(y, 2) +
Math.pow(z, 2)) - SensorManager.GRAVITY_EARTH;
if (acceleration > SHAKE_THRESHOLD) {
lastShakeTime = curTime;
if (!isFlashlightOn) {
torchToggle("on");
isFlashlightOn = true;
}
else {
torchToggle("off");
isFlashlightOn = false;
}
}
}
}
Create a function torchToggle(String command):
private void torchToggle(String command) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String cameraId = null; // Usually back camera is at 0 position.
try {
if (camManager != null) {
cameraId = camManager.getCameraIdList()[0];
}
if (camManager != null) {
if (command.equals("on")) {
camManager.setTorchMode(cameraId, true); // Turn ON
isFlashlightOn = true;
} else {
camManager.setTorchMode(cameraId, false); // Turn OFF
isFlashlightOn = false;
}
}
} catch (CameraAccessException e) {
e.getMessage();
}
}
}
Any help, including feedback, is highly appriciated. I have just started out with Android and I’m relatively new to app development.
- Fork it!
- Create your feature branch:
git checkout -b new-branch
- Commit your changes:
git commit -am 'Make a valuable addition'
- Push to the branch:
git push origin new-feature
- Submit a pull request :D
Once staretd, an app can never be completely finished.
- Revamp the project and make it better.