2014-02-07 67 views
1

我使用Intent錄製帶默認錄音機的音頻,但每次將錄製音頻錄製到默認位置,而不是在給定路徑中,爲什麼?爲什麼僅在默認位置獲取錄製音頻

File dir = new File 
(Environment.getExternalStorageDirectory().getAbsolutePath() +"/Ringtone"); 
dir.mkdirs(); 
myAudioFile = new File(dir+"/RecordedAudio.3gpp"); 
myAudio = Uri.fromFile(myAudioFile); 
Intent i = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); 
i.putExtra(MediaStore.EXTRA_OUTPUT, myAudio); 
startActivity(i); 

權限: -

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

由於您正在刪除目錄myAudioFile.delete();'刪除此行,您就完成了。 – InnocentKiller

+0

已刪除,但仍未解決 – Sun

+0

因爲您正在使用Intent錄製默認錄音機的音頻,因此無論您提供什麼路徑,它都會將錄製的音頻存儲到默認目錄。解決方案是您必須獲取上次錄製音頻的路徑,然後您必須將該文件移動或複製到目標位置。 – InnocentKiller

回答

1

不喜歡這樣的方式,

Intent i = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); 
i.putExtra(MediaStore.EXTRA_OUTPUT, myAudio); 

然後創建onActivityResult並添加以下代碼。

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, 
       resultCode, data); 
     if (resultCode == Activity.RESULT_OK) { 
      switch (requestCode) { 
      case CAPTURE_AUDIO: 

       Uri audioUri = data.getData(); 
       String absolutepath = getRealPathFromURI(audioUri); 

       String path2 = Environment.getExternalStorageDirectory() 
         + "/Ringtone/"; 
       File file = new File(absolutepath); 
       File file2 = new File(path2 + "RecordedAudio.3gpp"); 
       file.renameTo(file2); 
       break; 

      default: 
       break; 
      } 
     } 
    } 

這裏是你的getRealPathFromURI方法。

public String getRealPathFromURI(Uri contentUri) { 
     String[] proj = { MediaStore.Audio.Media.DATA }; 
     Cursor cursor = managedQuery(contentUri, proj, null, null, null); 
     int column_index = cursor 
       .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
     cursor.moveToFirst(); 
     System.out.println("absolutepath audiopath in getRealPathFromURI : " 
       + cursor.getString(column_index)); 
     return cursor.getString(column_index); 
    } 

肯定這會爲你工作。

+0

這意味着沒有希望開發者定義的路徑:( – Sun

+0

是的,我也已經花了3天的時間來解決這個問題。 – InnocentKiller

+0

最後一個問題,我可以存儲視頻在我自己的位置(如:IMAGES)或不(如:鈴聲) ? – Sun

0

刪除myAudioFile.delete();驗證碼,然後再試一次,我認爲你的概率會不來了。

0

您是否在清單中添加了適當的權限?

使用許可權的android:NAME = 「android.permission.WRITE_EXTERNAL_STORAGE」/>

使用許可權的android:NAME = 「android.permission.STORAGE」/>

相關問題