首页 > 代码库 > 下载保存文件到手机本地前, 优先选择位置的一个取巧方法
下载保存文件到手机本地前, 优先选择位置的一个取巧方法
现在的手机内存动辄内置了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"这个关键字, 这是取巧的方法, 但也足以应对绝大多数的手机了.
下载保存文件到手机本地前, 优先选择位置的一个取巧方法