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

现在的手机内存动辄内置了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"这个关键字, 这是取巧的方法, 但也足以应对绝大多数的手机了.






郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。