Android中DownloadManager实现文件下载实例详解
程序员文章站
2023-11-05 19:38:16
android中downloadmanager实现文件下载
下载
创建下载链接
downloadmanager.request request = new d...
android中downloadmanager实现文件下载
下载
创建下载链接
downloadmanager.request request = new downloadmanager.request(uri.parse(url));
设置允许下载的网络环境
request.setallowednetworktypes(downloadmanager.request.network_wifi);
wifi网络 : downloadmanager.request.network_wifi
移动网络 : downloadmanager.request.network_mobile
notification显示下载进度
// 在notification显示下载进度 request.setnotificationvisibility(downloadmanager.request.visibility_visible); // 设置title request.settitle("更新"); // 设置描述 request.setdescription("正在下载更新文件...");
设置保存路径
private static final string dir = "autoupdate"; private static final string apk = "myhome.apk"; private static final string path = environment.getexternalstoragedirectory().getabsolutepath() + "/" + dir + "/" + apk; request.setdestinationinexternalpublicdir(dir, apk);
下载
下载会返回一个进程id
downloadmanager downloadmanager = (downloadmanager) context.getsystemservice(context.download_service); long id = downloadmanager.enqueue(request);
取消下载
通过id可以需要下载
downloadmanager.remove(id);
下载完成的监听
下载完成,系统会发出广播,通过注册广播监听者可以监听到下载完成
广播的action为downloadmanager.action_download_complete
/** * broadcast intent action sent by the download manager when the user clicks on a running * download, either from a system notification or from the downloads ui. */ @sdkconstant(sdkconstanttype.broadcast_intent_action) public final static string action_notification_clicked = "android.intent.action.download_notification_clicked";
code
下载
downloadmanager.request request = new downloadmanager.request(uri.parse(url)); // wifi状态下下载 request.setallowednetworktypes(downloadmanager.request.network_wifi); // 设置通知栏 request.setnotificationvisibility(downloadmanager.request.visibility_visible); request.settitle("更新"); request.setdescription("正在下载更新文件..."); // 存放路径 request.setdestinationinexternalpublicdir(dir, apk); // 开始下载 downloadmanager downloadmanager = (downloadmanager) context.getsystemservice(context.download_service); long id = downloadmanager.enqueue(request);
广播接收者
注册
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.kongqingwei.downloadmanagerdemo"> <!-- 网络权限 --> <uses-permission android:name="android.permission.internet"/> <uses-permission android:name="android.permission.read_external_storage"/> <uses-permission android:name="android.permission.write_external_storage"/> <uses-permission android:name="android.permission.manage_users"/> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/apptheme"> <activity android:name=".mainactivity"> <intent-filter> <action android:name="android.intent.action.main"/> <category android:name="android.intent.category.launcher"/> </intent-filter> </activity> <receiver android:name=".autoupdatebroadcastreceiver"> <intent-filter> <action android:name="android.intent.action.download_complete"/> </intent-filter> </receiver> </application> </manifest>
实现
package com.example.kongqingwei.downloadmanagerdemo; import android.app.downloadmanager; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.widget.toast; /** * created by kongqingwei on 2016/12/19. * 广播接收者 */ public class autoupdatebroadcastreceiver extends broadcastreceiver { @override public void onreceive(context context, intent intent) { if (downloadmanager.action_download_complete.equals(intent.getaction())) { toast.maketext(context, "下载完成", toast.length_short).show(); boolean isinstalled = autoupdater.installapk(); toast.maketext(context, isinstalled ? "安装成功" : "安装失败", toast.length_short).show(); } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!