Aqui está o meu código até agora:
String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";
AssetManager mgr = getAssets();
try {
String list[] = mgr.list(path);
Log.e("FILES", String.valueOf(list.length));
if (list != null)
for (int i=0; i<list.length; ++i)
{
Log.e("FILE:", path +"/"+ list[i]);
}
} catch (IOException e) {
Log.v("List error:", "can't list" + path);
}
No entanto, embora eu tenha arquivos nesse diretório, ele me retorna list.length = 0 ... alguma idéia?
can't play video error
. Você precisa ir para o seu celular.settings --> apps --> your app --> permissions --> enable storage.
Deve fazer isso manualmente se estiver enfrentando esse erro. Verifique se você possui<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
seu manifesto. Para as pessoas que estão enfrentandoNullPointerException
- você está tentando acessar os arquivos no armazenamento interno do aplicativo, que são privados, desculpe-os por não poder fazer isso.Acabei de descobrir que:
new File("/sdcard/").listFiles()
retorna nulo se você não tiver:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
definido no seu arquivo AndroidManifest.xml.
fonte
Bem, as
AssetManager
listas de arquivos dentro daassets
pasta que estão dentro do seu arquivo APK. Então, o que você está tentando listar no seu exemplo acima é [apk] / assets / sdcard / Pictures.Se você colocar algumas imagens dentro da
assets
pasta dentro do seu aplicativo e elas estiverem noPictures
diretório, façamgr.list("/Pictures/")
.Por outro lado, se você tiver arquivos no sdcard que estão fora do seu arquivo APK, na
Pictures
pasta, useFile
o seguinte:E links relevantes dos documentos:
File
Asset Manager
fonte
Além de todas as respostas acima:
Se você estiver no Android 6.0+ (API Nível 23+), solicite explicitamente permissão para acessar o armazenamento externo. Simplesmente ter
no seu manifesto não será suficiente. Você também solicitou ativamente a permissão em sua atividade:
Eu recomendo a leitura: http://developer.android.com/training/permissions/requesting.html#perm-request
fonte
Você
path
não está na pasta de ativos. Você enumera arquivos na pasta de ativos por meio deAssetManager.list()
ou enumera arquivos no seu cartão SD por meio deFile.list()
fonte
ou
fonte
Tente o seguinte:
fonte
Há duas coisas que podem estar acontecendo:
READ_EXTERNAL_STORAGE
permissão ao seuAndroidManifest.xml
fonte
Tente esse
fonte
Se você está no Android 10 / Q e fez todas as ações corretas para solicitar permissões de acesso para ler o armazenamento externo e ainda não funcionar, vale a pena ler esta resposta:
O Android Q (10) solicita permissão para acessar todo o armazenamento. Armazenamento com escopo
Eu tinha código de trabalho, mas meu dispositivo assumiu a responsabilidade de atualizar quando estava em uma conexão de rede (geralmente sem conexão). Uma vez no Android 10, o acesso ao arquivo não funcionava mais. A única maneira fácil de corrigi-lo sem reescrever o código foi adicionar esse atributo extra ao manifesto, conforme descrito. O acesso ao arquivo agora funciona como no Android 9 novamente. YMMV, provavelmente não continuará funcionando em versões futuras.
fonte