Qual é a diferença entre shouldShowRequestPermissionRationale e requestPermissions?
Estou criando um aplicativo que requer a localização do usuário. Estou seguindo a documentação de treinamento do Android emaqui que diz:
shouldShowRequestPermissionRationale
retornar o booleano indicando se devemos ou não mostrar a interface do usuário com razão para solicitar uma permissão (permissão perigosa, ACCESS_FINE_LOCATION)
Agora neste código (extraído da própria documentação):
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
[MY DÚVIDA] Esta parte do código não deve (abaixo)
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
estar dentro da condição 'if' aqui ..
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
//HERE .....
}
Quero dizer, se
ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)
é verdade, precisamos mostrar a interface do usuário e mostraremos a interface
ActivityCompat.requestPermissions(thisActivity,
newString[{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
Por favor, explique onde estou enganado. Eu estou preso aqui. Desde já, obrigado. Um exemplo seria muito apreciado.
Nota: é claro que estou executando meu aplicativo no Android M e meu sdk de destino é> = 23.