将音频文件存储在 SD 卡中

Posted

技术标签:

【中文标题】将音频文件存储在 SD 卡中【英文标题】:store Audio files in SdCard 【发布时间】:2017-02-09 07:38:34 【问题描述】:

这是我的通话录音应用程序代码将音频文件存储在内部存储中,但我想将音频文件存储在外部存储中。我将更改的内容和文件存储在 SD 卡中

我正在制作将音频文件存储在存储器中的录音应用程序

 public void recordVoiceCall(String phNumber, String name, String type) 

    File LastingSalesRecordingsDir = new File(Environment.getExternalStorageDirectory(),
            audioFileDirectoryPath);


    if (!LastingSalesRecordingsDir.exists()) 
        LastingSalesRecordingsDir.mkdirs();
    

    file_name = "call_" + MyDateTimeStamp.getCurrentDate() + "_" +
            MyDateTimeStamp.getCurrentTimeForFile() + "_" + type + "_" + phNumber + "_";
    try 
        audioFile = File.createTempFile(file_name, ".mp3", LastingSalesRecordingsDir);
     catch (IOException e) 
        Log.d(MyLogTags.recording, "Recording IOException: " + e.getMessage());
        e.printStackTrace();
    
    String path = Environment.getExternalStorageDirectory().getAbsolutePath();
    try 
        file_name = audioFile.getName();

        if (recorder == null) 
            recorder = new MediaRecorder();
            recorder.setAudiosource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);

            recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            recorder.setOutputFile(audioFile.getAbsolutePath());

            Log.d(MyLogTags.recording, "Recording output formats set.");
        
     catch (Exception e) 
        Log.d(MyLogTags.recording, "Recording Exception: " + e);
    
    try 

        recorder.prepare();
        Log.d(MyLogTags.recording, "Recording Recorder prepared.");
     catch (IllegalStateException e) 
        deleteVoiceFile(file_name);
        Log.d(MyLogTags.recording, "Recording prepare IllegalStateException: " + e);
     catch (IOException e) 
        deleteVoiceFile(file_name);
        Log.d(MyLogTags.recording, "Recording prepare IOException: " + e);
    

    try 
        String state = Environment.getExternalStorageState();
        if (!state.equals(Environment.MEDIA_MOUNTED)) 
            Log.d(MyLogTags.recording, "SD Card is not mounted.  It is " + state + ".");
            throw new IOException("SD Card is not mounted.  It is " + state + ".");
        

        recorder.start();
        Log.d(MyLogTags.recording, "Recording Recorder started for: " + phNumber);
        recordStarted = true;
     catch (Throwable e) 
        deleteVoiceFile(file_name);
        Log.d(MyLogTags.recording, "Recording start Exception: " + e);
    

【问题讨论】:

Environment.getExternalStorageDirectory()。那已经是外部存储器了。不是 SD 卡。您唯一需要的是文件对象或 SD 卡的文件路径。一旦你有了,你的代码的其余部分是相同的。您还应该意识到,在现代 android 设备上,您的应用程序无法写入 SD 卡。只读。不知道媒体录音机能不能写在那里。 @greenapps 是否可以将录音文件存储在外部 sdcard 存储中? @greenapps 我正在制作Android录音应用程序并编写相同的代码,它将数据存储在内部存储器中而不是SD卡中 【参考方案1】:

您可以使用 Android 的默认外部存储目录来保存您的音频文件。

File path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_MUSIC);

您也可以使用 File Class Constructor 在 SD 卡上创建一个新文件夹。

File audioFolder = new File(Environment.getExternalStorageDirectory(), 
"newaudiofolder")
  if (!audioFolder.exists()) 
boolean success = audioFolder.mkdir()
if (success) 
    // save the file 


确保在 Manifest.xml 中添加权限

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

【讨论】:

以上是关于将音频文件存储在 SD 卡中的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中获取存储在sd卡中的文件名

如何以编程方式备份​​ SD 卡中的 sqlite 文件?

当SD卡中的数据不小心被删除了该怎么找回的技巧攻略

Android应用存储路径选择方案的设计

文件的存储和读取

通过AsyncTask下载图像并将其显示在Imageview中而不存储在SD卡中