Ponieważ korzystasz z pamięci zewnętrznej, Twoja aplikacja musi być świadoma stanu pamięci zewnętrznej, który można uzyskać za pomocą Environment.getExternalStorageState()
.
Dostęp do pamięci zewnętrznej można uzyskać tylko wtedy, gdy stan to MOUNTED
.
Jeśli próbujesz otworzyć plik (lub SQLite DB; to tylko plik!) podczas uruchamiania urządzenia, zdecydowanie mają problemy, ponieważ pamięć zewnętrzna nie jest zamontowana aż do momentu uruchomienia urządzenia (po wyświetleniu ekranu głównego).
Wyjściem z tego jest zarejestrowanie IntentFilter
być powiadamianym o wszystkich zmianach stanu pamięci zewnętrznej i odpowiednio się zachowywać.
Zawsze dobrze jest przeczytać dokumentację! Szczegółowe informacje znajdziesz w dokumentacji Androida:http://developer.android.com/reference/android/os/Environment.html
Używanie pamięci zewnętrznej w tym celu jest wątpliwe, ponieważ nie możesz kontrolować, kiedy staje się ona niedostępna! Na przykład użytkownik podłącza swoje urządzenie do USB na swoim komputerze i wybiera opcję „Włącz pamięć masową USB”, aby móc uzyskać dostęp do pamięci zewnętrznej urządzenia ze swojego komputera. Złe wieści! Twoja aplikacja zostanie odłączona od pamięci zewnętrznej i najprawdopodobniej bez możliwości wykonania jakichkolwiek operacji we/wy czyszczenia!
W takim stanie rzeczy pozostaje Ci teraz co zrobić ze wszystkimi danymi, które umieściłbyś w swojej bazie danych, gdyby tylko były dostępne.