idm - internet download manager android apk
Controla el orden de descarga de Download Manager en android (1)
Con respecto a esta respuesta, parece que puede cancelar la descarga y luego descargar el resto del archivo. Por ejemplo:
Registre BrodcastReciever para notificarle cuando se complete C:
BroadcastReceiver onComplete = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//check if it is B that is complete
//cancel C
// download E
//check if it is E that is complete
// 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();
}
};
registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
//download A
//download B
//download C
tener un caso de uso como el siguiente:
Hay varios archivos para descargar, por ejemplo, ABCDEF
Cuando se inicia la descarga, digamos que el AB ha finalizado y que C está descargando, me gustaría interrumpir la descarga de C y comenzar la descarga de E
Luego, después de que E haya terminado (si no hay otra interrupción), continúe con CD F.
Hasta el momento de mi investigación solo hay un método de cancelar
downloadManager.remove (downloadReference); ¿Cómo lograr esto a través del gestor de descargas o hay otro enfoque? Gracias
private long startDownload(String url) {
Uri DownloadUri = Uri.parse(url);
String fileName = StorageUtils.getFileNameFromUrl(url);
String destination = null;
downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(
DownloadUri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false);
request.setTitle(fileName);
request.setDescription("com.example.services");
if (StorageUtils.isSDCardPresent()
&& StorageUtils.isSdCardWrittenable()
&& StorageUtils.checkAvailableStorage()) {
destination = StorageUtils.SDCARD_ROOT;
}
try {
StorageUtils.mkdir();
} catch (IOException e) {
e.printStackTrace();
}
request.setDestinationInExternalPublicDir(destination, fileName);
downloadReference = downloadManager.enqueue(request);
Log.d("Downloader","Start download manager: " + destination + fileName);
return downloadReference;
}