Android 安卓:一个接一个下载视频
我使用下载管理器在Android设备上下载视频。问题是我想下载多个视频(一个接一个) 我花了一整天的时间研究这个问题,但是有一些关于下载单个视频的解决方案 下面,我在这里发现了相同的问题,但没有答案: 如果你们知道怎么做,请告诉我Android 安卓:一个接一个下载视频,android,video,Android,Video,我使用下载管理器在Android设备上下载视频。问题是我想下载多个视频(一个接一个) 我花了一整天的时间研究这个问题,但是有一些关于下载单个视频的解决方案 下面,我在这里发现了相同的问题,但没有答案: 如果你们知道怎么做,请告诉我 提前谢谢你 我真的想说谢谢你的评论。经过几个小时的研究,我认为使用BroadcastReceiver解决这个问题应该是最好的解决方案。下面,我想为和我有同样问题的人分享答案 我创建了一个静态函数来处理下载: public static long downloadVi
提前谢谢你 我真的想说谢谢你的评论。经过几个小时的研究,我认为使用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);
}
}
}
public类DownloadReceiver扩展了BroadcastReceiver{
私有int视频索引;
私有字符串[]视频URL;
私人长下载参考;
公共下载接收器(int videoIndex,String[]videourl,long downloadReference){
this.videoIndex=videoIndex;
this.videoUrls=videoUrls;
this.downloadReference=downloadReference;
}
@凌驾
公共void onReceive(上下文、意图){
long referenceId=intent.getLongExtra(DownloadManager.EXTRA\u DOWNLOAD\u ID,-1);
if(downloadReference==referenceId){
++视频索引;
if(videoIndex
}到目前为止您尝试了什么?我使用BroadcastReceiver了解下载何时完成。然后,我开始下订单,但我认为这不是一个好的解决方案,而是以一种更简单的方式做事。我似乎没有什么好办法。检查这个库。