android实现下载功能实现,Android开发之DownloadManager的使用
Android 开发中,经常有从服务器下载数据的需求出现,尤其是在线更新App的情形。其基本思路是根据本地的App版本号和服务器的版本号进行比较,如果服务器版本较新,再进行提示然后下载Apk最后进行安装。这种需求解决方案有很多,第三方的网络框架基本都有这个功能。
Android自带的DownloadManager是一个很好的下载文件的工具。该类在API level 9之后出现,它已经帮我们处理了下载失败、重新下载等功能,整个下载过程全部交给系统负责,不需要我们过多的处理,非常的nice。关键的是用起来也很简单,很爽,稍微封装一下就可以几句话搞定下载。
下面以一个简单案例来实现从服务器下载一个Apk文件并进行安装。
1、打开本地Tomcat服务器,放入一个Apk文件
Tomcat.png
2、开启Tomcat,然后确保能从浏览器下载
浏览器下载.png
3、编写DownloadManager工具类,代码注释很详细
public class DownloadUtils {
//下载器
private DownloadManager downloadManager;
//上下文
private Context mContext;
//下载的ID
private long downloadId;
public DownloadUtils(Context context){
this.mContext = context;
}
//下载apk
public void downloadAPK(String url, String name) {
//创建下载任务
Request request = new Request(Uri.parse(url));
//移动网络情况下是否允许漫游
request.setAllowedOverRoaming(false);
//在通知栏中显示,默认就是显示的
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setTitle("新版本Apk");
request.setDescription("Apk Downloading");
request.setVisibleInDownloadsUi(true);
//设置下载的路径
request.setDestinationInExternalPublicDir(Environment.getExternalStorageDirectory().getAbsolutePath() , name);
//获取DownloadManager
downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
//将下载请求加入下载队列,加入下载队列后会给该任务返回一个long型的id,通过该id可以取消任务,重启任务、获取下载的文件等等
downloadId = downloadManager.enqueue(request);
//注册广播接收者,监听下载状态
mContext.registerReceiver(receiver,
new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
//广播监听下载的各个状态
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
checkStatus();
}
};
//检查下载状态
private void checkStatus() {
Query query = new Query();
//通过下载的id查找
query.setFilterById(downloadId);
Cursor c = downloadManager.query(query);
if (c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
switch (status) {
//下载暂停
case DownloadManager.STATUS_PAUSED:
break;
//下载延迟
case DownloadManager.STATUS_PENDING:
break;
//正在下载
case DownloadManager.STATUS_RUNNING:
break;
//下载完成
case DownloadManager.STATUS_SUCCESSFUL:
//下载完成安装APK
installAPK();
break;
//下载失败
case DownloadManager.STATUS_FAILED:
Toast.makeText(mContext, "下载失败", Toast.LENGTH_SHORT).show();
break;
}
}
c.close();
}
//下载到本地后执行安装
private void installAPK() {
//获取下载文件的Uri
Uri downloadFileUri = downloadManager.getUriForDownloadedFile(downloadId);
if (downloadFileUri != null) {
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(downloadFileUri, "application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
mContext.unregisterReceiver(receiver);
}
}
}
4、编写Activity代码初始化工具类,然后下载
public class MainActivity extends AppCompatActivity {
private DownloadUtils downloadUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
downloadUtils = new DownloadUtils(MainActivity.this);
downloadUtils.downloadAPK("http://192.168.1.104:8080/XXX.apk", "XXX.apk");
}
}
5、配置权限
6、运行结果
运行以后会去下载服务器的Apk,通知栏也会有相应的通知。当下载完毕以后,会弹出安装界面。
通知栏
通知栏提醒.png
主界面
主界面.gif
android实现下载功能实现,Android开发之DownloadManager的使用相关推荐
- Android Studio多功能闹钟[android源码]
Android Studio多功能闹钟[android源码] 多功能闹钟App 简 介 主 要 技 术 界面截图 主要代码 源码链接 作者信息 多功能闹钟App 简 介 此多功能闹钟界面采用TabHo ...
- android 图片横竖判断_Android应用开发之android 判断ImageView当前显示的是哪一张图片...
本文将带你了解Android应用开发之android 判断ImageView当前显示的是哪一张图片,希望本文对大家学Android有所帮助. 判断ImageView当前显示的是哪一张图片 Java ...
- Android之基于xmpp openfire smack开发之Android客户端开发[3]
http://blog.csdn.net/shimiso/article/details/11225873 在上两篇文章中,我们依次介绍openfire部署以及smack常用API的使用,这一节中我们 ...
- android webview权限申请_Android应用开发之android 6.0下webview的定位权限设置方法
本文将带你了解Android应用开发android 6.0下webview的定位权限设置方法,希望本文对大家学Android有所帮助. 如下所示: WebView webView = (WebVi ...
- Chrome 55 浏览器推出 Android 离线下载功能
谷歌已经推出适用于Mac,Windows和Linux的Chrome 55浏览器,其中一项重大更新是默使用HTML5,以便进一步让Flash寿终正寝.现在谷歌又推出Chrome 55浏览器安卓版,增加了 ...
- android清理缓存功能吗,Android清理缓存功能实现
我们都知道在Android的设置->应用程序中可以查看应用程序的相关信息,其中有一个功能是清除缓存.如图: 怎么实现这些功能呢,从Android的setting源码中可以得到相关信息. 实现如下 ...
- android 断点下载的实现,Android实现断点下载的方法
最近做的项目中需要实现断点下载,即用户一次下载可以分多次进行,下载过程可以中断,在目前大多数的带离线缓存的软件都是需要实现这一功能.本文阐述了通过sqlite3简单实现了一个具有断点下载功能的demo ...
- android 收藏歌曲功能,基于android的网络音乐播放器-回调实现音乐播放及音乐收藏的实现(三)...
作为android初学者,最近把疯狂android讲义和疯狂Java讲义看了一遍,看到书中介绍的知识点非常多,很难全部记住,为了更好的掌握基础知识点,我将开发一个网络音乐播放器-EasyMusic来巩 ...
- android客服功能介绍,Android 客服工作台 SDK
Android 客服工作台 SDK 开发工具 目录 build.gradle 配置 添加依赖,在app的build.gradle 中dependencies中加入如下(添加后需同步gradle): a ...
最新文章
- MySql练习题参考答案
- C 中 main 函数的参数
- 你一定不能错过,Java视频全套
- FPGA笔记(1)-逻辑代数与逻辑电路基础
- 数据结构+算法——错题总结
- selenium webdriver 启动三大浏览器Firefox,Chrome,IE
- css定位position
- 可能是最好理解的二叉树的层序遍历
- “超大杯”版小米10不仅有120W超级快充,电池也要比传闻大
- JS计算两个日期时间差,天 小时 分 秒格式
- django admin下拉列表不显示值,显示为object的处理
- codeforces776D
- Good, then we can start
- 基于局部自适应阈值的图像二值化
- 十二周二次课 12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.
- SeSe 2005-02-11 -- 2005-02-12
- 读书感受 之 《反脆弱 · 做一个内心强大的人》
- php源码旅行网站模板,背包客旅行扁平网站模板
- 雷达基础系列文章之四:雷达专业国内期刊
- STM32:Modbus-RTU通讯协议——CRC校验