2012-09-06 23 views

回答

3

您必須允許使用任何默認文件名和位置來錄製文件,然後移動文件。移動文件遠不是微不足道的。這是一個完整的例子。

import java.io.File; 
import java.io.IOException; 

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Environment; 
import android.provider.MediaStore; 

import com.google.common.io.Files; 

public class SoundRecorder extends Activity { 
    private static final int RECORD_QUESTION_SOUND_REQUEST_CODE = 1; 

    @Override protected void onResume() { 
     super.onResume(); 
     Intent recordIntent = new Intent(
      MediaStore.Audio.Media.RECORD_SOUND_ACTION); 
     // NOTE: Sound recorder does not support EXTRA_OUTPUT 
     startActivityForResult(recordIntent, RECORD_QUESTION_SOUND_REQUEST_CODE); 
    } 

    @Override protected void onActivityResult(
     int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
     case RECORD_QUESTION_SOUND_REQUEST_CODE: 
     if (resultCode == Activity.RESULT_OK) { 
      // Sound recorder does not support EXTRA_OUTPUT 
      Uri uri = data.getData(); 
      try { 
       String filePath = getAudioFilePathFromUri(uri); 
       copyFile(filePath); 
       getContentResolver().delete(uri, null, null); 
       (new File(filePath)).delete(); 
      } catch (IOException e) { 
       throw new RuntimeException(e); 
      } 
     } 
     } 
    } 

    private String getAudioFilePathFromUri(Uri uri) { 
     Cursor cursor = getContentResolver() 
      .query(uri, null, null, null, null); 
     cursor.moveToFirst(); 
     int index = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DATA); 
     return cursor.getString(index); 
    } 

    private void copyFile(String fileName) throws IOException { 
     Files.copy(new File(fileName), 
     new File(Environment.getExternalStorageDirectory(), fileName)); 
    } 
} 

注意:com.google.common.io.Files.copy()來自Guava的文件副本;隨時可以使用替代實現或編寫自己的Java文件複製器。

相關問題