2017-12-30 86 views
3

다운로드 관리자를 사용하여 zip 파일을 다운로드하고 싶습니다.이 코드를 사용하면 알림 파일을 다운로드하고 나중에 다운로드가 실패한 것으로 나타납니다. 나는 다음과 같은 권한을 준 읽고 다음과 같이 외부 directory.My 코드는 쓰기 :다운로드 매니저를 사용하여 zip 파일 다운로드

   if(DownloadTask.readAndWriteExternalStorage(context)){ 
        downloadManager= 
       (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE); 
        Uri uri=Uri.parse("url of zip"); 
        DownloadManager.Request request= new 
             DownloadManager.Request(uri); 




    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE| 
           DownloadManager.Request.NETWORK_WIFI); 
        request.setVisibleInDownloadsUi(true); 
        request.setTitle("Example"); 
        request.setDescription("Downloading a very large zip"); 

        request.setAllowedOverRoaming(true); 
        request.setMimeType("df.zip"); 
        request.allowScanningByMediaScanner(); 





    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, 
       "df.zip"); 
        request.setNotificationVisibility(DownloadManager. 
      Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
        Long reference=downloadManager.enqueue(request); 
       } 

답변

2
 I solved the issue like this: 
    DownloadManager downloadManager; 

private int count = 0; 
    private long Zip_DownloadId,imid; 
    Uri uri = 

