Je souhaite télécharger un fichier, puis l'enregistrer sur la carte SD de l'appareil. J'utilise getExternalFilesDir() pour cela, qui est également recommandé par le groupe de développeurs Android, mais lorsque je lance mon application, un répertoire est créé pour le package de l'application dans les deux emplacements (carte SD et mémoire interne), mais le fichier est enregistré dans la mémoire interne.Essayer d'enregistrer le fichier téléchargé dans la carte SD en utilisant getExternalFilesDir(), Android
0
A
Répondre
0
Utilisez ce fil pour télécharger:
private class DownloadFile extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... Url) {
int count;
try {
URL url = new URL(Url[0]);
URLConnection connection = url.openConnection();
connection.connect();
int fileLength = connection.getContentLength();
String folder_main = "TEST1";
File f = new File(Environment.getExternalStorageDirectory(), folder_main);
if (!f.exists()) {
f.mkdirs();
}
int lenghtOfFile = connection .getContentLength();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(),
8192);
// Save the downloaded file
OutputStream output = new FileOutputStream(f + "/"
+ movie_name_b);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
// After this onProgressUpdate will be called
publishProgress((int) (total * 100/fileLength));
// writing data to file
output.write(data, 0, count);
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
}
catch (Exception e) {
// Error Log
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String file_url) {
}
}
Execute:
new DownloadFile().execute(URL_TO_DOWNLOAD);
Il va créer un nom de dossier dans votre carte Test1 SD. et ne pas oublier d'ajouter des autorisations dans le manifeste:
0
Vous pouvez utiliser Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS) pour enregistrer les fichiers dans le répertoire de téléchargement de votre carte SD.
Comme mentionné dans une autre réponse. J'ai essayé cela aussi, mais cela ne semble pas fonctionner. 'Environment.getExternalStorageDirectory()' et 'getExternalFilesDir()', les deux auraient dû fonctionner, mais ils enregistrent le fichier dans la mémoire interne. – Fragger
sur quelle version de l'API vous vérifiez? –