Administrar la descarga de archivos múltiples con controles básicos de tareas, como pausar, continuar y detener

Quiero integrar la característica de descarga de archivos en mi aplicación Android. He implementado con éxito la transferencia de archivos múltiples usando "IntentService", pero no tenía ningún control sobre la transferencia directa del archivo. Medios con mi código actual Sólo puedo iniciar la descarga de archivos pero no puedo detener ni detener una descarga de archivos en particular.

Código fuente que he utilizado para descargar el archivo desde el servidor.

public class FileDownloadService extends IntentService{ public static final String RESPONSE_MESSAGE = "myResponseMessage"; public static final String EXTRA_MESSAGE_LINK = "messageLink"; public static final String EXTRA_MESSAGE_ID = "messageId"; public ImageDownloadService() { super("ImageDownloadService"); } @Override protected void onHandleIntent(Intent intent) { String msgLink = intent.getStringExtra(EXTRA_MESSAGE_LINK);; String msgId = intent.getStringExtra(EXTRA_MESSAGE_ID);; File msgFile = null; String responseMessage = ""; int TIMEOUT_CONNECTION = 60000;// 6sec int TIMEOUT_SOCKET = 300000;// 3sec URLConnection ucon = null; URL url = null; try { url = new URL(Constant.URL + "ImageDownload?fileId="+msgLink); ucon = url.openConnection(); // this timeout affects how long it takes for the app to realize // there's a connection problem ucon.setReadTimeout(TIMEOUT_CONNECTION); ucon.setConnectTimeout(TIMEOUT_SOCKET); ucon.setRequestProperty("User-Agent", Constant.REQUEST_HEADER); String responseStatus = ucon.getHeaderField("status1"); if(responseStatus == null || !responseStatus.equalsIgnoreCase("success")){ responseMessage = "Fail"; updateAdapter(msgId, msgFile, responseMessage); return; } String fileLength = ucon.getHeaderField("filelength"); if(fileLength == null){ responseMessage = "Fail"; updateAdapter(msgId, msgFile, responseMessage); return; } InputStream is = null; is = ucon.getInputStream(); BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5); FileOutputStream outStream = null; File file = null; try { msgFile = file = createImageFile(); galleryAddPic(file); outStream = new FileOutputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); responseMessage = "Fail to create file in a Memory.."; updateAdapter(msgId, msgFile, responseMessage); return; } byte[] buff = new byte[5 * 1024]; int len; // int downloadedSize = 0; try { while ((len = inStream.read(buff)) != -1) { outStream.write(buff, 0, len); // downloadedSize += len; // int progress = (int) (downloadedSize * 100 / totalSize); } if(fileLength == null || file == null ){ updateAdapter(msgId, msgFile, "fail"); }else if(fileLength.equalsIgnoreCase(""+file.length())){ updateAdapter(msgId, msgFile, "success"); }else{ if(file.exists()){ file.delete(); } updateAdapter(msgId, msgFile, "fail"); } return; } catch (IOException e) { e.printStackTrace(); responseMessage= "fail"; updateAdapter(msgId, msgFile, responseMessage); return; } finally{ try { outStream.flush(); if(outStream!=null ){ outStream.close(); } if(inStream!=null ){ inStream.close(); } } catch (Exception ex) { ex.printStackTrace(); } } } catch (MalformedURLException e1) { e1.printStackTrace(); responseMessage = "fail"; updateAdapter(msgId, msgFile, responseMessage); return; }catch (IOException e1) { e1.printStackTrace(); responseMessage = "fail"; updateAdapter(msgId, msgFile, responseMessage); return; }catch(Exception e1) { e1.printStackTrace(); responseMessage = "fail"; updateAdapter(msgId, msgFile, responseMessage); return; } } private void updateAdapter(String msgId, File file, String response){ DatabaseHandler db = DatabaseHandler.getInstance(this); if(response.equalsIgnoreCase("success")){ MessageItem item = new MessageItem(); try{ galleryAddPic(file); }catch(Exception e){ e.printStackTrace(); } item.setId(msgId); item.setMessageInternalPath(file.getAbsolutePath()); db.updateMessagePath(item); }else{ } MessageItem message = new MessageItem(); message.setId(msgId); message.setUploadRunningStatus(0); db.updateMessageRunningStatus(message); Intent broadcastIntent = new Intent("updateActivity"); broadcastIntent.putExtra(RESPONSE_MESSAGE, response); sendBroadcast(broadcastIntent); } private void galleryAddPic(File file) { Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri contentUri = Uri.fromFile(file); mediaScanIntent.setData(contentUri); sendBroadcast(mediaScanIntent); } private File createImageFile() { File mediaFile = null; if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { mediaFile = new File(android.os.Environment.getExternalStorageDirectory(), "TEST" + File.separator + "Images"+File.separator +"IMAGE_"+System.currentTimeMillis()+".jpg"); if (!mediaFile.exists()) { try { mediaFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } if (!mediaFile.exists()) { File root = new File(Environment.getExternalStorageDirectory() + File.separator + "TEST" + File.separator + "Images" +File.separator ); if (!root.exists()) { root.mkdirs(); } String imageFileName = "IMAGE_"+System.currentTimeMillis(); File image; try { image = File.createTempFile(imageFileName, /* prefix */ ".jpg", /* suffix */ root /* directory */ ); return image; } catch (IOException e) { e.printStackTrace(); } } else { return mediaFile; } return null; } } 
  Question. 1. How can i implement multiple file download feature with basic task controls such as pause, continue and stop ? 2. Is there any library available using which i can control the file download? 

Responder con un código fuente será muy útil.

Gracias por adelantado.

Un administrador de descargas para android con descargas de muti-task, reanudación de descargas, contador de tráfico y los controles básicos de tareas como pausa, continuar y eliminar. Código fuente

  • Obtener la URL de descarga para el vídeo de YouTube (Android / Java)
  • Phonegap: FileTransfer.upload () falla en Android
  • SocketException durante la descarga de archivos zip de gran tamaño
  • Android escribe en la carpeta de la tarjeta sd
  • ¿Cómo obtener el estado de la descarga?
  • Android descargar pdf de url luego abrirlo con un lector de pdf
  • Android: descarga el archivo desde el servidor y muestra el progreso de la descarga en la barra de notificación mediante AsyncTask
  • Reanudar la descarga de archivos http en java
  • El archivo Mp3 no se reproduce después de convertir desde byte android
  • ¿Puedo descargar un db de SQLite en / sdcard y acceder desde mi aplicación Android?
  • Throttle / limit android.app.DownloadManager a través del código?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.