根据我的应用程序,我正在下载图片和一些数据,我需要将它们保存在手机内存或SD卡中。由于图片可能很大,我决定把它保存到SD卡中。我正在使用下面的代码来确定SD卡是否可用。如果是我正在使用SD卡,如果不是我正在使用手机内存。但问题是,如果我弹出SD卡,我的应用程序在启动时崩溃,我得到File Not Found异常。据我了解,由于手机有内置SD卡,
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)
始终返回“已装载”。我怎么能理解外部SD卡真的被弹出了?
编辑:我试图检查SD卡是否可用,因为我使用的是以下代码,因为手机内部有SD卡
android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)
总是返回true并且它创建没有SD卡的目录。因此,检查目录是否为null无法理解文件是否存在。以下是我的代码。
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
cacheDir=new File(context.getExternalFilesDir(null), applicationDirectory + folderName);
}
else {
cacheDir = new File(context.getCacheDir(), applicationDirectory + folderName);
}
if(!cacheDir.isDirectory())
cacheDir.mkdirs();
所以根据我的解决方案,我尝试读取所需的文件,如果我得到FileNotFoundException,我会在应用程序启动时将所有内容从assets文件夹复制到目录(SD卡或手机内存),然后用布尔值控制它共享偏好中的值。这样,如果用户弹出SD卡,内容将被复制到手机内存,并将从该目录开始工作。
我需要大约10MB的缓存空间来保存我的一些文件,并且使用这个解决方案(我不确定它是否有效)如果用户运行应用程序,我将在SD卡和手机内存中都有我的内容什么时候没有SD卡。任何其他解决方案,找出保存文件,外部或内部存储器的位置?谢谢你的回答。任何想法将不胜感激。
答案 0 :(得分:2)
您可以使用这些方法检查外部sd上的文件夹是否存在:
if(myFolder != null && myFolder.exists()) { /* work here */ }
myFolder将是一个针对外部sd的文件(您应该检查内部内存中的供应商映射,因为它们与每个供应商不同)。
可悲的是,两个sds并不是真正的Android方式,这导致Android认为内部sd是外部的。
有一个讨论和代码示例,用于查找外部sd here。
答案 1 :(得分:1)
检查此主题:
How android application detects two SD CARDS in a device
也许您可以检查sdcards的文件夹是否存在并处理卡不存在的情况?
类似于:
sdcardloc = /mnt/sdcard/sdcard1;
if(sdcardloc != null && myFolder.exists()) { /*case where card is mounted*/ }
else { /*handle case where no card is mounted*/}
答案 2 :(得分:1)
外部SD卡,这个概念是针对设备供应商的。在android只有外部存储的概念。此外,Environment.getExternalStorageDirectory()
指的是设备制造商认为是“外部存储”的任何内容。