android Mediaplayer各種屬性和方法簡單介紹(copy自隨筆)

主要涉及類:MediaPlayer 
(1) 當一個MediaPlayer對象被創建或者調用reset()方法之後,它處於空閒狀態,調用release()方法後處於結束狀態 
1,一個MediaPlayer對象調用了reset()方法後,再調用其它方法可能會觸發OnErrorListener.onError()事件,未調用reset()方法則不會觸發 
2,當Mediaplayer對象不再被使用時,最好調用release()方法對其進行釋放,使其處於結束狀態,此時它不能被使用 
3,Mediaplayer對象被創建時(調用構造方法)處於空閒狀態,若使用create()方法創建後則處於準備狀態。 
(2) 一般情況下,一些常用的播放控制操作可能因爲音頻、視頻的格式不被支持或者質量較差以及流超時,也有可能由於開發者的疏忽使得Mediaplayer對象處於無效狀態等而導致錯誤。此時可通過註冊setOnErrorListener方法實現監控。如果發生了錯誤,Mediaplayer對象將處於多霧狀態,可以使用reset()方法來回復錯誤。 
(3) 任何Mediaplayer對象都必須先處於準備狀態,然後纔開始播放 
(4) 要開始播放Mediaplayer對象都必須成功調用start()方法,可通過isPlaying()方法來檢測是否正在播放 
(5) 當Mediaplayer對象在播放時,可以進行暫停和停止操作,pause()方法暫停播放,stop()方法停止播放。處於暫停暫停時可通過start()方法恢復播放,但是處於停止狀態時則必須先調用prepare()方法使其處於準備狀態,再調用start()方法。 
主要方法: 
Mediaplayer:構造方法 
create:        創建一個要播放的多媒體 
getCurrentPosition:得到當前播放位置 
getDuration:    得到文件的時間 
prepare:    準備(同步) 
prepareAsync:準備(異步) 
seekTo:        指定播放的位置(以毫秒爲單位) 
setAudioStreamType:    設置流媒體的類型 
setDataSource:    設置數據來源 
setDisplay:        設置用SurfaceHolder來顯示多媒體 
setOnBufferingUpdateListener:    網絡流媒體的緩衝監聽 
setOnErrorListener:            設置錯誤信息監聽 
setOnVideoSizeChangedListener:視頻尺寸監聽 
setScreenOnWhilePlaying:        設置是否使用SurfaceHolder來顯示 
setVolume:                    設置音量 
//獲取sd卡上的音頻文件 
setDataSource(“/sdcard/test.mp3”); 
//裝載資源中的音樂 
MediaPlayer.create(Activity01.this,R.raw.test); 
//目前存在問題,不能循環解析出音頻文件 
原因:.android_secure文件夾受保護,無法獲取裏面的文件信息 
播放視頻 
相關類:VideoView 
方法說明: 
getBufferPercentage:得到緩衝的百分比 
getCurrentPosition:得到當前播放位置 
getDuration:得到視頻文件的時間 
resolveAdjustedSize:調整視頻顯示大小 
setMediaController:設置播放控制器模式(播放進度條) 
setOnCompletionListener:當視頻文件播放完時觸發事件 
setVideoPath:設置視頻源路徑 
setVideoURI:設置視頻源地址 
錄音 
相關類:MediaRecorder 
方法說明: 
MediaRecorder:構造方法 
getMaxAmplitude:得到最大幅度 
setAudioEncoder:設置音頻編碼 
setAudioSource:設置音頻源 
setCamera:設置攝像機 
setMaxDuration:設置最長錄音時間 
setMaxFileSize:設置文件的最大尺寸 
setOutputFile:設置輸出文件 
setOutputFormat:設置輸出文件格式 
setPreviewDisplay:設置預覽 
setVideoEncoder:設置視頻編碼 
setVideoFrameRate:設置視頻幀的頻率 
setVideoSize:設置視頻的寬度和高度(分辨率) 
setVideoSource:設置視頻源 

File類下的方法: 
public static File createTempFile(String prefix, String suffix, File directory) 
Creates an empty temporary file in the given directory using the given prefix and suffix as part of the file name. 
系統會自動在prefix和suffix之間加上一些數字來構建完整的文件名 

