Skip to main content
1 of 5
Flow
  • 18.5k
  • 16
  • 80
  • 138

The reason is the history of Android: The first generation of Android devices only hand a small amount of internal storage (around 100-400MiB) that was mounted under /data.

Next devices with a, at that time external, SD-card came out. The SD card was mounted under /mnt/sdcard.

After that, devices with large internal storage came on the market. This storage was portioned, because /mnt/sdcard had become the default place for big data chunks from apps, pictures and such. So the Android environment had to have a \data and \mnt\sdcard directory. Therefore one parition was for /data, the other for /mnt/sdcard. This is the reason why you storage space could become low (the \data partition) even if there is plenty of space on \mnt\sdcard.

This situation was improved with Android 3.0: /data and /mnt/sdcard are now pointing to the same parition. Good job Google, that could have been done versions ago. Which is also the reason why app2sd is no more needed on Andriod 3.0 or higher: You would only move the data within the same volume.

Now we come to the answer if your question: Since /mnt/sdcard is already mounted on the internal storage, an external SD-card has to use a different mount point. And this mount point is not specified by Google. It could be

  • /mnt/sdcard/ext_sd
  • \mnt\external
  • \mnt/extSdCard
  • etc.

The API call getExternalStorageDirectory() usually points to the internal storage direcotry. This behavior is documented. There are open source projects that provide tools to find the external SD-card directory in a canonical way.

Flow
  • 18.5k
  • 16
  • 80
  • 138