我真的很想说声谢谢你的所有评论。经过几个小时的研究,我认为使用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);
}
}
}
}
到目前为止您尝试过什么? –
我使用BroadcastReceiver知道下载何时完成。然后,我开始订单,但我认为这不是一个好的解决方案 – LuongTruong
它以一种更简单的方式做事。我似乎没有任何最好的方法。 –