2017-02-09 110 views
0

这是我的通话录音应用代码存储音频文件在内部存储,但我想存储音频文件在外部存储。我会改变,文件存储在SD卡存储在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); 
    } 
} 
+1

权限添加'Environment.getExternalStorageDirectory()'。这已经是外部记忆。不是SD卡。您需要的唯一东西就是一个File对象或SD卡的文件路径。一旦你的代码的其余部分是相同的。您还应该认识到,在现代Android设备上,您的应用无法写入SD卡。只读。我不知道媒体录音机是否可以在那里写。 – greenapps

+0

@greenapps是否可以将音频录制文件存储在外部SD卡存储中? – Ahmad

+0

@greenapps我正在制作Android录音应用程序并编写相同的代码,它将数据存储在内部存储器中,但不存储在SdCard中 – Ahmad

回答

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"/> 
相关问题