1,问题描述: 购买 中兴V955作为手机,但是为了节约成本(手机系统虚拟的SD卡空间为1.7G,满足实际要求)没有该买外部存储卡。自己写程序将图片及大量的数据保存在SD卡中,程序中使用
if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 文件可用使用外部存储 File f = new File(Environment.getExternalStorageDirectory(), PICFILEPATH); if (!f.exists()) { f.mkdirs(); }判断和检测SD卡,检测的结果为V955没有外部存储SD卡(实际中也没有装SD)。找了很多方法,都不能访问到SD卡。最后通过eclipse的DDMS发现中兴V955的存储结构为/mnt/sdcard2,因为没有外部SD卡,所以通过Environment.getExternalStorageDirectory()不能访问/mnt/sdcard(实际不存在),通过
String file = "/mnt/sdcard2/" + PICFILEPATH; File f = new File(file); if (!f.exists()) { f.mkdirs(); }
来完成对手机虚拟SD卡的访问。为了保证程序在有SD卡的手机中能够使用,可做如下判断
public static File getPicBaseFile() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // 文件可用使用外部存储 File f = new File(Environment.getExternalStorageDirectory(), PICFILEPATH); if (!f.exists()) { f.mkdirs(); } return f; } else if ((new File("/mnt/sdcard2")).exists()) { //特殊的手机,如中兴V955,存储卡为sdcard2 String file = "/mnt/sdcard2/" + PICFILEPATH; File f = new File(file); if (!f.exists()) { f.mkdirs(); } return f; } else { return null; } }
最终满足软件需求。
小结:如果手机自带外部存储或者虚拟存储,可通过上述的方式进行检查SD卡路径检查,不同的手机/mnt/sdcard2的方式不一样,有的可能为/mnt/sdcard0,可以通过eclipse的DDMS来查看SD卡的访问路径。