編輯:關於Android編程
MediaRecorder類詳解
手機一般都有麥克風和攝像頭,而Android系統就可以利用這些硬件來錄制音視頻了。
為了增加對錄制音視頻的支持,Android系統提供了一個MediaRecorder的類。該類的使用也非常簡單,下面讓我們來了解一下這個類:
java.lang.Object
?
android.media.MediaRecorder
用於錄制音頻和視頻的一個類。
vcmRlcl9zdGF0ZV9kaWFncmFt">
說明:
與MediaPlayer類非常相似MediaRecorder也有它自己的狀態圖。下面是關於MediaRecorder的各個狀態的介紹:
Initial:初始狀態,當使用new()方法創建一個MediaRecorder對象或者調用了reset()方法時,該MediaRecorder對象處於Initial狀態。在設定視頻源或者音頻源之後將轉換為Initialized狀態。另外,在除Released狀態外的其它狀態通過調用reset()方法都可以使MediaRecorder進入該狀態。
Initialized:已初始化狀態,可以通過在Initial狀態調用setAudioSource()或setVideoSource()方法進入該狀態。在這個狀態可以通過setOutputFormat()方法設置輸出格式,此時MediaRecorder轉換為DataSourceConfigured狀態。另外,通過reset()方法進入Initial狀態。
DataSourceConfigured:數據源配置狀態,這期間可以設定編碼方式、輸出文件、屏幕旋轉、預覽顯示等等。可以在Initialized狀態通過setOutputFormat()方法進入該狀態。另外,可以通過reset()方法回到Initial狀態,或者通過prepare()方法到達Prepared狀態。
Prepared:就緒狀態,在DataSourceConfigured狀態通過prepare()方法進入該狀態。在這個狀態可以通過start()進入錄制狀態。另外,可以通過reset()方法回到Initialized狀態。
Recording:錄制狀態,可以在Prepared狀態通過調用start()方法進入該狀態。另外,它可以通過stop()方法或reset()方法回到Initial狀態。
Released:釋放狀態(官方文檔給出的詞叫做Idle state 空閒狀態),可以通過在Initial狀態調用release()方法來進入這個狀態,這時將會釋放所有和MediaRecorder對象綁定的資源。
Error:錯誤狀態,當錯誤發生的時候進入這個狀態,它可以通過reset()方法進入Initial狀態。
提示:與MediaPlayer相似使用MediaRecorder錄音錄像時需要嚴格遵守狀態圖說明中的函數調用先後順序,在不同的狀態調用不同的函數,否則會出現異常。
下面一個實例描述了的創建過程:
MediaRecorder recorder=newMediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(PATH_NAME);
recorder.prepare();
recorder.start(); //
Recording is now started
...
recorder.stop();
recorder.reset(); //
You can reuse the object by going back to setAudioSource() step
recorder.release();//
Now the object cannot be reused
Public Constructors
MediaRecorder()
Default constructor.
Public Methods
final static int
getAudioSourceMax()
獲取音頻源的最大值。
int
getMaxAmplitude()
獲取在前一次調用此方法之後錄音中出現的最大振幅。
void
prepare()
准備錄制。
void
release()
釋放資源。
void
reset()
將MediaRecorder設為空閒狀態,即Initial狀態。
void
setAudioChannels(int numChannels)
設置錄制的音頻通道數。
void
setAudioEncoder(int audio_encoder)
設置所錄制的聲音的編碼格式。
void
setAudioEncodingBitRate(int bitRate)
設置所錄制的聲音的編碼位率。
void
setAudioSamplingRate(int samplingRate)
設置所錄制的聲音的采樣率。
void
setAudioSource(int audio_source)
設置聲音來源,一般傳入 MediaRecorder. AudioSource.MIC參數指定錄制來自麥克風的聲音。
void
setCamera(Camera c)
設置一個攝像頭用於錄制。
void
setCaptureRate(double fps)
設置視頻幀捕獲率。
void
setLocation(float latitude, float longitude)
設置並存儲在輸出文件中的地理數據(經度和緯度)。
void
setMaxDuration(int max_duration_ms)
設置錄制會話的最長持續時間(以ms為單位)。
void
setMaxFileSize(long max_filesize_bytes)
設置錄制文件的最大文件大小。
void
setOnErrorListener(MediaRecorder.OnErrorListener l)
注冊一個用於記錄錄制時出現的錯誤的監聽器。
void
setOnInfoListener(MediaRecorder.OnInfoListener listener)
注冊一個用於記錄錄制時出現的信息事件。
void
setOrientationHint(int degrees)
設置輸出的視頻播放的方向提示。
void
setOutputFile(FileDescriptor fd)
設置錄制的音頻文件的保存位置。
void
setOutputFile(String path)
設置錄制的音頻文件的保存位置。
void
setOutputFormat(int output_format)
設置所錄制的音視頻文件的格式。
void
setPreviewDisplay(Surface sv)
設置使用哪個SurfaceView來顯示視頻預覽。
void
setProfile(CamcorderProfile profile)
指定CamcorderProfile對象。
void
setVideoEncoder(int video_encoder)
設置所錄制視頻的編碼格式。
void
setVideoEncodingBitRate(int bitRate)
設置所錄制視頻的編碼位率。
void
setVideoFrameRate(int rate)
設置錄制視頻的捕獲幀速率。
void
setVideoSize(int width, int height)
設置要拍攝的寬度和視頻的高度。
void
setVideoSource(int video_source)
設置用於錄制的視頻來源。
void
start()
開始錄制。
void
stop()
停止錄制。
本文要講自己定義一個標題欄,能加事件。然後可以移值到不同的手機上,基本上不用改什麼,調用也很簡單在layout文件夾下,新建一個XML。名字叫做layout_title_
Android 自定義view實現動態進度條效果圖: 這個是看了梁肖的demo,根據他的思路自己寫了一個,但是我寫的這個貌似計算還是有些問題,從上面的圖就可以
demo效果增加數據: 刪除數據 修改數據 SQLite介紹SQLite,是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它包含在一個相對
在圖形界面之中,對話框也是人機交互的一種重要形式,程序可以通過對話框對用戶進行一些信息的提示,而用戶也可以通過對話框的和程序進行一些簡單的交互操作。 在Android的開