2011-08-31 3 views
13

Voglio ottenere che durante il download possa essere messo in pausa, interrotto dall'utente. Come posso ottenere questo risultato con DownloadManager?Come mettere in pausa usando DownloadManager?

+0

Vorrei anche saperlo. Ho provato a interrompere i download con il metodo remove (ids) e sembra funzionare se lo controlliamo nella tabella Download, ma nell'area di notifica viene comunque visualizzato come download. – morphium

+0

La tabella dei download di cui sto parlando è accessibile usando questo: Intento i = new Intent(); \t \t \t \t i.setAction (DownloadManager.ACTION_VIEW_DOWNLOADS); startActivity (i); – morphium

+0

Sono nuovo ad Android, ma ho creato un gestore di download usando C++ Qt, ecco il link alla mia implementazione, se pensate di implementare il download manager da soli, allora potrebbe essere d'aiuto. http://kunalmaemo.blogspot.com/2010/05/simple-download-manager-in-qt-with.html – Kunal

risposta

1

Intendi farlo nell'applicazione Web?

Sto pensando anche alla stessa cosa. Questo potrebbe essere stato possibile con flash o sliverlight ecc., Ma in puro HTML?

Sul lato server è possibile utilizzare RandomAccessFileReader (Apache) o FileReader simile (in byte) per accedere al file e scrivere sul flusso di output. Possiamo ricordare quanti byte sono stati scaricati nella sessione precedente anche dall'utente. Ma il problema è che non esiste un modo standard per salvare il file su disco nel file system locale del client. È possibile utilizzare ActiveX Object in IE per scrivere un file purché si tratti di un file sequenziale (testo normale) e non di un file binario (come mp3, flv ecc.). Ma questo ActiveX non è una soluzione. Quindi potrebbe essere necessario progettare qualcosa come "Downloader" per il tuo sito web. Proprio come Youtube Downloader.

+1

Sto parlando dell'API per DownloadManager in Android. Voglio sapere che DownloadManager ha api su pausa/ripresa. –

2

Potrebbe essere che "mettere in pausa" non è esattamente necessario per te? Come DownloadManager effettivamente riprendere il doesn't need to pause.

Invece si potrebbe essere inciampato con la ripresa? Vedere se questo aiuta:

how to resume an interrupted download dove la soluzione sta attuando una richiesta di intestazione Intervallo ...

// Open connection to URL. 
HttpURLConnection connection = 
     (HttpURLConnection) url.openConnection(); 

// Specify what portion of file to download. 
connection.setRequestProperty("Range", "bytes=" + downloaded + "-"); 
// here "downloaded" is the data length already previously downloaded. 

// Connect to server. 
connection.connect(); 

A meno che non è necessario per consentire in realtà "pausa" (a causa di commutazione prioritario il download di file, il mantenimento di un elenco o qualcos'altro di più complicato) e non solo fornire capacità di ripresa, che dovrebbe aiutare.

5

È possibile remove a download dalla coda. Quindi puoi riavviarlo, passando l'intestazione HTTP Range quando la si aggiunge nuovamente alla coda (come TryTryAgain menzionato). Non credo che al momento questo possa essere fatto più facilmente.

+1

Ho provato la tua idea ma sembra che non funzioni o mi sia perso qualcosa di importante. Ottengo i byte di dati che sono stati scaricati e rinominare il file per impedirne la rimozione durante l'esecuzione di downloadmanager.remove (referenceId) nel DownloadManager. E creare nuovamente una richiesta con corrispondente request.addRequestHeader ("Range", "bytes =" + bytesStored + "-"); e accodati di nuovo per creare nuovamente un download. Puoi aiutarmi a riguardo? – Cjames