實現錄音的一般步驟: 
1, 實例化MediaRecorder mr,調用構造方法 
2, 初始化mr:mr.setAudioSource(MIC)/setVideoSource(CAMERA) 
3, 配置DataSource:設置輸出文件格式/路徑,編碼器等 
4, 準備錄製:mr.prepare() 
5, 開始錄製:mr.start() 
6, 停止錄製:mr.stop() 
7, 釋放資源:mr.release() 
注:2,3不可調換順序 
添加許可: 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.RECORD_AUDIO"> 
相機設置 
相關類:Camera,它是專門用來連接和斷開相機服務的類 
Camera的幾個事件: 
Camera.AutoFocusCallback:    自動調焦功能 
Camera.ErrorCallback:        錯誤信息捕捉 
Camera.Parameters:        相機的屬性參數 
Camera.PictureCallback:    拍照、產生圖片時觸發 
Camera.PreviewCallback:    相機預覽設置 
Camera.ShutterCallback:    快門設置 
Camera.Size:                圖片的尺寸 
Camera類沒有構造方法,可通過open()方法來打開相機設備 
Camera類的方法介紹: 
autoFocus:        設置自動對焦 
getParameters:    得到相機參數 
open:            啓動相機服務 
release:            釋放相機服務 
setParameters:    設置參數 
setPreviewDisplay:設置預覽 
startPreview:    開始預覽 
stopPreview:        停止預覽 
takePicture:        拍照 
注:takePicture方法要實現3個回調函數作爲它的三個參數:Camera.ShutterCallback(快門),和兩個Camera.Picture.Callback(圖像數據)。 
需要許可 
<uses-permission android:name="android.permission.CAMERA" />    
若要將圖片存儲至sd卡中,則需要sd卡讀寫許可 

目前存在問題:只能拍照一次,不能重新回到預覽界面 

鬧鐘設置 
相關類:AlarmManager,它是專門用來設定在某個指定的時間去完成指定的事件。AlarmManager提供了訪問系統警報的服務,只要在程序中設置了警報服務,AlarmManager就會通過onReceive()方法去執行這些事件,就算系統處於待機狀態,同樣不會影響運行。可通過Context.getSystemService(ALARM_SERVICE)方法來獲得該服務。 
方法說明: 
cancel:    取消AlarmManager服務 
set:    設置AlarmManager服務 
setInexactRepeating:設置不精確週期 
setRepeating:設置精確週期 
setTimeZone:設置時區 
注:需創建一個BroadcastReceiver的子類,並覆蓋onReceive()方法 
鈴聲設置 
系統自帶的鈴聲都放在/system/medio/audio/文件夾中 
鈴音類型: TYPE_RINGTONE(來電鈴音),TYPE_ALARM,TYPE_NOTIFICATION 
相關類:RingtoneManager 
方法介紹: 
getActualDefaultRingtoneUri:取得指定類型的鈴聲 
getCursor:返回所有可用鈴聲的遊標 
getDefaultType:得到指定URI默認的鈴聲類型 
getRingtone 
getRingtonePosition:得到鈴聲位置 
getRingtoneUri 
getValidRingtoneUri:得到一個可用鈴聲的URI 
isDefault:得到指定的Uri是否爲默認的鈴聲 
setActualDefaultRingtoneUri:設置默認的鈴聲 

獲取的Cursor共有4列,列名依次爲:_id,title,”content://media/internal/audio/media”,title_key 

以設置手機鈴音爲例: 
if (isFolder(strRingtongFolder)) {//如果不存在該文件夾則創建一個 
                // 打開系統鈴聲設置 
                Intent intent = new Intent( 
                        RingtoneManager.ACTION_RINGTONE_PICKER); 
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI, true); 
                // 類型爲來電ringtong 
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, 
                        RingtoneManager.TYPE_RINGTONE); 
                // 設置顯示的題目 
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "設置來電的鈴聲"); 
                // 當設置完成之後返回到當前的activity 
                startActivityForResult(intent, RingtongButton); 
            } 

然後複寫onActivityResult(int requestCode, int resultCode, Intent data)方法,resultCode就是點擊設置dialog的按鈕編號,需要判斷是否點擊了確認按鈕 

if (resultCode != RESULT_OK) { 
            return; 
        } 
            try { 
                // 得到我們選擇的鈴聲 
                Uri pickedUri = data                        .getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
                // 將我們選擇的鈴聲選擇成默認 
                if (pickedUri != null) { 
                    RingtoneManager.setActualDefaultRingtoneUri( 
                            Media_RingTongActivity.this, 
                            RingtoneManager.TYPE_RINGTONE, pickedUri); 
                } 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章