Pro Android学习笔记(七五):HTTP服务(9):DownloadManager

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件,转载须注明出处:

应用有时需要从web中下载一个大文件,并保存在本地,这个操作过程是标准的,因此在Android2.3引入了DownloadManager类。相关的学习也可以参考Android学习笔记(四六):互联网通信-文件下载。

小例子

先看一个小例子,如下图所示。layout由一个button和一个textview组成,textview用于显示信息。用户按Start按键后,通过Download在后台下载文件,在通知栏中有提示,可以查看下载进度。当下载结束,通知栏的相关信息也将被清除。Android系统有一个下载管理器Downloads,可以查看通过DownloadManager下载的文件情况。

源程序如下:

public class DownloadMrgActivity extends Activity{ private TextView tv = null; private DownloadManager manager = null; private long downloadId = -1; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.download_mrg); tv = (TextView)findViewById(R.id.tv); } //【1】通过获取Download_Service的reference来获得DownloadManager实例 protected void onResume() { super.onResume(); manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); showInfo("get DownloadManager instance : " + manager); } //【2】向DownloadManager请求下载某图片 public void doDownload(View v){ //按Button触发 android:onClick="doDoownload" showInfo("doDownload() is called"); /*【2.1】设置请求 */ DownloadManager.Request dmReq = new DownloadManager.Request( Uri.parse("")); dmReq.setTitle(getResources().getString(R.string.download_manager));//下来通知栏,显示信息的title dmReq.setDescription("食指大动"); //下来通知栏,显示信息的描述 dmReq.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);//缺省不作限制,本例在此设置只允许WIFI连接时下载,也可以设置为NETWORK_MOBILE /* 【2.2】DownloadManager在后台下载完成后,会进行广播通知,设置通知接收器:先设置过滤条件,再register接收器*/ IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); registerReceiver(myReceiver, filter); /* 【2.3】 向DownloadManager提交请求,并获得id,该id用于对应该请求的处理 */ downloadId = manager.enqueue(dmReq); showInfo("downloadId = " + downloadId); } /*【2.2.1】设置DownloadManager的广播接收器*/ public BroadcastReceiver myReceiver = new BroadcastReceiver(){ // 获取id号,可据此判断是哪个请求的完成。intent在之前已经学习过,可以用来唤起component,并传递信息,component包括activity、service、broadcast receiver以及content provider。此处正式broadcast receiver。 public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); long doneDownloadId = extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID); if(doneDownloadId != downloadId) return; showInfo("Download with id " + doneDownloadId + " is finished."); showInfo("Download file uri is " + manager.getUriForDownloadedFile(doneDownloadId)); } }; //【3】与onResume()对应,进行一些清空处理,如unregister接收器,不再监听DownloadManager的广播 protected void onPause() { super.onPause(); unregisterReceiver(myReceiver); manager = null; downloadId = -1; } private void showInfo(String s){ Log.d("PRO-wei",s); tv.setText(s + "\n" + tv.getText()); } }

保存在哪里?(下载文件信息设置和读取)遇见你,是我一生的幸运;爱上你,

Pro Android学习笔记(七五):HTTP服务(9):DownloadManager

相关文章:

你感兴趣的文章:

标签云: