lands lands - 1 year ago 112
Android Question

Permission to write on SD card android

I have a problem writing to the SD card, here is the code:
(Sorry about the layout of the code, just copy pased it )

public class SaveAndReadManager {

private String result;
private String saveFileName = "eventlist_savefile";

public String writeToFile( ArrayList<Event> arrlEvents ){
FileOutputStream fos = null;
ObjectOutputStream out = null;

File root = Environment.getExternalStorageDirectory();

if( root.canWrite() ){
fos = new FileOutputStream( saveFileName );
out = new ObjectOutputStream( fos );
out.writeObject( arrlEvents );

result = "File written";

result = "file cant write";
}catch( IOException e ){
result = "file not written";

return result;

public boolean readFromFile(){
return false;

I have not implemented the readFromFile() yet.
The problem is that root.canWrite() returns false all the time.
Here is the manifest file:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".InfoScreen"
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

<activity android:name=".EventCalendar"
android:label="@string/app_name" />

<activity android:name=".MakeEvent"
android:label="@string/app_name" />

<activity android:name=".ViewEvent"
android:label="@string/app_name" />

<uses-sdk android:minSdkVersion="8" />

I've asked for the permission to write, and on my avd, if i go to settings -> SD card and phone storage, it tells me i have 1 gb on the sd card to write on. Please help.


Answer Source

Which result are you seeing retunred from writeToFile? "file not written" or "file cant write"?

When I ran your code it dropped into the catch IOException block with the result of "file not written". The reason for this was that fos was defined incorrectly:

fos = new FileOutputStream( saveFileName );

should be:

fos = new FileOutputStream( root + "/" saveFileName );

After I changed this line, I got the result "File written" returned from writeToFile.