Desarrollador: Engr Saad
Correo electrónico: [email protected]
Sitio web: https://engr-saad.com
LinkedIn: https://www.linkedin.com/in/engr-saad/
Facebook: https://www.facebook.com/engr.saad.2/
Web de la empresa: https://triangletech.com.bd/
WhatsApp: +8801810536303
La base de este proyecto se proporciona junto con la cámara en un teléfono inteligente Android típico. Después de ver que Play Store tiene una serie de aplicaciones que solicitan permisos innecesarios, decidí crear una aplicación que alternara el LED sin pedir ningún tipo de permiso. Esta aplicación también implementa un servicio que detecta cuándo se sacude el dispositivo (se usa para alternar la linterna).
A partir del 3 de enero de 2020, la linterna tiene licencia bajo la licencia Apache versión 2.0.
Código fuente (zip): linterna.zip
La mayoría del código está escrito en Java y es simple. Para detectar Shake Motion: Declarar variables globales:
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 ;Inicializar 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 );
}Haga que la clase implementa la interfaz SensoreVeVentListener y anule su método OnSensorChanged:
@ 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 ;
}
}
}
}Crear una función tortchToggle (comando de cadena):
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 ();
}
}
}Cualquier ayuda, incluida la retroalimentación, es altamente apreciada. Acabo de comenzar con Android y soy relativamente nuevo en el desarrollo de aplicaciones.
git checkout -b new-branchgit commit -am 'Make a valuable addition'git push origin new-feature