天天看點

android Mediaplayer各種屬性和方法簡單介紹

主要涉及類: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();