在我的闪屏中,我想检查手机是否有SDCard。布尔语句如下:
Boolean isSDPresent = android.os.Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED );
所以,如果我把SDCard放在我手机的插槽里,这个布尔值将返回true,到目前为止都还好。当我从设置菜单中进入"Unmount SDCard“,删除SDCard,然后终止应用程序并再次启动它时,布尔值也将为真。
如果我在卸载并移除SD卡后启动Astro File Manager
,我仍然可以访问/mnt/sdcard
路径,为什么?
我怎样才能做到这一点呢?
提前感谢!
编辑
使用以下代码进行测试:
File path = Environment.getExternalStorageDirectory();
String pathS = path.getPath();
当SDCard在插槽中时,pathS
包含mnt/sdcard
,但当我移除SDCard时,pathS
仍然是/mnt/sdcard
...
发布于 2012-08-23 16:22:51
我发现,像三星的Galaxy手机这样的手机,/mnt/sdcard
指向的是内部存储器,而不是预期的外部SD卡。
通过调用Environment.isExternalStorageRemovable(),您可以知道Environment.getExternalStorageDirectory()返回的路径是否是外部SD卡
我只想从getExternalStorageDirectory()的文档中添加一个重要的说明:
注意:不要被“外部”这个词搞糊涂了。此目录可以更好地视为媒体/共享存储。它是一个文件系统,可以保存相对大量的数据,并且在所有应用程序之间共享(不强制执行权限)。传统上,这是SD卡,但它也可以作为设备中的内置存储来实现,该设备与受保护的内部存储不同,并且可以作为文件系统挂载到计算机上。
发布于 2012-08-23 16:30:02
它不应该是:
boolean isPresent = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED
);
正如Environment.getExternalStorageState()
的文档所述
获取主“外部”存储设备的当前状态。
而对于Environment.MEDIA_MOUNTED
-constant
如果介质存在并已装入到其具有读/写访问权限的装入点,则
getExternalStorageState()
将返回MEDIA_MOUNTED
。
这将从API级别的1+开始工作。
发布于 2013-09-02 20:31:17
我修改了,如果SD卡存在,如果没有在内部目录中设置,则在那里设置路径
Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
if(isSDPresent)
{
path = theAct.getExternalCacheDir().getAbsolutePath() + "/GrammarFolder";
}
else
{
path = theAct.getFilesDir() + "/GrammarFolder";
}
https://stackoverflow.com/questions/12087510
复制相似问题