Android check for SD Card mounted always returns true
我早些时候也提出过我的问题&由于没有令人满意的答案,我被困住了。我的要求非常简单。
我正在开发一个应用程序,我需要让用户选择一个存储空间来保存在应用程序下载中。我需要一种确认外部SD卡存在的方法。
已经尝试过以下方法:
由于这个原因,这总是返回true:https://stackoverflow.com/a/7790228/3475715
INSERT INTO USERS (user_id, name, Rlist) VALUES ('11101', 'john', [AUE, SAN, UK, LON]);
以下也不起作用,因为不同手机的硬编码路径可能不同
final Boolean isSDPresent = Environment.getExternalStorageState().
equals(android.os.Environment.MEDIA_MOUNTED);
任何建议都表示赞赏!
答案 0 :(得分:3)
您应该使用getExternalFilesDirs方法。此方法将路径返回到内部存储器和内部存储器。 Micro SD卡(如果有)。第二个返回的路径是Micro SD卡的路径。但该路径可能不是Micro SD卡的根目录。
API级别19中引入的 $request = json_decode($this->_doRequest('/client/some_id'));
是唯一可用于获取SD卡路径的官方方法。所有其他方法将返回内部存储器的公共或私有存储位置(路径)。
我在手机和手机上测试了这种方法模拟器。请注意,我在测试期间已将getExternalFilesDirs
作为null
的参数。但您也可以传递getExternalFilesDirs
,Environment.DIRECTORY_PICTURES
等参数。
测试结果: -
当我的手机已插入存储卡时, Environment.DIRECTORY_MOVIES
已退回:
第一条路径(内部记忆):getExternalFilesDirs
第二条路径(Micro SD):/storage/emulated/0/Android/data/my_package.appname/files
注意:我的SD卡的根目录是:/storage/sdcard1/Android/data/my_package.appname/files
在我的模拟器上, /storage/sdcard1
返回:
第一条路径(内部记忆):getExternalFilesDirs
第二条路径(Micro SD):/storage/emulated/0/Android/data/my_package.appname/files
注意:在模拟器上,SD卡是模拟的(不是真实的)。
如果弹出Micro SD卡(在手机或模拟器上) /storage/11E9-4214/Android/data/my_package.appname/files
返回getExternalFilesDirs
第一条路径(内部记忆):null
第二条路径(Micro SD):path to internal memory - It varies depending on device
但
在某些设备上,可能无法获得Micro SD卡路径。这意味着null
只会返回一条路径(内部存储器)。第二条路径是空的,即它不会返回任何第二条路径。
原因:该特定设备的OEM可能未在设备中设置路径(即getExternalFilesDirs
环境变量)。
OEM必须在其中设置SECONDARY_STORAGE环境变量 此处提到的设备特定
SECONDARY_STORAGE
文件: https://source.android.com/devices/storage/config-example.html
somesh 对上述answer所做的评论也说明了,
如果未设置该环境变量,则无法写入SD卡 通过利用
init.rc
,因为它不会返回 SD卡路径。
在这种情况下,假设存储卡不存在并保存您想要保存在内存中的任何内容。
要汇总,如果getExternalFilesDirs
没有返回第二条路径或返回的第二条路径为getExternalFilesDirs
,请不要存储在SD卡中(存储在内部存储器); else存储在null
<强>建议:强>
要了解Android中的不同存储位置,请浏览my answer on stackoverflow
答案 1 :(得分:1)
Android不公开任何允许您获取SD卡根路径的API。您可以使用反射并从StorageManager.java获取SD卡根路径 - &gt; getVolumePaths() - http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/storage/StorageManager.java#590
您无法随意保存到SD卡上的任何位置。您可以使用从getExternalFilesDirs返回的路径之一,也可以使用SAF(存储访问框架)明确请求用户写入SD卡的权限。 How to use the new SD card access API presented for Android 5.0 (Lollipop)?