2014-04-17 5 views
1

소리를 재생하여 휴대 전화의 마이크에서 녹음하고 파일 (3gp 형식)에 기록하려고합니다.
일부 테스트 목적의 스레드를 사용했습니다. 문제가 나는 어떤 시스템 파일도 접근하려고하지 않고 있지만열기 실패 : EROFS 읽기 전용 파일 시스템 android

> caused by libcore.io.ErrnoException: open failed: EROFS (read only file system) 

과 같은 오류가 발생합니다. 주위를 둘러 보았습니다. this :

쓰기/읽기 권한을 모두 추가했지만 여전히 작동하지 않습니다.

public void startRecording(){ 

    MediaRecorder mRecorder = new MediaRecorder(); 
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mRecorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"xfile.3gp"); 
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    try { 
     mRecorder.prepare(); 
     mRecorder.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

및 스레드 블록 :

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

Thread thread=new Thread(new Runnable() 
{ 
    public void run() 
    { 
     try 
     { 
      genTone(); 
     } 
     catch (IOException e) 
     { 
      // TODO Auto-generated catch block                                               
      e.printStackTrace(); 
     } 
     handler.post(new Runnable() 
     { 
      public void run() 
      { 
       playSound(); 
      }                     }); 
    } 
}); 
thread.start(); 

사운드 방법을 플레이

void playSound(){ 
     AudioTrack audioTrack= null; 
     try{ 
     audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length, AudioTrack.MODE_STATIC); 
     audioTrack.write(generatedSnd, 0, generatedSnd.length); 

     audioTrack.play(); 
     Thread thr=new Thread(new Runnable(){ 
      public void run(){ 
       startRecording(); 
      } 
     }); 
     thr.start(); 

     } 
     catch(Exception e) 
     { 
      System.out.print(e); 
     } 
} 

답변

3

Environment.getExternalStorageDirectory().getAbsolutePath()+"/xfile.3gp" 
을 시도

다음은 오류를 생성하는 코드입니다3210

대신 버전이 아마 오히려

/sdcardxfile.3gp 

될 수있을 테니까요

Environment.getExternalStorageDirectory().getAbsolutePath()+"xfile.3gp" 

참고 다음

/sdcard/xfile.3gp 

따라서 나는이 질문에 주석하고 read only file system 오류

+0

업데이트 된 답변보기 – Ne0

+0

오, 알았어. 나는 그것에 신경 쓰지 않았다. 고맙습니다. 이제 파일이 나타나지만 재생할 수 없습니다. 문제가 여전히 파일이나 스레드에 있다고 생각합니까? – hanaa

+0

파일에 데이터가있는 경우 파일이 잘되어야하며 플레이어가 될 수 있습니다. 크기가 0이면 뭔가 잘못되었다는 의미입니다. – Ne0

0

매우 늦었지만 오전 나는 누군가를 도울 수있다.

나는 통화 기록 장치 앱을 개발 중이며 동일한 버그가있었습니다. 나는 안드로이드 4.4.2에서 버그를 발견했습니다. 나는 sdcard를 unmounting하여 해결했다. 나는 이것이 해결책이 아니라는 것을 안다. 그러나 당신도 그것을 사용할 수 있습니다.

관련 문제