码迷,mamicode.com
首页 > 移动开发 > 详细

下载保存文件到手机本地前, 优先选择位置的一个取巧方法

时间:2014-08-28 17:02:40      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:style   java   ar   for   文件   问题   代码   sp   on   

现在的手机内存动辄内置了8G, 16G, 甚至32G的存储空间, 其实已经够用了. 当然如果手机支持插外置内存卡, 比如手机再插入个32G的内存卡. 那手机容量就大大增加了. 应用在下载保存文件时, 比如像UC浏览器那种, 它会询问诱导用户设置一个默认的保存路径. 一般我们会优先将文件保存在外置内存卡中(如果有的话) , 若没有外置存储的内存卡, 才把这些文件图片什么的 放到内置存储的空间去, 这样才能最大限度的不浪费手机内置的存储空间. 

于是, 我就有了以下的一个取巧方法, 思路大概是这样的 : 下载文件前, 先利用Environment去判断是否有外置内存卡, 如果有就将文件保存至外置内存卡中(当然更谨慎的思路是, 还要计算出该内存卡的剩余空用空间, 如果大于文件的大小 就进行保存操作, 否则提示用户内存不足BLABLABLA的. 后面同理, 我就不再提这点了.).  如果没有内存卡, 就保存至本地存储空间.  

但这里有一个问题, 就是保存至本地存储空间时, 我们并不像保存至外置存储卡那么方便, 直接用一个Environment.getExternalStorageDirectory().getAbsolutePath()就搞掂. 保存至本地中还需要提前获知这个路径, 而这个路径根据不同的手机有的是/mnt/sdcard1/ , 有的是/mnt/sdcard2/ 等等. So 怎么取巧呢? 直接看代码.

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
					//有内存卡, 进行相应操作
				}else{	
					File[] files = new File("/mnt/").listFiles();
					if(files.length > 0){
						String filePath = null;
						for(int p=0;p<files.length;p++){
							if(files[p].isDirectory()){
								if(files[p].getPath().indexOf("sdcard") > 0){	//路径名包含"sdcard"这个关键字
									StatFs st = new StatFs(files[p].getPath());
									int blocksize = st.getBlockSize();	
									int blockcount = st.getBlockCount();
									if((blocksize * blockcount) > 0){
										filePath = files[p].getPath();
									}
								}
								
							}
						}
						if(filePath != null){
							//找出本地存储的路径, 进行相应操作
						}
					}
				}

上面的方法, 可以在进行保存操作前, 先用来找出保存的路径. 主要是方便当不存在外置存储卡时 , 分配给外置存储的block数就为0,大小也当然为0. 于是能比较快的找出内置存储(不为0)的路径.当然, 假定了内置存储的路径名包含了"sdcard"这个关键字, 这是取巧的方法, 但也足以应对绝大多数的手机了.






下载保存文件到手机本地前, 优先选择位置的一个取巧方法

标签:style   java   ar   for   文件   问题   代码   sp   on   

原文地址:http://blog.csdn.net/stzy00/article/details/38899279

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!