2012-07-17 6 views
2

나는 안드로이드에 음성을 녹음하고 테스트를 위해 작은 응용 프로그램을 개발하려고한다. 그래서 나는 내 응용 프로그램을 실행하여 sdcard에 쓸 수 없다고 말했다. 그래서 거기에 내 코드입니다 :MediaRecorder, SDcard에 쓸 수 없다.

public class MainActivity extends Activity { 

private static final String LOG_TAG_ENREGISTREUR = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     Button record_btn = (Button)findViewById(R.id.button1); 
     Button stop_btn = (Button)findViewById(R.id.button2); 
     File fileRecord = null; 
     final MediaRecorder media = new MediaRecorder(); 
     String state = android.os.Environment.getExternalStorageState(); 
     if(!state.equals(android.os.Environment.MEDIA_MOUNTED)){ 

      Log.e(LOG_TAG_ENREGISTREUR,"SDcard not found!"); 
      return; 
     } 

     File repertoryStockage = Environment.getExternalStorageDirectory(); 
     if(!repertoryStockage.canWrite()){ 

      Log.e(LOG_TAG_ENREGISTREUR,"Impossible , you can't write"); 

      return; 
     } 

     try { 

      fileRecord = File.createTempFile("RecordingAudio", ".mp4",repertoryStockage); 
     } catch (Exception e) { 
      Log.e(LOG_TAG_ENREGISTREUR,"Probleme E/S before recording"); 
      return; 
     } 
     media.setAudioSource(MediaRecorder.AudioSource.MIC); 
     media.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     media.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     media.setOutputFile(fileRecord.getAbsolutePath()); 

     record_btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       try { 
        media.prepare(); 
       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       media.start(); 

      } 
     }); 

     stop_btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 



       media.stop(); 
       media.release(); 

      } 
     }); 
    } 



} 

그리고 난 매니페스트에 권한을 추가 :

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

타 것은 내가 SD 카드를 작성하고 내가 의해 에뮬레이터에 추가 : -sdcard "[SDCARD의 경로] " 그래서 문제가 무엇입니까?

답변

1

글쎄,이 코드는 나를 위해 작동합니다. 그래서 당신이 에뮬레이터에서 잘못 설정 한 것일 수 있습니다. SDK 레벨 15 (4.0.3)를 사용했습니다.

이 하나 Impossible, You can't write를 말한다 로그로 try 블록을 교체 시도 할 수 :

File repertoryStockage = Environment.getExternalStorageDirectory(); 
File sample = new File(repertoryStockage,"empty.txt"); 
try 
{ 
    sample.createNewFile(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
if(!sample.canWrite()){ 

    Log.e(LOG_TAG_ENREGISTREUR,"Impossible , you can't write"); 
    return; 
} 
sample.delete(); 

난 당신이 디렉토리에 쓰기 권한을 확인 할 수 있음을 나타내는 어떤 장소를 발견했다. 이 답변을 참조하십시오 (코드는 주로 해당 답변의 코드입니다) : Checking for write access in a directory before creating files inside it

하지만 처음에는 말했듯이, 코드는 변경없이 나에게 적합합니다.

+1

DDMS> mnt> sdcard를 확인했는데 쓰거나 읽을 수있는 권한이 없으므로 변경 방법을 알고 있습니까? 나는 이것이 문제라고 생각한다 – NMNM

+1

오, 당신의 대답을 고맙다. 문제는 내가 "퍼미션없이 SDCARD"라고하기 때문에 나는 이것을 [link] (http://android-tricks.blogspot.com/2009/01/)했다. mount-filesystem-read-write.html), 그리고 문제를 해결했습니다. – NMNM

+0

다행이었습니다. –

관련 문제