Android Native Browser下载存储路径选择
2015-10-11 16:33
417 查看
Browser下载通过Controller.java中的onDownloadStart()调用DownloadHandler.java中的onDownloadStartNoStream()进行下载。下载任务则调用Android通用接口DownloadManager进行下载,下载内容的存储位置,则在下载前进行设定。看如下函数:
(1) DownloadHandler.java
(2) 再来看BrowserSettings.getInstance().getDownloadPath()到底返回了什么值
BrowserSettings.java
(3) 再看DefaultBrowserSettingExt给我们返回了一个什么值
DefaultBrowserSettingExt.java
(4) 再看StorageManagerEx返回的默认路径是什么?
StorageManagerEx.java
总上所述,Browser下载的路径为persist.sys.sd.defaultpath再加上Browser中DEFAULT_MY_FAVORITE_FOLDER的设定。
(1) DownloadHandler.java
String mDownloadPath =BrowserSettings.getInstance().getDownloadPath(); // 这里获取获取位置的函数,关键位置,待会分析 if(mDownloadPath.contains("sdcard1")) { if (! new File("/storage/sdcard1").canWrite()) { // 若是sdcard1,判断是否有写权限,没有直接返回。 // 这里与SWAP机制和WRITE_MEDIA_STORAGE有关 // ... return; } } sBrowserDownloadExt =Extensions.getDownloadPlugin(activity); // DefaultBrowserDownloadExt中的check...函数,只是打了一句log if (sBrowserDownloadExt.checkStorageBeforeDownload(activity, mDownloadPath, contentLength)) { return; } // ... try { // 这里又获取了一遍,为什么不用上面计算的mDownloadPath? sBrowserDownloadExt.setRequestDestinationDir( BrowserSettings.getInstance().getDownloadPath(), request, filename,mimetype); }//... catch{} /* public void setRequestDestinationDir(StringdownloadPath, Request request, String filename, String mimeType) { String dir = "file://" + downloadPath + File.separator +filename; Uri pathUri = Uri.parse(dir); // 这个存到Download数据库中的COLUMN_FILE_NAME_HINT 字段,如果设置了此字段, // 则字段COLUMN_DESTINATION的值会被设为DESTINATION_FILE_URI = 4,下载将会保存在hint所指的路径。 // 具体见setDestinationUri定义 request.setDestinationUri(pathUri); } */
(2) 再来看BrowserSettings.getInstance().getDownloadPath()到底返回了什么值
BrowserSettings.java
public String getDownloadPath() { // 我们的项目会调用这个默认值 return mPrefs.getString(PREF_DOWNLOAD_DIRECTORY_SETTING,getDefaultDownloadPathWithMultiSDcard()); } public String getDefaultDownloadPathWithMultiSDcard(){ // 我们的项目中,在Extensions.java中获取的plugin是DefaultBrowserSettingExt(); sBrowserSettingExt = Extensions.getSettingPlugin(mContext); return sBrowserSettingExt.getDefaultDownloadFolder(); }
(3) 再看DefaultBrowserSettingExt给我们返回了一个什么值
DefaultBrowserSettingExt.java
public String getDefaultDownloadFolder() { String defaultDownloadPath = DEFAULT_DOWNLOAD_DIRECTORY; String defaultStorage = StorageManagerEx.getDefaultPath(); // 主要看这个返回什么 if (null != defaultStorage) { defaultDownloadPath = defaultStorage + DEFAULT_MY_FAVORITE_FOLDER; // DEFAULT_MY_FAVORITE_FOLDER这个常量我们改成了"/download" } return defaultDownloadPath; }
(4) 再看StorageManagerEx返回的默认路径是什么?
StorageManagerEx.java
public static String getDefaultPath() { String path = STORAGE_PATH_SD1; boolean deviceTablet = false; boolean supportMultiUsers = false; try { path = SystemProperties.get(PROP_SD_DEFAULT_PATH); // 真相大白了,原来返回的是PROP_SD_DEFAULT_PATH这个属性值,定义处PROP_SD_DEFAULT_PATH = "persist.sys.sd.defaultpath",这个属性值就大有来头了,就是在系统设置中默认存储就是修改的该属性值 Log.i(TAG, "path=" + path); } // ... return path; }
总上所述,Browser下载的路径为persist.sys.sd.defaultpath再加上Browser中DEFAULT_MY_FAVORITE_FOLDER的设定。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories