Me enfrenté al mismo problema. Hay dos tipos de permisos en Android:
- Peligroso (acceso a contactos, escritura en almacenamiento externo ...)
- Normal (los permisos normales son aprobados automáticamente por Android, mientras que los permisos peligrosos deben ser aprobados por los usuarios de Android).
Aquí está la estrategia para obtener permisos peligrosos en Android 6.0
- Compruebe si tiene el permiso otorgado
- Si su aplicación ya tiene el permiso, continúe y realice normalmente.
- Si su aplicación aún no tiene el permiso, solicite al usuario que apruebe
- Escuche la aprobación del usuario en
onRequestPermissionsResult
Aquí está mi caso: necesito escribir en un almacenamiento externo.
Primero, verifico si tengo el permiso:
...
private static final int REQUEST_WRITE_STORAGE = 112;
...
boolean hasPermission = (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(parentActivity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
}
Luego verifique la aprobación del usuario:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case REQUEST_WRITE_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//reload my activity with permission granted or use the features what required the permission
} else
{
Toast.makeText(parentActivity, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
}
}
}
}