I don't have an Android device to test this (yeah, i know. Android developer without an Android device) but i was wondering if in case there is either NO sdcard in the device, or the sdcard is full, when i need to store some data during the execution of my app, will it return an IOException? Or will it just store it automatically in the phone's memory? OR what happens in this situation, and what are the best steps to pursue?
you could check if the sd card is mounted or not
Is there a way to tell if the sdcard is mounted vs not installed at all?
EDIT:
you can check the availaible space in your phone (sdcard/internal)
How to Check available space on android device ? on SD card?
you might find this useful too.. An IOException IS thrown if you exceed the storage limit.
IOException is thrown when SDCard is full
You can setup the emulator so it uses a SD card and then fill it up with for example "dd". This should give you an environment you can use to test your application in the case when there is no room left on your SD card.
Related
I created an Android app sometime ago. What the app does is basically download a list of files (images and videos) and play them in a loop (like a Playlist).
These files are saved in the default Android External Storage Directory. I get it using this method:
Environment.getExternalStorageDirectory().getAbsolutePath();
Until now I never had storage problems but testing the app on an old device (which has less storage capacity) I realised that I have a problem when the files (PlayList) size is bigger than the device storage capacity.
I have thought (and research) about using an USB stick, but I don't think that would be a good solution since I cannot know 100% sure the USB path (it can be different for each device).
Any ideas about how handle this problem? Maybe another solution instead of using the USB ?
Here is what I have researched:
How to access USB Path in android?
How to find USB storage path programmatically?
android How to write files to a usb memory?
Do you need to store the actual images and videos on the device - why not just store their location and get them dynamically. I've not used a recyclerView but I thought that it could do something like this, but could be wrong.
I am facing interesting problem. I have discovered, that Samsung in it's own Android phones has two implementations of storage.
1st: /sdcard - is internal memory and /sdcard/external_sd is actually inserted memory card
2nd: /storage/sdcard0 - is internal memory and /storage/ExtSdCard is actually inserted memory card.
My app needs data to be stored in sd card, so I am facing problem, how to determine, which folder might be sd card link or not. Do you know situation of any other Android maker (LG, HTC, Sony), how to cope with external SD cards and how they are visible in android system?
It is really so simple. When you consider your samsung mobiles it is the internal storage that acts as your sdcard.
if you are looking for to save a file in Sdcard, you have to stop hard coding the path like,
/mnt/sdcard.. and so.
instead use, Environment.getExternalStorageDirectory();
This will return the path to your sdcard straight away.
And from there, add Environment.getExternalStorageDirectory()+File.separator+"your directoryname";
And this works for all brands not unique to Samsung.
My friend is testing my application which uses the SD card to store some settings. He has a Samsung Galaxy S2 but he just told me that he hasn't got an SD card in his device. It seems that the device created a folder in the phone's memory which simulates the existence of an SD card and that is where all app files that used the Sdcard are stored.
Is this a feature available for all Android devices? Should I consider the fact that there is no SD card on a device or should I not bother? Not sure if I should check for SD card availability in my app or not.
P.S. I've just noticed that the same goes for the emulator if I don't specify memory for the SD card.
You definitely should check for sdcard availability. On some devices it might work (as you said), but on some not, and you could get a FileNotFoundException.
So it's worth checking.
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.toString().equals(
state.toString())) {
//////then do your work here////////
}
another solution: https://stackoverflow.com/a/7429264/6451573
I am working on an app which needs to move the files from sdcard to the flash memory .The problem is that both the flash memory and sdcard is detected by :
(Environment.getExternalStorageDirectory())
So I cant detect whether sdcard is inserted or not .
Has anyone came across the same problem please help ?
I am using Archos 7 home tablet eclair. I need to know how can I get the path for the flash memory and sdcard.
What do you mean by:
both the flash memory and sdcard is detected by:
(Environment.getExternalStorageDirectory())
To detect whether the external storage is available, use:
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
// External storage is available
} else {
// External storage is NOT available
}
You can also use Environment.isExternalStorageRemovable() (watch out, Android 2.3+ only) to check whether the device has a removable SD card or a builtin one (such as the Nexus S).
Does this solve your problem?
I wanted to know how to virtually create sd card in the emulator. Also I wanted to know where the app is really installed on the device.Is it in sd card or in internal memory..Thanks in advance
The above is answering your question related to your emulator SD card.
For installed app location follow this link:
Difference between Emulator and Real Device for Installed applications?
you can find your app stored location using DDMS in Eclipse. Usually you app will under
data->data->
If you want to use SD Card functionality in your Emulator then add new hardware SD Card Support. This option is avaible when you created new avd.