MarcoS
MarcoS

Reputation: 17721

Android, which device's dir should I write data to, to be able to read it back?

I'm writing an Android app which uses wi-fi, so I can't easily debug to emulator (no wi-fi support... ;-), so I go with my real device (a Samsung Galaxy S). I would like to be able to read data files my app writes, to debug and test. If I use, say:

 new File(getFilesDir(), "myfile.xml");

I get my data file written to /data/data/MYPACKAGE/files/, but that directory is non accessible via adb (nor via Eclipse's DDMS). My device is not rooted (and I'd prefer to avoid rooting it, if possible... ;-) Where should I write my data file to?

Upvotes: 0

Views: 158

Answers (4)

Maximus
Maximus

Reputation: 8431

The answer differs depending on your API level. Review the section in the documentation on external storage to get the answer for this. http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

For a somewhat generic answer, the sdcard directory that you should be storing files in is the directory returned from getExternalStorageDirectory() (which should be the root of your sdcard or possibly internal expanded storage as with my Captivate), with subdirectories of /Android/data/your.package.name/files

Oh yes, and as another poster mentioned, don't forget the WRITE_EXTERNAL_STORAGE permission in your manifest.

Upvotes: 0

Chris Stratton
Chris Stratton

Reputation: 40367

It probably makes sense to put the files on the sdcard during development, formally you should call getExternalStorageDirectory() to find it and of course will need external storage permission.

Alternatively, you could give public access to your private files in the debug version; just don't forget to turn that off before you ship (as a certain Internet telephony company reportedly did). However, this will not make the private files browsable as the intervening directories are not, you would only be able to adb pull them via their exact path name.

A third choice would be to leave the data internal and private, but have a debug function to copy it over to the sdcard for analysis. You could even do this in a separate .apk establishing a shared user id with the first, meaning no changes at all to your application.

Upvotes: 2

Haphazard
Haphazard

Reputation: 10948

You can write to your SDcard. You should use getExternalStorageDirectory() to get your SDcard's path. You will have to include the <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> in your Manifest to do that.

Upvotes: 0

Vladimir Ivanov
Vladimir Ivanov

Reputation: 43098

Simply use external storage!

Upvotes: 0

Related Questions