Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created April 23, 2019 15:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/d367cbc875d747763fa0baa00630047e to your computer and use it in GitHub Desktop.
Save parzibyte/d367cbc875d747763fa0baa00630047e to your computer and use it in GitHub Desktop.
package me.parzibyte.leercodigosdebarras;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final int CODIGO_PERMISOS_CAMARA = 1, CODIGO_INTENT = 2;
private boolean permisoCamaraConcedido = false, permisoSolicitadoDesdeBoton = false;
private TextView tvCodigoLeido;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
verificarYPedirPermisosDeCamara();
Button btnEscanear = findViewById(R.id.btnEscanear);
tvCodigoLeido = findViewById(R.id.tvCodigoLeido);
btnEscanear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!permisoCamaraConcedido) {
Toast.makeText(MainActivity.this, "Por favor permite que la app acceda a la cámara", Toast.LENGTH_SHORT).show();
permisoSolicitadoDesdeBoton = true;
verificarYPedirPermisosDeCamara();
return;
}
escanear();
}
});
}
private void escanear() {
Intent i = new Intent(MainActivity.this, ActivityEscanear.class);
startActivityForResult(i, CODIGO_INTENT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == CODIGO_INTENT) {
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
String codigo = data.getStringExtra("codigo");
tvCodigoLeido.setText(codigo);
}
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case CODIGO_PERMISOS_CAMARA:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Escanear directamten solo si fue pedido desde el botón
if (permisoSolicitadoDesdeBoton) {
escanear();
}
permisoCamaraConcedido = true;
} else {
permisoDeCamaraDenegado();
}
break;
}
}
private void verificarYPedirPermisosDeCamara() {
int estadoDePermiso = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA);
if (estadoDePermiso == PackageManager.PERMISSION_GRANTED) {
// En caso de que haya dado permisos ponemos la bandera en true
// y llamar al método
permisoCamaraConcedido = true;
} else {
// Si no, pedimos permisos. Ahora mira onRequestPermissionsResult
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CAMERA},
CODIGO_PERMISOS_CAMARA);
}
}
private void permisoDeCamaraDenegado() {
// Esto se llama cuando el usuario hace click en "Denegar" o
// cuando lo denegó anteriormente
Toast.makeText(MainActivity.this, "No puedes escanear si no das permiso", Toast.LENGTH_SHORT).show();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment