Tenho um aplicativo com React Native que é acessado por várias versões do Android desde o Android 8 até o mais atual (Tiramisu) a poucos dias recebi um chamado informando que alguns usuários não estavam acessar uma feature que visualizava um PDF. Foi então que descobri que o esquema de permissões antes usando no Android Manifest(AM) mudou.
Antes basicamente precisávamos colocar esse trecho de código no AM.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
E só com isso conseguimos utilizar, acontece que hoje essas permissões não são mais necessárias e pesquisando um pouco tive muita dificuldade em encontrar uma solução simples que resolvesse nosso problema.
Vamos a solução...
Para garantir que versões mais antigas ainda funciona da forma padrão é importante que adicionemos a seguinte flag no AM dentro da tag application:
android:requestLegacyExternalStorage="true" isso vai garantir o suporte para versões mais antigas.
Para o Tiramisu nosso ajuste é a nível de código, vamos precisar checar a versão do Android do usuário e estou usando a biblioteca 'react-native-device-info'.
import DeviceInfo from 'react-native-device-info';
export default App(){
let deviceVersion = DeviceInfo.getSystemVersion();
function downloadPdf(){
if (Platform.OS === 'android') {
if (Number(deviceVersion) >= 13) {
setLoading(false);
const filePath = await funcaoParaDownloadPDF();
setPathPDF(filePath);
} else {
const permissao = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE);
if (permissao === PermissionsAndroid.RESULTS.GRANTED) {
setLoading(false);
const filePath = await funcaoParaDownloadPDF();
setPathPDF(filePath);
} else {
setLoading(false);
Alert.alert('Permissão negada', 'É necessário dar permissão para exibir o PDF');
navigation.goBack();
}
}
}
}
return (
// Seu app aqui
)
}
Essas checagens verificam a versão do sistema e a mesma for Android 13 ela não precisa de pedir permissão pois por padrão essa versão de sistema já fornece. Caso seja inferior ai seguimos pedindo permissão.
Top comments (1)
Very useful!