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

来源:https://www.cnblogs.com/zn615/archive/2018/01/11/8267275.html
-Advertisement-
Play Games

主要涉及類:MediaPlayer(1) 當一個MediaPlayer對象被創建或者調用reset()方法之後,它處於空閑狀態,調用release()方法後處於結束狀態1,一個MediaPlayer對象調用了reset()方法後,再調用其它方法可能會觸發OnErrorListener.onError ...


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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 此處除掉標題欄,需要註意一點,AppCompactActivity是繼承自Activity。然而,AppCompactActivity據查看網上資料得知,其實它貌似沒有標題欄,上面顯示的標題欄是一個ActionBar控制項(PS:即標題欄部分是一個控制項,該控制項功能還比較強大),因此AppCompact ...
  • Android Activity,Service(含IntentService)的生命周期詳解 Android Activity,Service(含IntentService)的生命周期詳解 Actvity的生命周期流程圖: 以下是Activity生命周期的幾個過程: 1.啟動Activity:系統 ...
  • Android中startService的使用及Service生命周期 Android中startService的使用及Service生命周期 Android中有兩種主要方式使用Service,通過調用Context的startService方法或調用Context的bindService方法,本文 ...
  • 同步和非同步的概念區別: 同步,必須執行完成某個問題後才能繼續執行其他的。 非同步,我會去先執行其他問題,你執行完之後返回給我一個結果就可以。 android中為什麼要引用非同步任務呢 android啟動的,會啟動一個線程也稱為主線程,UI線程,但是我們不能把所有耗時的任務交給主線程來完成,這樣會影響用戶 ...
  • GsonFormat插件可以根據JSONObject格式的字元串,自動生成實體類參數。 要使用這個插件,首先要做的事下載它。方法如下: 方法一: 1.Android studio File->Settings..->Plugins–>Browse repositores..搜索GsonFormat  ...
  • 應用包下載地址: https://github.com/kingthy/TVRemoteIME/raw/master/released/IMEService-release.apk TVRemoteIME 電視盒子的遠程輸入法應用,可跨屏遠程輸入和跨屏遠程式控制制盒子 應用的誕生 自從家裡有電視盒子以來 ...
  • 使用之前,先簡單介紹一下這個SwipeRecyclerView,這是嚴大(嚴振傑)基於RecyclerView的進行修改和封裝的高級RecyclerView,其可以實現像QQ聊天界面的側滑刪除菜單,和一些高級的功能,我這裡也就不一一列舉出來了 想要瞭解更多的同學,請看這一篇,作者寫的http://b ...
  • 1. Block 1.1 什麼是Block 之前都是對block的簡單實用,這裡重新瞭解下。 代碼塊Block是蘋果在iOS4開始引入的對C語言的擴展,實現匿名函數的特性,Block是一種特殊的數據類型,其可以正常定義變數、作為參數、作為返回值,特殊的,block還可以保存一段代碼,在需要的時候調用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...