Existe uma chamada de API simples que me diga se um aplicativo em execução no Android 10 ou posterior deve usar o acesso ao armazenamento com escopo definido, ou seja, se o acesso normal a arquivos, conhecido como "Armazenamento externo herdado" estiver desativado? Observe que, mesmo que o aplicativo no AndroidManifest.xml, a seção declare:
android:requestLegacyExternalStorage="true"
o acesso ao arquivo ainda pode ser negado devido a alterações na política do Google no futuro. Portanto, testar esse valor é inútil. A única maneira que encontrei é testar se o diretório raiz do armazenamento externo é legível, mas para isso, o aplicativo deve primeiro pedir permissão de armazenamento, que é inútil para qualquer outra coisa, se o armazenamento herdado estiver desativado.
public static boolean mustUseScopedStorage() {
// Impractical must first ask for useless Storage permission...
File exSD = Environment.getExternalStorageDirectory();
return !exSD.canRead(); // this test works only if Storage permission was granted.
}
Acho que já vi uma nova API para detectar isso, mas não consigo mais encontrar esse artigo ...
fonte
an app running on Android 10 or later must use Scoped Storage access
? Você pode explicar o que você quer dizer com isso? Quais funções você tem em mente? Eu sei que, por exemplo volumes de armazenamento e Storage Manager que foram trazidos para N já estão obsoletos para Q.Respostas:
Você pode usar esses dois métodos em
android.os.Environment
:isExternalStorageLegacy(File path)
isExternalStorageLegacy()
Caso descubra que você tem acesso ao armazenamento herdado, pessoalmente acho melhor migrar dados para o armazenamento com escopo definido e usá-lo, pois o armazenamento herdado pode parar de funcionar sem aviso.
fonte