2017-03-27 4 views
0

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

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

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

+0

sur quelle version de l'API vous vérifiez? –

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.