Android DownloadManager не работает при перенаправлении
я работаю над приложением, которое будет загружать zip-файл, хранящийся в Amazon S3 через сервер Rails Heroku после аутентификации через oAuth 2. Здесь 'поток:
Запрос на аутентификацию на сервере, работающем на Heroku через oAuth2.Получите токен доступа oAuth2.Запросить загрузку zip-файла с сервера (передав токен oAuth в качестве носителя).Сервер авторизует запрос и перенаправляет на URL-адрес Amazon S3, содержащий подпись с истекающим сроком (чтобы никто не загружал контент без проверки подлинности).На этом этапе я хочу, чтобы DownloadManager просто следовал перенаправлению и получал zip-файл от S3, однакоСбой. Есть ли способ, как я могу обойти это? Или это всего лишь ограничение DownloadManager?
Я новичок в Android и до сих пор не совсем в курсе лучших методов отладки, поэтому я неу меня много выходных, чтобы показать вам. Тем не менее, кажется, чтоDownloadManager.COLUMN_STATUS == DownloadManager.STATUS_FAILED
а такжеDownloadManager.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);
}