2014-02-07 17 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

последний вопрос, могу ли я хранить видео в своем собственном месте (например: ИЗОБРАЖЕНИЯ) или нет (например: Рингтоны) ? – Sun

0

удалить myAudioFile.delete(); этот код и попробуйте еще раз я думаю, что ваш Prob не придет.

0

Вы добавили правильные разрешения в свой манифест?

использует-разрешение андроида: имя = "android.permission.WRITE_EXTERNAL_STORAGE" />

использует-разрешение андроида: имя = "android.permission.STORAGE" />

Смежные вопросы