如何使用Android DownloadManager ERROR_INSUFFICIENT_SPACE?

时间:2017-01-22 00:47:16

标签: android

我正在使用Android Download Manager类从网上下载文件。当存储空间不足时,默认情况下,下载管理器不会显示错误。我知道如何检查当前可用的存储空间并将其与当前文件大小进行比较,然后使用以下代码进行下载:

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

1 个答案:

答案 0 :(得分: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);

引用:Android Download Manager Example