【问题标题】:Android: what's Download manager File size LimitationsAndroid:什么是下载管理器文件大小限制
【发布时间】:2016-09-02 10:59:28
【问题描述】:

什么是 Downloadmanager 可下载 android 中的文件大小限制,因为我正在尝试下载文件大小 (700MB) 它没有下载但是当我尝试使用 1MB 或 2MB 下载完美。

所以,请帮忙

【问题讨论】:

  • 我认为这取决于设备、操作系统等。您是否尝试检查下载的错误代码?
  • 我怎么知道错误码??
  • 我不明白
  • 你能检查 getRecommendedMaxBytesOverMbile() 方法来获得你最多可以下载的文件的确切大小吗?

标签: android file download size limit


【解决方案1】:

没有文件大小的限制,但可用磁盘空间可能是一个限制。

对于失败的下载,使用DownloadManager.Query 检查下载的COLUMN_STATUSCOLUMN_REASON 值,以确定发生了什么。

this sample app 中,我下载了一个带有DownloadManager 的文件,并且我有一个可以让您查看状态信息的按钮。

当您请求下载时,您会收到一个 int 回复,这是一个下载请求 ID:

lastDownload=mgr.enqueue(req);

当用户点击相应的按钮时,我会查询下载状态,将部分信息记录到 LogCat,并显示Toast

  private void queryStatus(View v) {
    Cursor c=
        mgr.query(new DownloadManager.Query().setFilterById(lastDownload));

    if (c == null) {
      Toast.makeText(getActivity(), R.string.download_not_found,
                     Toast.LENGTH_LONG).show();
    }
    else {
      c.moveToFirst();

      Log.d(getClass().getName(),
            "COLUMN_ID: "
                + c.getLong(c.getColumnIndex(DownloadManager.COLUMN_ID)));
      Log.d(getClass().getName(),
            "COLUMN_BYTES_DOWNLOADED_SO_FAR: "
                + c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)));
      Log.d(getClass().getName(),
            "COLUMN_LAST_MODIFIED_TIMESTAMP: "
                + c.getLong(c.getColumnIndex(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP)));
      Log.d(getClass().getName(),
            "COLUMN_LOCAL_URI: "
                + c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)));
      Log.d(getClass().getName(),
            "COLUMN_STATUS: "
                + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)));
      Log.d(getClass().getName(),
            "COLUMN_REASON: "
                + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON)));

      Toast.makeText(getActivity(), statusMessage(c), Toast.LENGTH_LONG)
           .show();

      c.close();
    }
  }

  private String statusMessage(Cursor c) {
    String msg="???";

    switch (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS))) {
      case DownloadManager.STATUS_FAILED:
        msg=getActivity().getString(R.string.download_failed);
        break;

      case DownloadManager.STATUS_PAUSED:
        msg=getActivity().getString(R.string.download_paused);
        break;

      case DownloadManager.STATUS_PENDING:
        msg=getActivity().getString(R.string.download_pending);
        break;

      case DownloadManager.STATUS_RUNNING:
        msg=getActivity().getString(R.string.download_in_progress);
        break;

      case DownloadManager.STATUS_SUCCESSFUL:
        msg=getActivity().getString(R.string.download_complete);
        break;

      default:
        msg=
            getActivity().getString(R.string.download_is_nowhere_in_sight);
        break;
    }

    return(msg);
  }

【讨论】:

  • 那么我应该把这两种方法放在哪里??
  • @M.Honi:你问了一个例子。我给了你一个。从示例中学习并将其应用于您自己的情况是您的工作。
  • @M.Honi:待定意味着下载应用程序尚未开始下载,AFAIK。
  • 那么我可以检查什么?
  • @M.Honi:没有什么可以“检查”的。您正在将下载工作委派给外部应用程序。该应用程序将做它想做的任何事情。无论出于何种原因,它都会推迟下载此文件。如果您想更好地控制下载过程,请自行下载文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2022-10-18
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多