Karta SD Akurat piszę aplikację w Javie na telefony z systemem Android. Aplikacja w dużej części korzysta z karty SD. Pytanie “jak w ogóle sprawdzić czy karta ta istnieje ?”. Aplikacja, próbując uzyskać dostęp do czegoś ,czego nie ma, może wywalić wyjątek. Jest to standardowy przykład na to, że w urządzeniach komórkowych nigdy nie ma pewników, zwłaszcza w Android.

Pierwszy sposób na sprawdzenie istnienia karty jest prosty. Pobieramy folder, w którym powinna się znajdować zawartość karty SD. Jeśli folder ten nie istnieje, to znaczy , że karty nie ma..

String path=Environment.getExternalStorageDirectory().toString();
File mFile= new File(path);
if(mFile.exists())
//wtedy karta istnieje

Jednak ta metoda nie działa tak jakbyśmy chcieli. Bo co jeśli kart SD istnieje ale nie jest gotowa do przechowywania źródeł.

Oczywiście są dużo lepsze sposoby niż sprawdzanie istnienia folderu. Używając gotowych stałych w Androidzie rozwiązujemy problem w ten sposób.

Boolean isSDPresent = android.os.Environment.getExternalStorageState()
        .equals(android.os.Environment.MEDIA_MOUNTED);

if(isSDPresent)
{}
else {}

Aby zwiększyć czytelność kodu, proponuję zastąpić wyrażenie if i else jego odwróceniem z wyrażeniem zwrotnym.

Boolean isSDPresent = android.os.Environment.getExternalStorageState().
        equals(android.os.Environment.MEDIA_MOUNTED);

if (!isSDPresent)
{
    Context context = getApplicationContext();
    int duration = Toast.LENGTH_LONG;
        
    Toast toast = Toast.makeText(context, "Karta SD nie jest podłączona", duration);
    toast.show();
    return;
}

Przykład powyżej ukazuje też w jak w prosty sposób poinformować użytkownika o tym problemie. Toast można traktować jak okienko MessageBox w aplikacjach okienkowych. Dobrze nim wyświetlać kluczowe informacje z naszej aplikacji nawet do celów czysto testowych.