根据我的应用程序,我正在下载图片和一些数据,我需要将它们保存在手机内存或sd卡的某个地方。因为照片可能很大,所以我决定把它保存到sd卡中。我正在使用下面的代码来确定sd卡是否可用。如果是的话,我使用SD卡,如果不是,我使用的是手机内存。但是问题是,如果我弹出SD卡,我的应用程序会在启动时崩溃,而我得到的文件没有找到异常。据我所知,由于手机内部有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,我会在应用程序启动时将所有内容从资产文件夹(SD卡或电话内存)复制到目录中,并使用共享首选项中的布尔值控制它。这样,如果用户弹出SD卡,内容将被复制到电话内存,并将从该目录工作。
我需要大约10 my的缓存空间来保存我的一些文件,使用这个解决方案(我不确定它是否有效),如果用户没有SD卡运行应用程序,我将在SD卡和电话内存中同时保存我的内容。还有其他的解决方案来找出保存文件的地方,外部还是内部内存?谢谢你的回答。任何想法都会感激的。
发布于 2012-06-18 07:07:34
您可以使用这些方法检查外部sd上的文件夹是否存在:
if(myFolder != null && myFolder.exists()) { /* work here */ }myFolder将是一个针对外部sd的文件(您应该检查内部内存中的供应商映射,因为它们与每个供应商的vor不同)。
可悲的是,两个sds并不是真正的Android方式,这导致Android认为内部sd是外部的。
有一个寻找外部sd here的讨论和代码示例。
发布于 2012-06-18 07:08:45
检查这个线程:
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*/}发布于 2012-06-18 07:10:36
外部SD卡,这个概念是专门针对设备供应商的。在android中只有外部存储的概念。Environment.getExternalStorageDirectory()也是指设备制造商认为是“外部存储”的任何东西。
https://stackoverflow.com/questions/11078231
复制相似问题