2015-12-22 92 views
0

我正在使用下载管理器来下载Android设备上的视频。问题是我想下载多个视频(一个接一个)。Android:逐个下载视频

我研究了一整天,但有一些关于下载单个视频的解决方案。

之后,我发现了同样的问题在这里,但没有人回答: How to Download 45 videos one by one non stop with Download Manager?

如果你们知道如何做到这一点,请让我知道。

预先感谢您!

+0

到目前为止您尝试过什么? –

+0

我使用BroadcastReceiver知道下载何时完成。然后,我开始订单,但我认为这不是一个好的解决方案 – LuongTruong

+0

它以一种更简单的方式做事。我似乎没有任何最好的方法。 –

回答

0

我真的很想说声谢谢你的所有评论。经过几个小时的研究,我认为使用BroadcastReceiver解决这个问题应该是最好的解决方案。以下,我想分享与我有同样问题的人的答案。

我创建了一个静态函数来处理下载:

public static long downloadVideo(String myHTTPUrl, Context context) { 
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(myHTTPUrl)); 
    request.setTitle("File download."); 
    request.setDescription("File is being download..."); 

    request.allowScanningByMediaScanner(); 
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 

    final String nameOfFile = URLUtil.guessFileName(myHTTPUrl, null, 
      MimeTypeMap.getFileExtensionFromUrl(myHTTPUrl)); 
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, nameOfFile); 

    DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); 
    return manager.enqueue(request); 
} 

当我点击按钮下载,然后它会运行下面的代码:

long downloadReference = DownloadHandler.downloadVideo(videoUrls[0], v.getContext()); 
DownloadReceiver downloadReceiver = new DownloadReceiver(0, videoUrls, downloadReference); 

//set filter to only when download is complete and register broadcast receiver 
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); 
registerReceiver(downloadReceiver, filter); 

这里是最后一步,该广播接收器:

public class DownloadReceiver extends BroadcastReceiver { 

private int videoIndex; 
private String[] videoUrls; 

private long downloadReference; 

public DownloadReceiver(int videoIndex, String[] videoUrls, long downloadReference) { 
    this.videoIndex = videoIndex; 
    this.videoUrls = videoUrls; 
    this.downloadReference = downloadReference; 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 
    if(downloadReference == referenceId){ 
     ++videoIndex; 
     if (videoIndex < videoUrls.length) { 
      downloadReference = DownloadHandler.downloadVideo(videoUrls[videoIndex], context); 
      DownloadReceiver downloadReceiver = new DownloadReceiver(videoIndex, videoUrls, downloadReference); 

      IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); 
      context.registerReceiver(downloadReceiver, intentFilter); 
      context.unregisterReceiver(this); 
     } 
    } 
} 

}