Primero necesitamos dos imágenes para hacer nuestro botón de encendido, yo les dejare las imágenes ok.
Ahora necesitamos un ImageButton “pero androfast tenemos dos imágenes no seria mejor usar dos ImageButton” claro que no, en el código java lo llamaremos de tal forma que al hacer clic pasara de ON a OFF.
Como ya es de costumbre les dejo código del activity_main:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context="com.androidmorefast.pc.applinterna.MainActivity">
<ImageButton
android:id="@+id/btnOnOff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:background="@color/background"
android:scaleType="fitCenter"
app:srcCompat="@drawable/off"
tools:layout_editor_absoluteX="66dp"
tools:layout_editor_absoluteY="71dp" />
</android.support.constraint.ConstraintLayout>
Ahora tienen que ir a la siguiente ruta res luego values por ultimo el archivo color ahí deben agregar
un color llamado background esto es para que los botones sean del mismo color que el fondo de la app y esta sea vea mas estética.
Aquí les dejo el código:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="background">#dddddd</color>
</resources>
Ahora debemos agregar unos permisos en nuestro AndroidManifest
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera.flash" />
Y por ultimo tenemos el código de nuestro MainActivity
import android.Manifest;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
public class MainActivity extends AppCompatActivity {
ImageButton btnlinterna;
Camera camera;
Camera.Parameters parameters;
boolean isFlash = false;
boolean isOn = false;
@Override
protected void onStop() {
super.onStop();
if(camera != null){
camera.release();
camera = null;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnlinterna = (ImageButton)findViewById(R.id.btnOnOff);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA,}, 1000);
} else {
if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
camera = Camera.open();
parameters = camera.getParameters();
isFlash = true;
}
btnlinterna.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if (isFlash) {
if (!isOn) {
btnlinterna.setImageResource(R.drawable.on);
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
isOn = true;
} else {
btnlinterna.setImageResource(R.drawable.off);
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
isOn = false;
}
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Error");
builder.setMessage("flash no compatible");
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}
});
} }
}
Y con eso hemos culminado solo les queda hacer clic en su botón para encender u apagar su linterna.
como hacer una aplicación que lea archivos pdf online en android studio
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
No enciende el flash estoy ejecutando la app en android 7.1.1 podrías ayudarme?
Javier revisa tu LogCat, que error te da para poder ayudarte.
Hola, una duda, después de que doy permisos no puedo encender el flash, es necesario que cierre y abra de nuevo la app, ¿Que puedo hacer para no tener que reiniciar la app?, gracias.
Empiezo comentando que hay muchas aplicaciones así, pero en este caso te recomiendo juegues un poco con la condicional if del permiso, prometo actualizarlo…ya tiene varios años este post, saludos.
Buenas, primero que nada me funcionó perfectamente. Pero tengo dos problemas.
• Si la pantalla se bloquea, se apaga la luz.
• Luego de desbloquear o minimizar la app sin cerrarla, al precionar el botón la app chashea.
Se puede restaurar el botón a su estado original si se cierra la app para que no crashee?