Como o acesso ao armazenamento é alterado no Android 6?
O Android teve muitas alterações em como lidar com o cartão SD e o armazenamento em geral:
API 3 - você obtém todo o acesso, sem permissão necessáriaAPI 4-15 - você precisa usar WRITE_EXTERNAL_STORAGE e obtém todo o acesso.API 16-18 - se você deseja apenas ler, use READ_EXTERNAL_STORAGEAPI 19-20 - você não pode ler ou gravar no armazenamento externo secundário (cartão SD), a menos que seu aplicativo seja um sistema, ou você tenha root.API 21-22 - para acessar o cartão SD, você precisa pedir permissão ao usuário e usar a API DocumentFile em vez da API de arquivos. Isso gerou muitas perguntas, como escrevi sobreaqui, aqui eaqui.A partir da API 23 (Android 6), as coisas parecem mudar mais uma vez ...
O problemaPara a API 23, há pelo menos duas coisas novas e relacionadas ao armazenamento:
"Dispositivos de armazenamento adotáveis"- O usuário pode opcionalmente fazer o cartão SD como algo parecido com o armazenamento externo primário.Como parte donovo mecanismo de permissões (solicitando permissões em tempo de execução), parece que o armazenamento também é uma permissão que o usuário precisa confirmar. Isso é para READ_EXTERNAL_STORAGE e WRITE_EXTERNAL_STORAGEComo não existe um dispositivo Android 6 com cartão SD, e como o emulador realmente não tem a capacidade de usar um cartão SD, ainda é impossível saber o que está acontecendo.
As questõesO cartão SD obterá o acesso usando a API do arquivo em vez do DocumentFile?
Se eu quiser acessar todos os caminhos de armazenamento externo (incluindo cartão SD), isso significa que preciso solicitar essas permissões duas vezes: uma para o armazenamento externo primário e outra para o cartão SD?
Os arquivos no cartão SD estão acessíveis de alguma forma antes da concessão manual da permissão?
Suponha que o usuário tenha escolhido usar "Dispositivos de armazenamento adotáveis", o que significa para as várias funções que recuperam os caminhos dos arquivos do aplicativo? Por exemplo: getFilesDir, getExternalFilesDir, ...? O oder de getExternalFilesDirs mudaria por causa disso?
O que acontece com os arquivos do aplicativo quando o usuário move o aplicativo de / para o cartão SD (usando os "Dispositivos de armazenamento adotáveis")? E os arquivos do aplicativo no cartão SD? Eles ficariam? Ou eles se mudariam para algum lugar?
Por exemplo, se o aplicativo tiver "file1.txt" no cartão SD, no caminho "/ storage / extSdCard / Android / data / appPackageName" e tiver um arquivo "file2.txt" (ou mesmo o mesmo nome) no armazenamento externo primário no caminho "/ storage / emulated / 0 / Android / data / appPackageName". Após a troca, o que aconteceria com esses arquivos? Como eles se fundiriam em uma única pasta?
Ao mover o aplicativo para o cartão SD (usando "Dispositivos de armazenamento adotáveis"), isso significa que nenhum armazenamento interno será usado?