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 {
priv
I use the following code to record audio data (successfully) to my Android's SD Card. My application requires the RECORD_AUDIO permission, but nothing else.
File file = new File (Environment.getExternalStorageDirectory().getAbsolutePath() + FILE_NAME);
if (file.exists())
file.delete(); // Delete any previous recording
try
{
file.createNewFile(); // Create the new file
}
catch (IOException e)
{
Log.e (TAG, "Failed to create " + file.toString());
}
try
{
OutputStream os = new FileOutputStream (file);
BufferedOutputStream bos = new BufferedOutputStream (os, 8000);
DataOutputStream dos = new DataOutputStream (bos); // Create a DataOutputStream to write the audio data to the file
// Create an AudioRecord object to record the audio
int bufferSize = AudioRecord.getMinBufferSize (frequency, channelConfig, Encoding);
AudioRecord audioRecord = new AudioRecord (MediaRecorder.AudioSource.MIC, frequency, channelConfig, Encoding, bufferSize);
short[] buffer = new short[bufferSize]; // Using "short", because we're using "ENCODING_PCM_16BIT"
audioRecord.startRecording();
while (isRecording)
{
int bufferReadResult = audioRecord.read (buffer, 0, bufferSize);
for (int i = 0; i < bufferReadResult; i++)
dos.writeShort (buffer[i]);
}
audioRecord.stop();
dos.close();
}
catch (Exception t)
{
Log.e (TAG, "Recording Failed");
}
It would appear to me that you're missing the getAbsolutePath() call appended to your getExternalStorageDirectory() call (which may have the same result as Marc Bernstein's hard coded solution).
I should have included the following link as well (since it's where I got the code that writes to the SD Card...):
http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html
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.
Try checking the state of the SD card before you attempt to write to it. It may be used as a shared drive, corrupted, full, etc. A list of states can be found here: http://developer.android.com/reference/android/os/Environment.html
Here's an example of getting the states:
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
mExternalStorageAvailable = mExternalStorageWriteable = false;
}