回答
Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
Boolean isSDSupportedDevice = Environment.isExternalStorageRemovable();
if(isSDSupportedDevice && isSDPresent)
{
// yes SD-card is present
}
else
{
// Sorry
}
如在"Using the External Storage"中所述使用Environment.getExternalStorageState()
。
要獲得外部存儲上的可用空間,使用StatFs
:
// do this only *after* you have checked external storage state:
File extdir = Environment.getExternalStorageDirectory();
File stats = new StatFs(extdir.getAbsolutePath());
int availableBytes = stats.getAvailableBlocks() * stats.getBlockSize();
void updateExternalStorageState() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
handleExternalStorageState(mExternalStorageAvailable,
mExternalStorageWriteable);
}
我寫了一個小類爲該檢查存儲狀態。也許這對你有一些用處。
import android.os.Environment;
/**
* Checks the state of the external storage of the device.
*
* @author kaolick
*/
public class StorageHelper
{
// Storage states
private boolean externalStorageAvailable, externalStorageWriteable;
/**
* Checks the external storage's state and saves it in member attributes.
*/
private void checkStorage()
{
// Get the external storage's state
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED))
{
// Storage is available and writeable
externalStorageAvailable = externalStorageWriteable = true;
}
else if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY))
{
// Storage is only readable
externalStorageAvailable = true;
externalStorageWriteable = false;
}
else
{
// Storage is neither readable nor writeable
externalStorageAvailable = externalStorageWriteable = false;
}
}
/**
* Checks the state of the external storage.
*
* @return True if the external storage is available, false otherwise.
*/
public boolean isExternalStorageAvailable()
{
checkStorage();
return externalStorageAvailable;
}
/**
* Checks the state of the external storage.
*
* @return True if the external storage is writeable, false otherwise.
*/
public boolean isExternalStorageWriteable()
{
checkStorage();
return externalStorageWriteable;
}
/**
* Checks the state of the external storage.
*
* @return True if the external storage is available and writeable, false
* otherwise.
*/
public boolean isExternalStorageAvailableAndWriteable()
{
checkStorage();
if (!externalStorageAvailable)
{
return false;
}
else if (!externalStorageWriteable)
{
return false;
}
else
{
return true;
}
}
}
這個calss有助於檢測sd卡的可用性嗎? –
@PankajNimgade本課程幫助您檢查外部存儲是否可用和/或可寫入。外部存儲器可以是SD卡或內置存儲器,如nexus設備。 – kaolick
是否可以專門檢查「SD卡」?,在此先感謝 –
我修改了它,如果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";
}
我創建了一個類來檢查SD卡上的文件夾是否可用:
public class GetFolderPath {
static String folderPath;
public static String getFolderPath(Context context) {
if (isSdPresent() == true) {
try {
File sdPath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/FolderName");
if(!sdPath.exists()) {
sdPath.mkdirs();
folderPath = sdPath.getAbsolutePath();
} else if (sdPath.exists()) {
folderPath = sdPath.getAbsolutePath();
}
}
catch (Exception e) {
}
folderPath = Environment.getExternalStorageDirectory().getPath()+"/FolderName/";
}
else {
try {
File cacheDir=new File(context.getCacheDir(),"FolderName/");
if(!cacheDir.exists()) {
cacheDir.mkdirs();
folderPath = cacheDir.getAbsolutePath();
} else if (cacheDir.exists()) {
folderPath = cacheDir.getAbsolutePath();
}
}
catch (Exception e){
}
}
return folderPath;
}
public static boolean isSdPresent() {
return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
}
}
這種簡單的方法是爲我工作。測試過所有類型的設備。
public boolean externalMemoryAvailable() {
if (Environment.isExternalStorageRemovable()) {
//device support sd card. We need to check sd card availability.
String state = Environment.getExternalStorageState();
return state.equals(Environment.MEDIA_MOUNTED) || state.equals(
Environment.MEDIA_MOUNTED_READ_ONLY);
} else {
//device not support sd card.
return false;
}
}
接受的答案不適合我
Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
工作在情況下,如果設備有內置存儲,則返回true; 我的解決方案是檢查外部文件目錄計數,如果有多個,設備有SD卡。它工作,我測試了幾個設備。
public static boolean hasRealRemovableSdCard(Context context) {
return ContextCompat.getExternalFilesDirs(context, null).length >= 2;
}
您可以檢查外部可移動SD卡,可這樣
public static boolean externalMemoryAvailable(Activity context) {
File[] storages = ContextCompat.getExternalFilesDirs(context, null);
if (storages.length > 1 && storages[0] != null && storages[1] != null)
return true;
else
return false;
}
這工作完全因爲我已經進行了測試。
- 1. 檢查SD卡是否可用或編程方式在Android
- 2. 檢查SD卡是否可用
- 3. 檢查SD卡是否可用或不使用編程方式使用Delphi
- 4. 正確檢測SD卡是否可用
- 5. 檢查SD卡是否可用或不在設備編程的Windows Phone芒果
- 6. 檢查SD卡上是否有足夠的內存編程
- 7. 如何有效檢查SD卡是否存在且可寫入?
- 8. 檢查sd卡的可用性android
- 9. 我想檢查手機是否包含SD卡,如果SD卡不可用,以下方法總是返回true
- 10. 如何檢查是否有外部SD卡?
- 11. 如何檢查SD卡是否已插入平板電腦:Android?
- 12. 檢查Android上的SD卡上是否存在文件
- 13. 檢查Android的SD卡上是否有目錄
- 14. 檢查文檔Uri是否爲外部SD卡根
- 15. 以編程方式檢測Android設備是否有SD卡插槽
- 16. 檢查編譯時iso_c_binding是否可用
- 17. 是否有可能以編程方式將文件推送到無線SD卡?
- 18. 檢測SD卡是否存在總是返回true
- 19. 檢查一個SQL服務器是否可用編程方式?
- 20. 檢查localStorage是否可用
- 21. 檢查iAd是否可用
- 22. 檢查window.onerror是否可用
- 23. 檢查DB是否可用
- 24. 如何檢查SD卡文件系統
- 25. 如何檢查SD卡插入Android?
- 26. Android:檢查SD卡上的目錄
- 27. 安卓File.exists未能檢查SD卡
- 28. 如何找到SD卡是否可用或不在android
- 29. Android。沒有SD卡可用
- 30. 是否可以在Android 6的SD卡上安裝應用程序?
如何檢查SD卡的空閒內存? – naresh
謝謝你它的工作 – naresh
,但它返回true,如果手機有inbuild存儲..所以不是正確的答案 – User10001