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

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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值