DownloadManager scheint die richtige Wahl für eine App mit vielen Hintergrund-Downloads auf einer flockigen mobilen Internetverbindung zu sein.Android DownloadManager: Download schlägt fehl, aber COLUMN_REASON gibt nur "Platzhalter" zurück
Tutorial Code im Web gefunden, ist die App der Lage, einen Download des Systems DM verlangen etwa so:
// in onCreate()
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
// in requestData()
Uri u = Uri.parse("http://server:8000/feed/data");
Request dreq = new Request(u);
dreq.setNotificationVisibility(Request.VISIBILITY_HIDDEN);
downloadID = dm.enqueue(dreq);
Die URL in diesem Code ein Test-Server auf einem lokalen Computer ist. Die URL funktioniert, der Browser im Android-Emulator kann die Seite abrufen, und der Server gibt den HTTP-Code 200 zurück, wenn meine App diese Seite über den DownloadManager und den oben angegebenen Code anfordert.
Dies ist der entsprechende Code im ACTION_DOWNLOAD_COMPLETE BroadcastReceiver, der aufgerufen wird, wenn DM die Datei abgerufen hat.
Query q = new Query();
q.setFilterById(downloadID);
Log.i("handleData()", "Handling data");
Cursor c = dm.query(q);
if (c.moveToFirst()) {
Log.i("handleData()", "Download ID: " + downloadID + "/" + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_ID)));
Log.i("handleData()", "Download Status: " + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)));
if (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
Log.i("handleData()", "Download URI: " + uriString);
} else if (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_FAILED) {
Log.i("handleData()", "Reason: " + c.getString(c.getColumnIndex(DownloadManager.COLUMN_REASON)));
}
}
Das seltsame Ergebnis ist dieses:
Die DOWNLOAD_STATUS ist 16 (oder STATUS_FAILED), aber der Grund ist "Platzhalter".
Warum ist das? Warum schlägt es fehl, wenn der Server einen 200-Statuscode zurückgegeben hat? Und warum gibt es keinen Grund für den DownloadManager?
wo ich sehen kann, was Grund bedeutet, was – Nick
Es gibt mehrere mögliche Werte in der [DownloadManager API doc] (http://developer.android.com/reference/android/app/DownloadManager.html) - suchen Sie nach " Wert von COLUMN_REASON "auf dieser Seite. – hez