2017-01-22 3 views
0

Я использую класс Android Download Manager для загрузки файла из Интернета. Диспетчер загрузки не показывает ошибку по умолчанию, когда недостаточно места для хранения. Я знаю, как проверить текущие памяти, доступных и сравнить его с текущим размером файла перед загрузкой его с помощью следующего кода:Как использовать Android DownloadManager ERROR_INSUFFICIENT_SPACE?

public boolean isSpaceAvailable(long bytes) { 
    StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); 
    long bytesAvailable = (long) stat.getBlockSize() * (long) stat.getBlockCount(); 

    return true; 
} 

Но я хотел бы использовать ERROR_INSUFFICIENT_SPACE вместо. Как я могу это использовать?

Android DownloadManager

ответ

0

Я нашел решение. У меня есть Cursor, чтобы проверить, если он движется к первой, а затем проверить `COLUMN_STATUS ':

private void checkStatus(Cursor cursor){ 
    //column for status 
    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; 
    } 
    Log.d("Error", statusText + " " + reasonText); 
} 

А затем вызвать метод:

if(cursor.moveToFirst()) checkStatus(cursor); 

Cite: Android Download Manager Example

Смежные вопросы