当前位置: 代码迷 >> Android >> 函数 void download(String url) 中的代码怎么理解,下载的文件存在什么目录下
  详细解决方案

函数 void download(String url) 中的代码怎么理解,下载的文件存在什么目录下

热度:172   发布时间:2016-04-28 03:43:48.0
函数 void download(String url) 中的代码如何理解,下载的文件存在什么目录下?
本帖最后由 huabinsir 于 2014-11-13 15:16:54 编辑
请问, 以下这段函数 void download(String url) 中的代码如何理解? 下载的文件存在什么目录下?

import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Environment;
.....

DownloadManager dm=((DownloadManager)getSystemService("download"));
        Uri uri = Uri.parse(url);


Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs();
Request dwreq = new DownloadManager.Request(uri);


dwreq.setTitle(getString(R.string.download_title));
dwreq.setDescription(getString(R.string.download_description));
 

File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()+"/"+filename);
 android.util.Log.i("dfdun", "file dir: "+f.getAbsolutePath());

  if (f.exists()) {
      f.delete();
  }
  dwreq.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,filename);
------解决思路----------------------
学习能力往往比解决某一个知识点重要的多,遇到一个不熟悉的东西,第一反应不是说自己不知道而是要思考怎么学习它,这是作为一个程序员最基本的能力了,我的步骤:
1.理解DownloadManager这个类,很简单的方法,看系统注释,光标悬停在该类上面,该类会有对应的提示:

里面已经表达的很清楚了,抓住几点点:
(1)作用是用来处理一个常时间运行的HTTP下载目标文件的系统服务
(2)通过android.content.Context.getSystemService(String) 类来构建一个DownloadManager类实例
(3)通过请求URI地址来下载
(4)需要给 ACTION_NOTIFICATION_CLICKED注册一个广播接收器来处理通知栏的下载信息或者用户下载界面的单击消息
(4)注意在添加android.Manifest.permission.INTERNET 权限
所以第一和第二句代码很好理解了
2.接下来追踪getExternalStoragePublicDirectory类

很明显的提示,设置一个特定类型的文件目录,什么特定类型?里面已经有提示了就是DIRECTORY_DOWNLOADS类型,也就是下载类型的目录,ok第三行代码搞定
3.接下来追踪Request类

第一句话就解释了:用来新建一个下载请求
整句话
	Request dwreq = new DownloadManager.Request(uri);

代表新建一个下载请求,请求地址为uri
至于这2句:
dwreq.setTitle(getString(R.string.download_title));
dwreq.setDescription(getString(R.string.download_description)); 

提示也说的明明白白的就是在通知栏设置一个下载进度条类似标题和描述,我相信你关于这个下载场景你应该见过。
4.setDestinationInExternalPublicDir这个函数一样有提示,就是开始下载uri文件并把它下载到对应的文件目录设置文件名。
什么?你看不懂英文,请使用google Translate翻译,我四级都没过都能勉强看懂你还看不懂?


------解决思路----------------------
引用:
请问, 以下这段函数 void download(String url) 中的代码如何理解? 下载的文件存在什么目录下?

import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Environment;
.....

DownloadManager dm=((DownloadManager)getSystemService("download"));
        Uri uri = Uri.parse(url);


Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs();
Request dwreq = new DownloadManager.Request(uri);


dwreq.setTitle(getString(R.string.download_title));
dwreq.setDescription(getString(R.string.download_description));
 

File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()+"/"+filename);
 android.util.Log.i("dfdun", "file dir: "+f.getAbsolutePath());

  if (f.exists()) {
      f.delete();
  }
  dwreq.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,filename);
忘了回答你的问题了,系统方法的提示描述是“top-level public external storage directory”最顶级的SD卡的目录也就是SD卡的根目录。
  相关解决方案