lunes, enero 02, 2017

Solicitar permisos en Android en tiempo de ejecución más fácilmente

Feliz año a todos.

Hace tiempo que quería compartir con ustedes un forma más sencilla para solicitar permisos en tiempo de ejecución y con menos código o al menos, para no repetir tanto los métodos de solicitud de permisos en todos lados.

En este enlace pueden descargar el fragmento que hace la magia.

Extiende tu fragment de RequestPermissionFragment, implementa los métodos en tu Fragmento, lo que tienes que hacer en tu Fragmento concreto es solicitar el(los) permiso(s) y luego  verificar el permiso que quieras con ActivityCompat.checkSelfPermission, algo así:

/** * Request fine location permission */private void requestFineLocationPermission() 
{
   requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_CODE_ACCESS_FINE_LOCATION);
}


/** * Set settings of google map UI */private void setGoogleMapUISettings() {
   
   if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
      return;   
}
Si la aplicación no tiene permiso va a retornar y no hará nada. Pero los métodos extendidos de  se ejecutarán y podrás mostrar tus diálogos.

/** * Handled when all permissions requested are granted * * @param requestCode Request code */
@Overridepublic void onPermissionsGranted(int requestCode) {
   //cool nothing happens}

/** * Gets whether you should show UI with rationale for requesting a permission. * You should do this only if you do not have the permission and the context in which * the permission is requested does not clearly communicate to the user what would be the * benefit from granting this permission. */
@Overridepublic void onShouldShowRequestPermissionsRationale() {
   showRationaleLocationDialog();}

/** * Handled when all permissions requested are denied * * @param requestCode Request code */

@Override
public void onPermissionsDenied(int requestCode) {
   makeSnackBarSettings(coordinatorLayout, R.string.permission_location);
}

Espero les sea de utilidad.

Happy coding.