重定向时Android DownloadManager无法正常工作



我正在使用一个应用程序,该应用程序通过OAuth 2进行认证后,通过Rails Heroku Server下载存储在Amazon S3上的ZIP文件。这是流程:

  1. 请求通过在Heroku上通过Heroku上运行的服务器进行身份验证oauth2。
  2. 接收oauth2访问令牌。
  3. 请求从服务器下载zip文件(通过oauth代币作为承载)。
  4. 服务器授权请求并重定向到Amazon S3包含到期签名的URL(阻止任何人下载内容而无需认证)。

在这一点上,我希望下载管理程序只遵循重定向并从S3获取zip文件,但是失败了。有什么办法可以解决这个问题吗?还是只是下载管理器的限制?

我是Android的新手,但仍然没有完全采用最佳调试方法,因此我没有太多的输出来向您展示。但是,DownloadManager.COLUMN_STATUS == DownloadManager.STATUS_FAILEDDownloadManager.COLUMN_REASON似乎正在返回"占位符"!

编辑 - 这是我正在使用的代码。编辑以隐藏客户等...

    @Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Log.i("ChapterListActivity", "Item clicked: " + id);

    final DownloadManager downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
    Uri uri = Uri.parse("http://myapphere.herokuapp.com/api/v1/volumes/2.zip");
    DownloadManager.Request request = new Request(uri);
    String accessToken = getSharedPreferences("keyhere", MODE_PRIVATE).getString("access_token", null); 
    Log.i("SLEChapterListActivity", "Getting file with access token... " + accessToken);
    request.addRequestHeader("Authorization", "Bearer " + accessToken);
    long reference = downloadManager.enqueue(request);
    IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            long downloadReference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
            Log.i("ChapterListActivity", "Download completed");

            Query query = new Query();
            query.setFilterById(downloadReference);
            Cursor cur = downloadManager.query(query);
            if (cur.moveToFirst()) {
            int columnIndex = cur.getColumnIndex(DownloadManager.COLUMN_STATUS);
            if (DownloadManager.STATUS_SUCCESSFUL == cur.getInt(columnIndex)) {
                String uriString = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                File mFile = new File(Uri.parse(uriString).getPath());
            } else if (DownloadManager.STATUS_FAILED == cur.getInt(columnIndex)){
                String statusResult = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_REASON));
                Toast.makeText(context, "FAILED " + statusResult, Toast.LENGTH_SHORT).show();
            } else if (DownloadManager.ERROR_TOO_MANY_REDIRECTS == cur.getInt(columnIndex)){
                String statusResult = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_REASON));
                Toast.makeText(context, "TOO MANY REDIRS " + statusResult, Toast.LENGTH_SHORT).show();
            }
        }
        }
    };
    registerReceiver(receiver, filter);
}   

我在下载管理器源(第500行)中发现:

3xx:重定向(下载管理器未使用)

尚未支持。

在我当前的项目中,下载以两个步骤进行:

  1. 通过oauth2
  2. 从我们自己的服务器获取Amazon URL
  3. Amazon URL带有Amazon url的顾问下载。

如果您不喜欢两个步骤的过程,我不喜欢,然后看看Robospice项目,它具有与下载Manager相似的理念。

只是回答这个问题的一个子部分。您之所以将原因作为"占位符"字符串的原因是因为原因列是整数,而不是字符串。请参阅Android Downloadmanager:下载失败,但是Column_Reason仅返回"占位符"。

相关内容

  • 没有找到相关文章

最新更新