Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android - Internal Storage vs External Storage when App installed on SD Card

I have an app which downloads large amounts of content (it varies between users but could be 200mb to 1GB or more).

Currently I save all of this content on External Storage as this is likely to be the area with the most space, such as an SD card. This works fine for the most part however there is a situation where this isn't necessarily ideal.

If the device has in built external storage, like most tablets, but also has an SD card slot, the external storage issue gets a little complicated. The app can be installed onto the SD card, but the content will be saved on the built in storage, not the external SD card.

If the app is install on an SD card, will calling getFilesDir() give a path on the SD card, or the internal storage?

And what is the best way of handling this? Should I save content to the internal storage (on an sd card), the external storage or is asking the user when starting the app the best idea?

like image 923
David Scott Avatar asked May 08 '12 09:05

David Scott


2 Answers

The app can be installed onto the SD card, but the content will be saved on the built in storage, not the external SD card.

No. If the device has external storage, the app will be installed to external storage. It does not matter whether the device also has an SD card.

If the app is install on an SD card, will calling getFilesDir() give a path on the SD card, or the internal storage?

getFilesDir() is always internal storage, regardless of where the app is installed.

like image 87
CommonsWare Avatar answered Sep 20 '22 18:09

CommonsWare


If the app is install on an SD card, will calling getFilesDir() give a path on the SD card, or the internal storage?

No. getFilesDir() method in Context class always returns path to Internal Storage(in Android terms).

In most cases, directory path returned by getFilesDir() would be /data/data/your.application.package.appname/files . But it may vary on different phones, different Android versions.

To store your app files in SD card, you may use File[] getExternalFilesDirs (String type) method in Context class. Generally, second returned path would be the storage path for microSD card (if any).

On my phone, second path returned was /storage/sdcard1/Android/data/your.application.package.appname/files after passing null as argument for getExternalFilesDirs (String type)

The Internal and External Storage terminology according to Google/official Android docs is quite different from what we think.

like image 30
AnV Avatar answered Sep 20 '22 18:09

AnV