2013-05-27 6 views
18

Ich habe eine Frage zum Download-Manager. Ich werde eine Datei von einer Website herunterladen. Wenn ich das Standardverzeichnis für den Download (Environment.DIRECTORY_DOWNLOAD) festlege, funktioniert alles einwandfrei und mein Download wird gestartet. Aber wenn ich versuche, das Verzeichnis zu ändern, lädt meine App die Datei nicht herunter. Insbesondere möchte ich, dass meine Datei in einen Ordner innerhalb eines Downloads verschoben wird, zum Beispiel/storage/sdcard/Download/myFolder. Wie kann ich das beheben?Set benutzerdefinierte Ordner Android Download Manager

File mydownload = new File (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+ "/myFolder"); 

if (!mydownload.exists()){ 
    mydownload.mkdir(); 
} 

String url = sUrl[0]; 
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    request.allowScanningByMediaScanner(); 
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
} 

request.setDestinationInExternalPublicDir(mydownload.getAbsolutePath(),"Myfile.extension"); 


DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
manager.enqueue(request); 

Antwort

75

Check Code unten: seine Datei in "sdcard/dhaval_files/" speichern. Ersetzen Sie einfach Ihren Ordnernamen und geben Sie die Berechtigung write_external_storage in der android-Manifestdatei ein.

public void file_download(String uRl) { 
     File direct = new File(Environment.getExternalStorageDirectory() 
       + "/dhaval_files"); 

     if (!direct.exists()) { 
      direct.mkdirs(); 
     } 

     DownloadManager mgr = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE); 

     Uri downloadUri = Uri.parse(uRl); 
     DownloadManager.Request request = new DownloadManager.Request(
       downloadUri); 

     request.setAllowedNetworkTypes(
       DownloadManager.Request.NETWORK_WIFI 
         | DownloadManager.Request.NETWORK_MOBILE) 
       .setAllowedOverRoaming(false).setTitle("Demo") 
       .setDescription("Something useful. No, really.") 
       .setDestinationInExternalPublicDir("/dhaval_files", "test.jpg"); 

     mgr.enqueue(request); 

    } 
+0

Vielen Dank! Jetzt funktioniert es;) – bott91

+30

... so markieren Sie die Antwort als akzeptiert. – Danation

+0

Illegalstate Ausnahme kann Verzeichnis –

6

Es stehen Ihnen zwei Optionen zur Verfügung.

1) erste setDestinationInExternalPublicDir Dies wird Sie in einem der Androids Standard-Download-Ordner basierend auf Medientyp z. B. DIRECTORY_DOWNLOADS, DIRECTORY_MUSIC herunterladen können. Diese Dateien bleiben nach der Deinstallation erhalten.

Das erste Argument sollte ein Standard-Download-Verzeichnis sein, damit dieses ordnungsgemäß funktioniert und nichts anderes sein kann.

2) zweite ist setDestinationInExternalFilesDir Dies ist das gleiche wie die vorherige Methode mit dem Unterschied, dass diese Dateien nach Deinstallation der App gelöscht werden.

Hier kann das zweite Argument null oder eines der Android-Download-Verzeichnisse sein.

0

Versuchen Sie unten Code :.

String storagePath = Environment.getExternalStorageDirectory() 
         .getPath() 
         + "/Directory_name/"; 
       //Log.d("Strorgae in view",""+storagePath); 
       File f = new File(storagePath); 
       if (!f.exists()) { 
        f.mkdirs(); 
       } 
       //storagePath.mkdirs(); 
       String pathname = f.toString(); 
       if (!f.exists()) { 
        f.mkdirs(); 
       } 
//    Log.d("Storage ",""+pathname); 
       dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
       Uri uri = Uri.parse(image); 
       checkImage(uri.getLastPathSegment()); 
       if (!downloaded) { 
        DownloadManager.Request request = new DownloadManager.Request(uri); 
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 

        request.setDestinationInExternalPublicDir("/Directory_name", uri.getLastPathSegment()); 
        Long referese = dm.enqueue(request); 

        Toast.makeText(getApplicationContext(), "Downloading...", Toast.LENGTH_SHORT).show(); 
       } 
Verwandte Themen