android调用系统下载器下载文件
2016-09-08 09:33
369 查看
在项目中使用到了在android端下载服务端的文件,之前使用的是http下载方式,现在想改成调用系统的下载器进行下载,实现步骤为:
(2)如果未在下载则下载文件:
(3)接收完成的接收器
(4)注册接收完成的广播
1.得到url:文件下载地址
2.使用URL下载:
(1)下载前先判断文件是否已经在下载,避免重复下载:
// 判断该文件是否在下载 private boolean isDowning(String uri) { boolean flag = false; try { DownloadManager.Query query = new DownloadManager.Query(); query.setFilterByStatus(DownloadManager.STATUS_RUNNING); if (downloadManager == null) { downloadManager = ((DownloadManager) this .getSystemService(Activity.DOWNLOAD_SERVICE)); } Cursor c = downloadManager.query(query); String downingURI; while (c.moveToNext()) { downingURI = c.getString(c .getColumnIndex(DownloadManager.COLUMN_URI)); if (downingURI.equalsIgnoreCase(uri)) { flag = true; break; } } if (c != null) { c.close(); } } catch (Exception ex) { ex.printStackTrace(); } return flag; }
(2)如果未在下载则下载文件:
// 本地存储路径 Request request = new Request(Uri.parse(url)); // 在通知栏中显示 request.setShowRunningNotification(true); request.setVisibleInDownloadsUi(true); String dir ="tempFilrDir";//本地文件存储目录 相对路径 String fileName = "悟空.mp3";//下载的文件名称
request.setDestinationInExternalPublicDir(dir, fileName);//文件存储路径 绝对路径 request.setTitle(<span style="font-family: KaiTi_GB2312;">fileName </span>);//下载时在通知栏显示的文字
//downloadManager = ((DownloadManager) this.getSystemService(Activity.DOWNLOAD_SERVICE));
<pre name="code" class="java">long downloadId = downloadManager.enqueue(request);//执行下载DownloadCompleteReceiver.mDownloadIDs.add(new Long(downloadId));//DownloadCompleteReceiver下载完成的接收器,第//3步会讲到
(3)接收完成的接收器
<span style="font-family: KaiTi_GB2312;"></span><pre name="code" class="java">package com.bcts.appmanage.manage; import java.util.ArrayList; import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Handler; import android.os.Message; import android.util.Log; import com.bcts.appmanage.tools.Constant; /** * 调用系统下载器下载文件 * */ public class DownloadCompleteReceiver extends BroadcastReceiver { public static final String TAG = "DownloadCompleteReceiver"; public static ArrayList<Long> mDownloadIDs = new ArrayList<Long>(); public String fileName; public Handler mHandler; public DownloadCompleteReceiver(Handler handler) { mHandler = handler ; } @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) { long downId = intent.getLongExtra( DownloadManager.EXTRA_DOWNLOAD_ID, -1); // if (mDownloadIDs.contains(downId)) { // ////////////////////////////// DownloadManager downloadManager = (DownloadManager) context .getSystemService(Context.DOWNLOAD_SERVICE); DownloadManager.Query query = new DownloadManager.Query(); // query.setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL); query.setFilterById(downId); Cursor c = downloadManager.query(query); if (c.moveToFirst()) { fileName = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); Message m = new Message(); m.obj = fileName; m.what = Constant.DOWNLOAD_FINISHED; mHandler.sendMessage(m); Log.i(TAG, "下载'" + fileName + "'完成"); }else{ Log.i(TAG, "下载'" + fileName + "'失败"); } if (c != null) { c.close(); } mDownloadIDs.remove(downId); } } } }
(4)注册接收完成的广播
<span style="font-family: KaiTi_GB2312;"> </span><pre name="code" class="java"> downloadCompleteReceiver = new DownloadCompleteReceiver(mHandler); IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE); // 注册广播 registerReceiver(downloadCompleteReceiver, myIntentFilter);
相关文章推荐
- Android UI组件AppWidget控件入门详解
- Android 开发文档
- Android内存优化大全
- android (3):组件的布局(非常详细)
- AndroidStudio 如何使用aar详解
- Android5.0新特性详解之全新的动画
- Material Design——BottomNavigationBar
- Android-activity堆栈及管理
- android content provider(内容提供者) 学习总结
- Android图片加载框架Picasso使用教程 (二)listviewh和gridview
- Android开发:shape和selector和layer-list的(详细说明)
- Android实现登陆页logo随键盘收放动态伸缩(完美解决键盘弹出遮挡控件的问题)
- 使用 Lambda 取代 Android 中的匿名类
- Android图片加载框架Picasso(一)
- Unable to start Virtual device问题及解决办法Android模拟器Genymotion
- android studio开发android工程,SVN提交文件
- 关于横竖屏切换后Fragment发生重叠问题的解决
- Android Studio 编译时报文件不能删除,编译失败
- Android源码大放送(实战开发必备)
- Android使用RecyclerView实现水平滚动控件