2013-06-27 61 views
0

我正在制作一个允许该用户录制音频的应用程序。我为此使用了Audio intent。我想要做的是录制音频,设置其名称,并将其保存在一个文件夹中。在我的代码中,音频被保存并正确命名,但是当我尝试播放时,它说“对不起,它不能播放。”我不知道我犯了什么错误。请帮助我,我会非常感激。谢谢。已保存已录制的音频使用无法播放音频意图

这里是我的代码:

..... 
private void dispatchTakeAudioIntent(int actionCode) 
{ 
    Intent takeAudioIntent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); 

    File a = null; 
    try { 
      a = setUpAudioFile(); 
      mCurrentAudioPath = a.getAbsolutePath(); 
      takeAudioIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(a)); 
     } catch (IOException e) 
      { 
       e.printStackTrace(); 
       a = null; 
       mCurrentVideoPath = null; 
      } 
    startActivityForResult(takeAudioIntent, ACTION_TAKE_AUDIO); 


} 

private File setUpAudioFile() throws IOException { 

    File v = createAudioFile(); 
    mCurrentVideoPath = v.getAbsolutePath(); 

    return v; 
} 

private File createAudioFile() throws IOException 
{ 
    // Create an audio file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String audioFileName = AUDIO_FILE_PREFIX + timeStamp + "_"; 
    File albumF = getAlbumDir(); 
    File audioF = File.createTempFile(audioFileName, AUDIO_FILE_SUFFIX, albumF); 
    return audioF; 
} 

private void galleryAddAudio() 
{ 
    Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE"); 
    File f = new File(mCurrentAudioPath); 
    Uri contentUri = Uri.fromFile(f); 
    mediaScanIntent.setData(contentUri); 
    this.sendBroadcast(mediaScanIntent); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case ACTION_TAKE_PHOTO: 
    { 
     if (resultCode == RESULT_OK) 
     { 
      handleBigCameraPhoto(); 
      dispatchTakePictureIntent(ACTION_TAKE_PHOTO); 

     } 

     break; 

    } 
    case ACTION_TAKE_AUDIO: 
    { 
     if (resultCode == RESULT_OK) { 

      //audioFileUri = data.getData(); 
      handleAudio(data); 
      //galleryAddVideo(); 
     } 
     break; 
    } 
    } // switch 
} 

private void handleAudio(Intent data) { 

    audioFileUri = data.getData(); 
    if (mCurrentAudioPath != null) 
    { 
     //audioFileUri = data.getData(); 
     galleryAddAudio(); 
     mCurrentAudioPath = null; 
    } 

} 

........ 

回答

1

有关于RECORD_SOUND_ACTION意图,它不支持指定保存录音文件路径有一些限制。应用程序应将音频保存在默认位置。您不能使用MediaStore.EXTRA_OUTPUT作为额外的,因为在MediaStore的文档中它被写在恒定的EXTRA_OUTPUT它只用于图像和视频。

The name of the Intent-extra used to indicate a content resolver Uri to be used to store the requested image or video. 

这个原因的解决方案有点棘手。您可以让应用程序将音频保存为默认音频,但在剪切,粘贴并将音频重命名为所需位置后即可。我找到了两个答案,声称他们找到了一种方法来剪贴。

Solution A

Solution B

,如果你觉得它有用接受这个答案或+1。