14天學會安卓開發(第十三天)Android多媒體開發
【原文:http://blog.csdn.net/corder_raine/article/details/8317454】
目錄
第十三天.Android多媒體開發
13.1 播放音樂
13.1.1 多媒體架構
Ø 基於第三方Packet Video公司的Open Core platform實現
Ø 支援幾乎所有通用的音訊、視訊、靜態影象格式,包括:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。
Ø 通過Open Core程式設計師可以方便快速的開發出想要的多媒體應用程式,例如:音視訊的採集,回放,視訊會議,實時的流媒體播放等應用。
Ø Android提供了MediaPlayer和MediaRecorder等上層的Media API給開發人員使用。
Ø Open Core的程式碼在Android程式碼的External/Opencore目錄中。
13.1.2 Open Core框架
13.1.4 音樂播放
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
MediaPlayer
mediaPlayer = newMediaPlayer(); if (mediaPlayer.isPlaying())
{ mediaPlayer.reset(); //重置為初始狀態 } mediaPlayer.setDataSource( "/sdcard/good.mp3" ); mediaPlayer.prepare(); //緩衝 mediaPlayer.start(); //開始或恢復播放 mediaPlayer.pause(); //暫停播放 mediaPlayer.start(); //恢復播放 mediaPlayer.stop(); //停止播放 mediaPlayer.release(); //釋放資源 mediaPlayer.setOnCompletionListener(newMediaPlayer.OnCompletionListener()
{ public void
onCompletion(MediaPlayer arg0) { //播放完畢呼叫 mediaPlayer.release(); }
}); mediaPlayer.setOnErrorListener(newMediaPlayer.OnErrorListener()
{ //
錯誤處理事件 public boolean
onError(MediaPlayer player, int arg1,
int arg2)
{ mediaPlayer.release(); returnfalse; }
}); |
13.2 播放視訊
13.2.1 播放視訊
01
02
03
04
05
06
07
08
09
10
11
|
/*
建立VideoView物件 */ final
VideoView videoView = (VideoView)findViewById(R.id.VideoView01); /*設定視訊路徑*/ videoView.setVideoPath("/sdcard/test.mp4"); /*
設定模式-播放進度條 */ videoView.setMediaController(new
MediaController(Activity01.this)); videoView.requestFocus(); /*
開始播放 */ videoView.start(); /*
暫停 */ videoView.pause(); |
13.2.2 音樂/視訊播放案例
Ø 音樂播放案例
u MediaPlayerDemo
u 視訊播放案例
u VideoViewDemo
13.3 錄製音訊
13.3.1 實現錄音功能
第一步:在功能清單檔案AndroidManifest.xml中新增錄音與寫sdcard許可權:
1
2
|
< uses-permission android:name = "android.permission.RECORD_AUDIO" /> < uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" /> |
第二步:編寫音訊燒錄程式碼:
01
02
03
04
05
06
07
08
09
10
11
|
MediaRecorder
recorder = newMediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //從麥克風採集聲音 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //內容輸出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //音訊編碼方式 recorder.setOutputFile( "/sdcard/lxt008.amr" ); recorder.prepare(); //預期準備 recorder.start(); //開始燒錄 ... recorder.stop(); //停止燒錄 recorder.reset(); //重設 recorder.release(); //燒錄完成一定要釋放資源 |
13.3.2 音視訊採集
第一步:在功能清單檔案AndroidManifest.xml中新增照相機許可權:
1
2
|
< uses-permission android:name = "android.permission.RECORD_AUDIO" /> < uses-permission android:name = "android.permission.CAMERA" /> |
第二步:編寫拍照程式碼:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
WindowManager
wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); //獲取視窗服務 Display
display =wm.getDefaultDisplay(); //獲取螢幕資訊 recorder
= new MediaRecorder(); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //從照相機採集視訊 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setVideoSize(display.getWidth(),display.getHeight()); //大小為螢幕的寬和高 recorder.setVideoFrameRate( 3 ); //每秒3幀 recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); //設定視訊編碼方式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile( "/sdcard/lxt008.3gp" ); recorder.prepare(); //預期準備 recorder.start(); //開始燒錄 ... recorder.stop(); //停止燒錄 recorder.reset(); //重設 recorder.release(); //燒錄完成一定要釋放資源 |
13.4 拍攝照片
13.4.1 錄音/拍照案例
Ø錄音案例
uRecordAudioDemo
u
Ø拍照案例
uCameraDemo
13.5 鈴聲設定
13.5.1 鈴聲設定:設定各種鈴聲
01
02
03
04
05
06
07
08
09
10
11
|
//開啟系統鈴聲設定 Intent
intent = newIntent(RingtoneManager.ACTION_RINGTONE_PICKER); //設定鈴聲型別和title intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_RINGTONE); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE,“設定來電鈴聲"); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_ALARM); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "設定鬧鈴鈴聲" ); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "設定通知鈴聲" ); //當設定完成之後返回到當前的Activity startActivityForResult(intent,ButtonAlarm); |
13.5.2 鈴聲設定:回撥函式
1
2
3
4
5
6
7
8
9
|
/*
當設定鈴聲之後的回撥函式 */ protected void
onActivityResult(intrequestCode, int resultCode,
Intent data){ //得到我們選擇的鈴聲 Uri
pickedUri =data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); //將我們選擇的鈴聲設定成為預設 RingtoneManager.setActualDefaultRingtoneUri(Activity01. this ,RingtoneManager.TYPE_RINGTONE,
pickedUri); Uri
pickedUri =RingtoneManager.setActualDefaultRingtoneUri(Activity01. this ,RingtoneManager.TYPE_ALARM,
pickedUri); RingtoneManager.setActualDefaultRingtoneUri(Activity01. this ,RingtoneManager.TYPE_NOTIFICATION,
pickedUri); } |
13.5.3 鈴聲設定:main.xml
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
< LinearLayout android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" >
< TextView android:id = "@+id/TextView01" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "選擇下面按鈕來設定鈴聲" /> < Button android:id = "@+id/ButtonRingtone" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "設定來電鈴聲" /> < Button android:id = "@+id/ButtonAlarm" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "設定鬧鐘鈴聲" /> < Button android:id = "@+id/ButtonNotification" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "設定通知鈴聲" /> </ LinearLayout > |
13.5.4 鈴聲設定:AndroidManifest.xml
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
< manifest xmlns:android = "http://schemas.android.com/apk/res/android" [/align] package = "com.yarin.android.Examples_07_08" android:versionCode = "1" android:versionName = "1.0" > < application android:icon = "@drawable/icon" android:label = "@string/app_name" > < activity android:name = ".Activity01" android:label = "@string/app_name" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > </ application > < uses-permission android:name = "android.permission.INTERNET" /> < uses-permission android:name = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> < uses-sdk android:minSdkVersion = "7" /> </ manifest > |
相關文章
- 14天學會安卓開發(第六天)Android Service安卓Android
- 14天學會安卓開發(第十天)Android網路與通訊安卓Android
- 14天學會安卓開發(第十二天)Android動畫技術安卓Android動畫
- 14天學會安卓開發(第一天)Android架構與環境搭建安卓Android架構
- 14天學會安卓開發(第十一天)Android圖形技術安卓Android
- 14天學會安卓開發(第四天)基礎UI控制元件安卓UI控制元件
- 14天學會安卓開發(第二天)Android程式設計基礎activity和intent安卓Android程式設計Intent
- 14天學會安卓開發(第五天)高階UI控制元件安卓UI控制元件
- 14天學會安卓開發(第八天)SQLite資料庫技術安卓SQLite資料庫
- 14天學會安卓開發(第九天)ContentProvider與BroadcastReceiver安卓IDEAST
- 14天學會安卓開發(第十四天)Android專案案例: mp3播放器安卓Android播放器
- 14天學會安卓開發(第三天)UI事件處理與佈局管理安卓UI事件
- 14天學會安卓開發(第七天)資料儲存之SharedPreferences與檔案安卓
- 安卓開發日記14安卓
- Android多媒體應用開發-控制攝像頭拍照Android
- Wireshark在多媒體開發中的使用
- 遊戲開發第6天遊戲開發
- 【七牛雲招聘】Android 多媒體 SDK 開發工程師 /Android OpenGL 開發工程師/iOS SDK 開發工程師Android工程師iOS
- 5.14安卓開發日記35安卓
- 齊聚上海,get多媒體開發新技能
- [開發教程]第14講:Bootstrap表格boot
- 【音視訊安卓開發 (十一)】Android初級開發(一)安卓Android
- 流媒體開發 -- C#C#
- 安卓(Android)開發基礎知識安卓Android
- 《HTML5多媒體應用開發》——1.4 小結HTML
- Spring第9天Aop簡介,Aopxml開發,Aop註解開發SpringXML
- 《HTML5多媒體應用開發》——1.2 HTML5的發展HTML
- Android開發學習之路--React-Native混合開發初體驗AndroidReact
- 安卓開發框架系列開篇安卓框架
- 紙上淺談-2019 多媒體開發學習之路 | 掘金年度徵文
- Windows Phone 7 開發 31 日談——第14日:墓碑機制(多工)Windows
- 打造你的泛娛樂多媒體應用開發核心能力
- 遊戲開發雜記(三) 開發及學習過程中的體會遊戲開發
- 開發軟體有多貴
- .NET MAUI 安卓應用開發初體驗UI安卓
- 安卓開發入門(一)開發環境搭建安卓開發環境
- 【精華】安卓開發學習路線規劃安卓
- 安卓開發學習-Intent攜帶資料安卓Intent