lunes, 23 de mayo de 2016

[ANDROID] Mensaje con mi ubicación I: Permisos en android 6.0

Basandonos en el post anterior de hacer una llamada desde un botón, esta vez vamos a generar una aplicación que envie un mensaje de texto(SMS) mediante un botón, dicho mensale llevara está vez  las coordenadas de nuestro GPS (para avisarle a alguien donde estamos sin necesidad de darnos mucho a notar, o simplemente si no requerimos hacer mucho para mandar la localización), esto para generar que permita encontrar. Nuestra aplicación estara en tres capitulos que voy a ir escribiendo.

Creamos un proyecto siguiendo las mismas instrucciones que el post anterior con los valores basicos, con la diferencia que esta vez escogeremos una actividad vacía.



Esto para simplificar totalmente el proceso y hacerlo lo mas sencillo posible, ya que este requiere de un poco de mas de trabajo.  Para esto solo pondre un boton con forma de imagen el cual descargue de la pagina de Material Icons.





Para que sea vea como lo vemos en la imagen utilizamos el siguiente codigo al layout 


    

    

Ahora pasaremos al punto fuerte de nuestra primera parte que son los permisos, como ya lo comentaba los permisos en android 6.0 son unos de los cambios mas significativos, en este caso para nuestra aplicación necesitamos dos permisos, que son los permitos para activar la localización así como los permisos que tenemos para el envio de los mensajes, para esto trabajaremos un poco con el codigo de Java. Para esto crearemos un metodo que se llamara verificarPermisos el cual hará el trabajo sucio. Llevara algo como lo siguiente: 

///metodo que usaremos para verificar los permisos
    private boolean verificarPermisos(){
        //preguntamos si los permisos ya estan actividos primero la localizacion y segundo el mensaje de texto
        if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED
         || ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS)!= PackageManager.PERMISSION_GRANTED){
            ///si los permisos no estan pedimos autorización
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.SEND_SMS},1234);
            // retornamos falso ya que los permisos no estan activados y la aplicacion sigue por lo que si ejecutamos algo
            //antes de autorizar nos gerara problemas
            return false;
        }
        return true;
    }

Ahora para ayudar a las versiones anteriores agregaremos al Manifest los permisos que acabamos de verificar. 

 
    

Permisos simplemente verificara si estan activados, si no estan activados los pedira. Algo importante que veremos es que regresamos un falso, esto es porque los metodos no son sincronos por lo que no detiene la aplicación por lo que puede ser que mientras el usuario acepta o no, pueda ocurrior un error por eso se retorna falso. Tambien verificamos que el numero que le pusimos al final como 1234, es un codigo de petición, por lo que se usara para un Callback (metodo que se ejecutara despues de decidir la parte de los permisos), una vez terminado pasaremos a sobrescribir un metodo para los permisos. 

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResult )
    {
        String cadena ="";
        switch (requestCode){
            case 1234: //codigo que mandamos en el Request
                if(grantResult.length>1){
                    if(grantResult[0]!=PackageManager.PERMISSION_GRANTED)
                        cadena += "PERMISO DENEGADO: LOCALIZACION";
                    if(grantResult[1]!=PackageManager.PERMISSION_GRANTED) {
                        cadena += (cadena.isEmpty() ? "PERMISO DENEGADO:" : "");
                        cadena += " SMS ";
                    }
                }else
                    cadena = "NO TIENE PERMISOS LA APLICACION";
        }
        View view  = findViewById(android.R.id.content);
        Snackbar.make(view , cadena.isEmpty()?"Permisos Correctos":cadena,Snackbar.LENGTH_LONG).setAction("Intentar", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                verificarPermisos(); //vuelve a verificar los permisos
            }
        }).setActionTextColor(getResources().getColor(R.color.colorAccent))
        .show();
    }

Este metodo practicamente verfica que los dos permisos esten permitidos de lo contrario mandara un mensaje y el Snackbar podra reiniciar la verificación en caso que queramos nuevamente empezar. 

Para terminar no olvides agregar al metodo onCreate la llamada a verificar los permisos
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        boolean res = verificarPermisos();
        if(res)
            Log.w("ESTADO","Continua normalmente");
    }

https://github.com/cobymotion/MensajedeLocalizacion

No hay comentarios:

Publicar un comentario