Android DownloadManager funktioniert bei Umleitung nicht
Ich arbeite an einer App, die nach der Authentifizierung über oAuth 2 eine auf Amazon S3 gespeicherte Zip-Datei über einen Rails Heroku-Server herunterlädt.
Fordern Sie die Authentifizierung bei dem Server an, der über oAuth2 auf Heroku ausgeführt wird.OAuth2-Zugriffstoken erhaltenAnforderung zum Herunterladen der ZIP-Datei vom Server (Weitergabe des oAuth-Tokens als Träger).Der Server autorisiert die Anforderung und leitet sie an eine Amazon S3-URL weiter, die eine auslaufende Signatur enthält (um das Herunterladen von Inhalten ohne Authentifizierung zu verhindern).An dieser Stelle möchte ich, dass der DownloadManager nur der Umleitung folgt und die Zip-Datei von S3 abruft, aber dies schlägt fehl. Kann ich das irgendwie umgehen? Oder ist es nur eine Einschränkung von DownloadManager?
Ich bin neu in Android und bin immer noch nicht ganz mit den besten Debugging-Methoden vertraut. Daher habe ich nicht viel zu zeigen. Es scheint jedoch soDownloadManager.COLUMN_STATUS == DownloadManager.STATUS_FAILED
undDownloadManager.COLUMN_REASON
gibt "placeholder" zurück!
BEARBEITEN - Hier ist der Code, den ich verwende. Bearbeitet, um den Client usw. zu verbergen ...
@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);
}