2014-02-07 38 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”/>

相关问题