Uri.parse("http://website//"+rowItems.get(i).get("Attachments")); 
       if (uri.toString().endsWith(".jpg")) { 
        imid=DownloadData(uri, view); 
        Check_Image_Status(imid); 
       } else if (uri.toString().endsWith(".png")) { 
        imid=DownloadData(uri, view); 
        Check_Image_Status(imid); 
       } else if (uri.toString().endsWith(".jpeg")) { 
        imid=DownloadData(uri, view); 
        Check_Image_Status(imid); 

       } else if (uri.toString().endsWith(".zip")) { 
        Zip_DownloadId = DownloadData(uri, view); 
        Check_Zip_Status(Zip_DownloadId); 
       } 
       Toast.makeText(getApplicationContext(),uri.toString(),Toast.LENGTH_LONG).show(); 


      } 


     }); 


     downloadReceiver = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 

       //check if the broadcast message is for our Enqueued download 
       long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 

       if (referenceId == imid) { 

        Toast toast = Toast.makeText(SupportTicketViewActivity.this, 
          "Image Download Complete", Toast.LENGTH_LONG); 
        toast.setGravity(Gravity.TOP, 25, 400); 
        toast.show(); 

       } else if (referenceId == Zip_DownloadId) { 
        Toast toast = Toast.makeText(SupportTicketViewActivity.this, 
          "Zip Download Complete", Toast.LENGTH_LONG); 
        toast.setGravity(Gravity.TOP, 25, 400); 
        toast.show(); 
       } 

      } 
     }; 
     return view; 
    } 


    private void Check_Zip_Status(long Zip_DownloadId) { 

     DownloadManager.Query ZipDownloadQuery = new DownloadManager.Query(); 
     //set the query filter to our previously Enqueued download 
     ZipDownloadQuery.setFilterById(Zip_DownloadId); 

     //Query the download manager about downloads that have been requested. 
     Cursor cursor = downloadManager.query(ZipDownloadQuery); 
     if (cursor.moveToFirst()) { 
      DownloadStatus(cursor, Zip_DownloadId); 
     }} 


    private void Check_Image_Status(long imid) { 
     DownloadManager.Query ImageDownloadQuery = new DownloadManager.Query(); 
     //set the query filter to our previously Enqueued download 
     ImageDownloadQuery.setFilterById(imid); 

     //Query the download manager about downloads that have been requested. 
     Cursor cursor = downloadManager.query(ImageDownloadQuery); 
     if(cursor.moveToFirst()){ 
      DownloadStatus(cursor, imid); 
     } 
    } 

    private void DownloadStatus(Cursor cursor, long DownloadId) { 
     int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS); 
     int status = cursor.getInt(columnIndex); 
     //column for reason code if the download failed or paused 
     int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON); 
     int reason = cursor.getInt(columnReason); 
     //get the download filename 
     int filenameIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME); 
     String filename = cursor.getString(filenameIndex); 

     String statusText = ""; 
     String reasonText = ""; 

     switch(status){ 
      case DownloadManager.STATUS_FAILED: 
       statusText = "STATUS_FAILED"; 
       switch(reason){ 
        case DownloadManager.ERROR_CANNOT_RESUME: 
         reasonText = "ERROR_CANNOT_RESUME"; 
         break; 
        case DownloadManager.ERROR_DEVICE_NOT_FOUND: 
         reasonText = "ERROR_DEVICE_NOT_FOUND"; 
         break; 
        case DownloadManager.ERROR_FILE_ALREADY_EXISTS: 
         reasonText = "ERROR_FILE_ALREADY_EXISTS"; 
         break; 
        case DownloadManager.ERROR_FILE_ERROR: 
         reasonText = "ERROR_FILE_ERROR"; 
         break; 
        case DownloadManager.ERROR_HTTP_DATA_ERROR: 
         reasonText = "ERROR_HTTP_DATA_ERROR"; 
         break; 
        case DownloadManager.ERROR_INSUFFICIENT_SPACE: 
         reasonText = "ERROR_INSUFFICIENT_SPACE"; 
         break; 
        case DownloadManager.ERROR_TOO_MANY_REDIRECTS: 
         reasonText = "ERROR_TOO_MANY_REDIRECTS"; 
         break; 
        case DownloadManager.ERROR_UNHANDLED_HTTP_CODE: 
         reasonText = "ERROR_UNHANDLED_HTTP_CODE"; 
         break; 
        case DownloadManager.ERROR_UNKNOWN: 
         reasonText = "ERROR_UNKNOWN"; 
         break; 
       } 
       break; 
      case DownloadManager.STATUS_PAUSED: 
       statusText = "STATUS_PAUSED"; 
       switch(reason){ 
        case DownloadManager.PAUSED_QUEUED_FOR_WIFI: 
         reasonText = "PAUSED_QUEUED_FOR_WIFI"; 
         break; 
        case DownloadManager.PAUSED_UNKNOWN: 
         reasonText = "PAUSED_UNKNOWN"; 
         break; 
        case DownloadManager.PAUSED_WAITING_FOR_NETWORK: 
         reasonText = "PAUSED_WAITING_FOR_NETWORK"; 
         break; 
        case DownloadManager.PAUSED_WAITING_TO_RETRY: 
         reasonText = "PAUSED_WAITING_TO_RETRY"; 
         break; 
       } 
       break; 
      case DownloadManager.STATUS_PENDING: 
       statusText = "STATUS_PENDING"; 
       break; 
      case DownloadManager.STATUS_RUNNING: 
       statusText = "STATUS_RUNNING"; 
       break; 
      case DownloadManager.STATUS_SUCCESSFUL: 
       statusText = "STATUS_SUCCESSFUL"; 
       reasonText = "Filename:\n" + filename; 
       break; 
     } 

     if (DownloadId == Zip_DownloadId) { 

      Toast toast = Toast.makeText(SupportTicketViewActivity.this, 
        "Zip Download Status:" + "\n" + statusText + "\n" + 
          reasonText, 
        Toast.LENGTH_LONG); 
      toast.setGravity(Gravity.TOP, 25, 400); 
      toast.show(); 

     } else { 

      Toast toast = Toast.makeText(SupportTicketViewActivity.this, 
        "Image Download Status:" + "\n" + statusText + "\n" + 
          reasonText, 
        Toast.LENGTH_LONG); 
      toast.setGravity(Gravity.TOP, 25, 400); 
      toast.show(); 


      // Make a delay of 3 seconds so that next toast (Music Status) will not merge with this one. 
      final Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
       } 
      }, 3000); 

     } 

    } 

} 

    private long DownloadData(Uri uri, View view) { 
     long downloadReference; 

     downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE); 
     DownloadManager.Request request = new DownloadManager.Request(uri); 

     //Setting title of request 
     request.setTitle("Data Download"); 

     //Setting description of request 
     request.setDescription("Android Data download using DownloadManager."); 

     //Set the local destination for the downloaded file to a path within the application's external files directory 

     if(uri.toString().endsWith(".jpg")) { 
      request.setDestinationInExternalFilesDir(SupportTicketViewActivity.this, Environment.DIRECTORY_DOWNLOADS, "AndroidTutorialPoint.jpg"); 
     }else if (uri.toString().endsWith(".zip")){ 
      request.setDestinationInExternalFilesDir(SupportTicketViewActivity.this, Environment.DIRECTORY_DOWNLOADS, "AndroidTutorialPoint.zip"); 
     }else if(uri.toString().endsWith(".png")) { 
      request.setDestinationInExternalFilesDir(SupportTicketViewActivity.this, Environment.DIRECTORY_DOWNLOADS, "AndroidTutorialPoint.png"); 
     } else if(uri.toString().endsWith(".jpeg")) { 
      request.setDestinationInExternalFilesDir(SupportTicketViewActivity.this, Environment.DIRECTORY_DOWNLOADS, "AndroidTutorialPoint.jpeg"); 
     } //Enqueue download and save the referenceId 
     downloadReference = downloadManager.enqueue(request); 



     return downloadReference; 
    }