Implement 「Record」function
PersonRecordActivity.java
// 給一個布林值sdCardExit判別SD card是否存在 boolean sdCardExit = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); // 自動抓當前的系統時間, 格式自訂為yyyy.MM.dd_HH.mm.ss java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy.MM.dd_HH.mm.ss"); // 錄音狀態以1來表示 static final int RECORDING_STATE = 1; // 錄音檔名的部份命名 final String SAMPLE_PREFIX = "PersonRecord_"; // 此值紀錄record的起始時間 long recordingStart =0; MediaRecorder mRecorder = null; public void onClick(View ImageButton) { switch (ImageButton.getId()) { // 當user按下record按鈕 case R.id.ib_record: // 若SD card存在則執行以下動作 if (sdCardExit) { // 先將狀態設為錄音中 int mState = RECORDING_STATE; // 若正在播放檔案, 則先停止它 stopAudioPlayback(); // 開始錄音 startRecording(MediaRecorder.OutputFormat.THREE_GPP, ".3gp", this); // 更新各ImageButton的圖示 updateUi(); } else { // 若SD card不存在則show toast提醒user Toast.makeText(context, "SD Card not exist", Toast.LENGTH_SHORT).show(); } break; . . . } } private void stopAudioPlayback() { Intent i = new Intent("com.android.music.musicservicecommand"); i.putExtra("command", "pause"); sendBroadcast(i); } public void startRecording(int outputfileformat, String extension, Context context) { stop(); try { File sampleDir = new File(PersonRecordActivity.SAVE_PATH); File recordingFile = new File(sampleDir + java.io.File.separator + SAMPLE_PREFIX + sdf.format(new java.util.Date()) + extension); } catch (Exception e) { return; } mRecorder = new MediaRecorder(); // 呼叫setAudioSource 指定錄音來源為麥克風錄音 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 呼叫setOutputFormat設定錄音檔案的輸出格式 mRecorder.setOutputFormat(outputfileformat); // 呼叫MediaRecorder 的setAudioEncoder設定錄音的編碼方式 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 呼叫setOutputFile 設定錄音檔案的存放位置 mRecorder.setOutputFile(recordingFile.getAbsolutePath()); try { // 呼叫prepare 準備錄音 mRecorder.prepare(); // 呼叫start開始錄音 mRecorder.start(); } catch (IOException exception) { // 呼叫reset可以重複使用已經產生的MediaRecorder 物件,但必須回到setAudioSource重新設定 mRecorder.reset(); // 呼叫release 會立即釋放MediaRecorder 佔用的資源。之後如果想要再使用MediaRecorder 功能,必須重新建立MediaRecorder 物件實體而無法重複使用已經被釋放的MediaRecorder 物件 mRecorder.release(); mRecorder = null; return; } // 給定錄音起始時間為當前系統時間 recordingStart = System.currentTimeMillis(); setState(RECORDING_STATE); } private void setState(int state) { mState = state; }
沒有留言:
張貼留言