- 浏览: 203780 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (195)
- android (153)
- sqlite (1)
- java (3)
- os (4)
- tools (4)
- ResolveInfo 转 packageinf 取信息 (1)
- multimedia (2)
- fastboot (1)
- create user in samba (0)
- android qcn (0)
- windows (0)
- net (2)
- linux (1)
- git (0)
- proguard (0)
- android cpu (1)
- android gts (1)
- MySql (1)
- c/c++ (0)
- network (1)
- python (3)
- AI (1)
- Ultroedit (1)
From: https://www.jianshu.com/p/46fd1c253701
private static long mTaskId = -1;
/*
* android system api to download
*/
public static void download(Context context, String urlStr, String filename) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(urlStr));
request.setAllowedOverRoaming(false);//漫游网络是否可以下载
//设置文件类型,可以在下载结束后自动打开该文件
// MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
// String mimeString = mimeTypeMap.getMimeTypeFromExtension(
// MimeTypeMap.getFileExtensionFromUrl(urlStr));
// request.setMimeType(mimeString);
//在通知栏中显示,默认就是显示的
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setVisibleInDownloadsUi(true);
//sdcard的目录下的download文件夹,必须设置
request.setDestinationInExternalPublicDir("/download/", filename);
// request.setDestinationInExternalFilesDir(context,type, filepath) // 也可以自己指定下载路径
// 将下载任务加入队列
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
//加入下载队列后会给该任务返回一个long型的id,
//通过该id可以取消任务,重启任务等等,看上面源码中框起来的方法
mTaskId = downloadManager.enqueue(request);
// downloadManager.remove(taskId) //
context.registerReceiver(mReceiverDownload, new IntentFilter());
}
private static BroadcastReceiver mReceiverDownload = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
checkDownloadStatus();
}
};
private static void checkDownloadStatus() {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(mTaskId);
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Cursor c = downloadManager.query(query);
if (c.moveToFirst()){
int status = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
switch (status){
case DownloadManager.STATUS_PAUSED:
Log.v(TAG, "下载暂停");
break;
case DownloadManager.STATUS_PENDING:
Log.v(TAG, "下载延迟");
break;
case DownloadManager.STATUS_RUNNING:
Log.v(TAG, "正在下载...");
break;
case DownloadManager.STATUS_SUCCESSFUL:
Log.v(TAG,"下载完成");
// Play Act
break;
case DownloadManager.STATUS_FAILED:
Log.v(TAG, "下载失败");
break;
}
}
}
希望你可以看到最后这几句,不然你也会被坑的!
1.虽然下载什么的不需要自己操心了,但是建议还是将整个上面四段代码放在Service中执行,因为放在Activity中时,当用户按home键后,即使下载完了,也不会弹出安装界面
2.建议使用startService的方式启动Service,这样不会与Activity生命周期绑定,保证下载完后能顺利安装。
3.Service使用完后要及时地停掉!
作者:Marno
链接:https://www.jianshu.com/p/46fd1c253701
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
private static long mTaskId = -1;
/*
* android system api to download
*/
public static void download(Context context, String urlStr, String filename) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(urlStr));
request.setAllowedOverRoaming(false);//漫游网络是否可以下载
//设置文件类型,可以在下载结束后自动打开该文件
// MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
// String mimeString = mimeTypeMap.getMimeTypeFromExtension(
// MimeTypeMap.getFileExtensionFromUrl(urlStr));
// request.setMimeType(mimeString);
//在通知栏中显示,默认就是显示的
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setVisibleInDownloadsUi(true);
//sdcard的目录下的download文件夹,必须设置
request.setDestinationInExternalPublicDir("/download/", filename);
// request.setDestinationInExternalFilesDir(context,type, filepath) // 也可以自己指定下载路径
// 将下载任务加入队列
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
//加入下载队列后会给该任务返回一个long型的id,
//通过该id可以取消任务,重启任务等等,看上面源码中框起来的方法
mTaskId = downloadManager.enqueue(request);
// downloadManager.remove(taskId) //
context.registerReceiver(mReceiverDownload, new IntentFilter());
}
private static BroadcastReceiver mReceiverDownload = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
checkDownloadStatus();
}
};
private static void checkDownloadStatus() {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(mTaskId);
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Cursor c = downloadManager.query(query);
if (c.moveToFirst()){
int status = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
switch (status){
case DownloadManager.STATUS_PAUSED:
Log.v(TAG, "下载暂停");
break;
case DownloadManager.STATUS_PENDING:
Log.v(TAG, "下载延迟");
break;
case DownloadManager.STATUS_RUNNING:
Log.v(TAG, "正在下载...");
break;
case DownloadManager.STATUS_SUCCESSFUL:
Log.v(TAG,"下载完成");
// Play Act
break;
case DownloadManager.STATUS_FAILED:
Log.v(TAG, "下载失败");
break;
}
}
}
希望你可以看到最后这几句,不然你也会被坑的!
1.虽然下载什么的不需要自己操心了,但是建议还是将整个上面四段代码放在Service中执行,因为放在Activity中时,当用户按home键后,即使下载完了,也不会弹出安装界面
2.建议使用startService的方式启动Service,这样不会与Activity生命周期绑定,保证下载完后能顺利安装。
3.Service使用完后要及时地停掉!
作者:Marno
链接:https://www.jianshu.com/p/46fd1c253701
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
发表评论
-
Android SnappyDB
2018-05-15 11:23 750https://blog.csdn.net/qq_214305 ... -
使用UncaughtExceptionHandler保存全局异常(转)
2018-05-07 15:04 501From: https://blog.csdn.net/dre ... -
android udp
2018-04-10 19:47 466Android之Socket的基于UDP传输 接收方创建步骤: ... -
Snackbar 可以交互的Toast
2018-04-08 21:44 635Snackbar 是 Android design sup ... -
android 操作串口
2018-03-19 18:20 478http://blog.csdn.net/akunainian ... -
proguard对 android-support-v4.jar 的配置
2018-03-16 15:32 597-libraryjars libs/android-sup ... -
apk 多个dex
2018-03-16 10:05 871android studio 配置应用生成多个dex ... -
ddmlib 解决android n file explorer 为空问题
2018-03-16 09:27 779百度云:http://pan.baidu.com/s/1sl4 ... -
android 代码混淆
2018-03-15 08:38 916打开混淆开关 Android.mk ... -
menu item 显示icon
2018-03-07 09:32 546@Override public boolean onMenu ... -
ubuntu 脚本切换root用户,并执行其它脚本
2018-03-05 09:58 0#!/bin/bash expect -c" ... -
DrawerLayout 滑动侧边栏
2018-03-01 10:42 0// TODO -
jack-server 多用户编译问题
2018-02-27 10:44 13513),需要同时修改 $HOME/.jack-server/co ... -
更新eclipse 遇到两个问题 Oxygen.2 Release (4.7.2)
2018-02-26 14:28 11561. the file dx.jar was not load ... -
监听系统开关变化
2018-02-05 14:02 759// 转屏开关 /** * Content obse ... -
android 8.0 模块编译命令
2018-02-02 14:42 1125Invoke ". build/envsetup.s ... -
svn checkout 忽略某个文件夹
2018-01-26 11:14 1262android源码更新时, frameworks\compil ... -
eclipse jni
2018-01-19 16:10 446试过,可以运行 http://blog.csdn.net/sb ... -
opencv for android
2018-01-19 14:37 380http://blog.csdn.net/sbsujjbcy/ ... -
Cordova // TODO
2018-01-18 11:12 290Cordova提供了一组设备相关的API,通过这组API,移动 ...
相关推荐
DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request。DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息,这两个...
Android DownloadManager和自定义下载功能 ,简单易用
Android DownLoadManager使用的小例子,主要使用DownloadManager.Request方法来下载文件,下载可在通知栏中显示
android DownloadManager.rar
本篇文章主要介绍了android中DownloadManager实现版本更新,监听下载进度实例。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
使用android 自带的DownloadManager实现文件下载,兼容性强,代码简单,注释详细
android自带下载工具DownloadManager示例demo
Android使用DownloadManager实现版本更新:http://luosifan.com/2014/09/21/Android-versionUpdate/
DownloadManager(强制升级与自选升级.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Updater基于DownloadManager封装的更新器
Android-Download-Manager Android/Java download manager library help you to download files in parallel mechanism in some chunks. Overview This library is a download manager android/java library which ...
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件...
这个广播接收者主要工作是把DownloadManager下载的文件拷贝到U盘中以解决在TVBox开发过程中想要直接把文件下载到U盘时产生的java.lang.SecurityException异常。没分的朋友可以直接前往:...
DownloadManager框架实战源码从简单入手到业务详尽模块代码,让您获取完整的代码资源
Android版本更新使用DownloadManager.
主要介绍了Android中DownloadManager实现文件下载实例详解的相关资料,需要的朋友可以参考下
之前一直都是自己写的自动更新下载,这次试了一下系统提供的DownloadManager下载类,发现非常方便也非常简单。就整理了一下分享给大家
DownloadManager是android提供的一个下载管理器 缺点:不支持断点续传 使用方法: 创建实例: DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); 创建下载任务: ...