2013-06-27 57 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。