Permission to write on SD card android

前端 未结 4 667
逝去的感伤
逝去的感伤 2020-12-30 16:49

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         


        
相关标签:
4条回答
  • 2020-12-30 17:01

    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).

    0 讨论(0)
  • 2020-12-30 17:02

    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

    0 讨论(0)
  • 2020-12-30 17:08

    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.

    0 讨论(0)
  • 2020-12-30 17:17

    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;
        }
    
    0 讨论(0)
提交回复
热议问题