android簡易播放器設(shè)計.ppt_第1頁
android簡易播放器設(shè)計.ppt_第2頁
android簡易播放器設(shè)計.ppt_第3頁
android簡易播放器設(shè)計.ppt_第4頁
android簡易播放器設(shè)計.ppt_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

任務(wù)4 播放器,播放器,顯示SD卡中的所有歌曲 列表控件的每一項可以顯示一首歌曲的信息,如歌曲名稱、演唱者等 點(diǎn)擊一項后播放該歌曲,任務(wù)簡介,Android控件-ListView Activity的生命周期 Activity之間的切換 Intent MediaPlayer 播放器的設(shè)計,1 ListView,1-1 ListView,ListView通過縱向列表的樣式顯示一組內(nèi)容,內(nèi)容較多時,可以拖動開始滾動條的移動和內(nèi)容顯示。 ListView繼承自AdapterView,一般用于顯示存儲的數(shù)據(jù),這些數(shù)據(jù)可能來自數(shù)組或者數(shù)據(jù)庫。,ListView控件,數(shù)據(jù),Adapter,1-1 ListView,實現(xiàn)ListView有多種辦法 繼承ListActivity(教材的第30章) 添加ListView控件 簡單的字符串列表 顯示SD卡的歌曲列表 自定義列表項,1-2 字符串列表,通過ArrayAdapter來連接字符串?dāng)?shù)組與控件。,ListView控件,字符串,ArrayAdapter,創(chuàng)建ArrayAdapter 參數(shù)1:當(dāng)前的Context 參數(shù)2:Android自帶的列表控件項ID 參數(shù)3:字符串?dāng)?shù)組,1-2 字符串列表,/獲取ListView控件的變量 ListView listView = (ListView)findViewById(R.id.ListView01); /創(chuàng)建ArrayAdapter ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1,str); /將ArrayAdapter綁定到listview控件上 listView.setAdapter(adapter);,實現(xiàn)列表項單擊的監(jiān)聽器,1-2 字符串列表,listView.setOnItemClickListener(new AdapterView.OnItemClickListener() public void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) /arg0:ListView控件 /arg1:被單擊的列表項的View(目前是TextView) /arg2:被單擊的列表項的位置 /arg3:暫不需要 );,1-3 顯示SD卡的歌曲列表,通過Cursor訪問Android自帶的數(shù)據(jù)庫,可以獲取SD卡的歌曲列表,然后同SimpleCursorAdapter進(jìn)行綁定。,ListView控件,SimpleCursorAdapter,字符串?dāng)?shù)據(jù),Cursor,1-3 顯示SD卡的歌曲列表,android.R.layout.simple_expandable_list_item_1,cursor,數(shù)據(jù)庫名:MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,1-3 顯示SD卡的歌曲列表,/通過ContentResolver來訪問Android媒體庫,返回值為一個Cursor Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); /開始控制該Cursor startManagingCursor(cursor);,1-3 顯示SD卡的歌曲列表,/ SimpleCursorAdapter創(chuàng)建 /參數(shù)1:當(dāng)前的Context /參數(shù)2:Android自帶的列表項ID /參數(shù)3:數(shù)據(jù)表的列名 /參數(shù)4:列表項中控件的ID ListAdapter listAdapter = new SimpleCursorAdapter( this, android.R.layout.simple_expandable_list_item_1, cursor,new StringMediaStore.EXTRA_MEDIA_TITLE,new intandroid.R.id.text1); /將Adapter與ListView綁定 listView.setAdapter(listAdapter);,1-4 自定義列表項,通過指定布局文件,可以自定義列表項,ListView控件,SimpleCursorAdapter,字符串?dāng)?shù)據(jù),Cursor,1-4 自定義列表項,R.layout.listitem,cursor,數(shù)據(jù)庫名:MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,1-4 自定義列表項,/通過ContentResolver來訪問Android媒體庫,返回值為一個Cursor Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); /開始控制該Cursor startManagingCursor(cursor);,1-3 顯示SD卡的歌曲列表,/數(shù)據(jù)庫的列名 String cols = new String MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.DATA ; /控件的ID int ids = new intR.id.trackname, R.id.artist, R.id.path; /創(chuàng)建adapter將數(shù)據(jù)庫列名與控件ID對應(yīng)上 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listitem, cursor, cols, ids); /將Adapter綁定到列表控件上 listview.setAdapter(adapter);,擴(kuò)展練習(xí),將SD卡歌曲顯示到列表控件后,點(diǎn)擊列表項,通過Toast能夠提示所選歌曲的名稱、路徑。,2 Activity生命周期,2-1 Activity,對開發(fā)者而言,Activity是Android應(yīng)用程序的入口。 在Activity類中定義了一系列的 生命周期方法,比如onCreate()、onResume()、onStart()、onPause()、onStop()和 onDestroy(),系統(tǒng)會在適當(dāng)?shù)臅r候調(diào)用對應(yīng)的生命周期方法。,2-2 Activity狀態(tài),運(yùn)行 當(dāng)Activity位于堆棧的頂部時,它就處于運(yùn)行狀態(tài)(active)。 暫停 當(dāng)Activity失去了焦點(diǎn),但是依然可見時 ,Activity就處于暫停狀態(tài)(paused),維持著成員信息和所有狀態(tài)。 停止 當(dāng)Activity完全被其他的Activity覆蓋時,它就處于停止?fàn)顟B(tài)(stopped),處于停止?fàn)顟B(tài)的Activity依然維持著成員信息和所有狀態(tài),只是變得不可見了。 銷毀 當(dāng)Activity處于停止或者暫停狀態(tài)時,系統(tǒng)可能要求它結(jié)束生命周期,或者直接把它所在的進(jìn)程殺死,進(jìn)而從內(nèi)存中刪除它,此時的Activity就被銷毀了。,2-3 Activity生命周期,通過程序來觀察Activity的 生命周期。,3 Activity間的調(diào)用,3-1 Activity,一個應(yīng)用程序可以存在多個Activity 一個Activity可以切換到另外一個Acitivity Activity切換時,使用到Intent,3-2 創(chuàng)建新的Activity,步驟 新建Activity 新建布局 Activity綁定布局 注冊Activity 啟動Activity,3-2-1 新建Activity,在包上點(diǎn)擊右鍵,【New】-【Class】 填寫類名和父類,3-2-2 新建布局,在reslayout目錄,點(diǎn)擊右鍵,【New】-【Other.】-【Android XML File】,public class NewActivity extends Activity Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.newlayout); ,3-2-3 綁定布局,在代碼的onCreate函數(shù)中,加入setContentView,3-2-4 注冊Activity,在【 AndroidManifest.xml 】函數(shù)中添加新的Activity,Activity1中啟動Activity2,3-2-5 啟動Activity,startActivity(Intent)方法用于啟動一個新的Activity,Activity1,Activity2,Intent,4 Intent,4-1 Intent,Intent是對執(zhí)行某項動作的抽象封裝 用于啟動Activity,startActivity(Intent) 廣播一個Intent給BroadcastReceiver 用于啟動某個Service, startService(Intent) Intent是一個橋梁,將希望做的事情,封裝在其中,然后通過傳遞過去,系統(tǒng)就知道你想干什么了。,4-1 Intent,代碼,Intent,系統(tǒng)根據(jù)Intent的參數(shù)去做相應(yīng)的事情,啟動Activity 廣播事件 啟動Service,4-2 Intent,Intent有以下的屬性 Action : ACTION_VIEW, ACTION_EDIT, ACTION_MAIN Data : 封裝的數(shù)據(jù),以Uri格式表示 Category : 標(biāo)志動作執(zhí)行的分類,例如CATEGORY_LAUNCHER Type : MIME Component : 標(biāo)明Intent指向的class Extras : 用于在Intent中攜帶一些數(shù)據(jù)信息,4-2 Intent,Action的含義 ACTION_DIAL 發(fā)起一個電話呼叫 ACTION_BATTERY_LOW 電池電量低 ACTION_SCREEN_ON 手機(jī)屏幕打開,4-2 Intent,Data的含義 Data是以URI代表的數(shù)據(jù)和MIME代表的數(shù)據(jù)類型的集合。 Data通常根據(jù)Action的不同而不同,例如ACTION_CALL意味著Data是tel:URI的形式。 可以通過Intent.setData()和Intent.setType()設(shè)置URI和MIME類型。,4-2 Intent,Category的含義 與Action類似,Category也是一段字符串常量。 Category描述的信息可以幫助系統(tǒng)確定處理Intent的組件。 調(diào)用Intent.addCategory()可以在Intent中增加一個Category。,4-2 Intent,Extras的含義 Extras包含了鍵-值數(shù)據(jù)對,用于向目標(biāo)組件傳遞數(shù)據(jù)。 Intent中包含了一系列的putExtra()和getExtra()方法用于存儲和讀取相關(guān)的數(shù)據(jù)類型。,以打開一個網(wǎng)頁為例,4-3 Intent,Uri uri = Uri.parse(“”); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);,電話功能調(diào)用,4-3 Intent,Uri uri = Uri.parse(“tel:2125551212 “); Intent it = new Intent(Intent.ACTION_DIAL, uri); context.startActivity(it);,啟動一個Activity為例 參數(shù)1:源Activity實例 參數(shù)2:啟動的Activity類,4-3 Intent,Intent intent = new Intent(xxxActivity.this, DetailActivity.class); startActivity(intent);,啟動一個Activity,并傳遞參數(shù),4-3 Intent,Intent intent = new Intent(this, DetailActivity.class); intent.putExtra(“name“, peoplesposition); startActivity(intent);,protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); /獲得Intent并從中讀取附帶的數(shù)據(jù) Intent intent = getIntent(); String name = intent.getStringExtra(“name“); TextView view = new TextView(this); view.setText(“您選擇了“+name); setContentView(view); ,5 多媒體,5-1 多媒體架構(gòu),多媒體驅(qū)動 負(fù)責(zé)和硬件進(jìn)行交互數(shù)據(jù),包括Audio Driver, Camera Driver,Display Driver等等,與其他Linux版本的Driver類似。 多媒體Native層 通常稱之為OpenCORE,它是Android多媒體的核心,來源于PacketVideo公司。 多媒體框架層(MediaPlayer) 多媒體框架層Android中間層。向下通過JNI負(fù)責(zé)封裝OpenCore,向上負(fù)責(zé)為多媒體應(yīng)用程序提供Java接口。 多媒體應(yīng)用程序 音樂播放器, 照相機(jī)等應(yīng)用程序。,5-1 多媒體架構(gòu),5-2 多媒體格式,5-2 多媒體架構(gòu),5-3 MediaPlayer狀態(tài)圖,Idle Initialized Preparing Prepared Started Paused Stopped PlaybackCompleted End Error,5-4-1 多媒體編程-創(chuàng)建,方法1:使用New操作符創(chuàng)建MediaPlayer對象。 通過New操作符創(chuàng)建的對象處于idle狀態(tài)。 方法2:通過MediaPlayer的create方法創(chuàng)建對象, 此對象產(chǎn)生后處于Prepared狀態(tài)。,MediaPlayer player = new MediaPlayer();,MediaPlayer player = MediaPlayer.create(this, R.raw.test);,5-4-2 多媒體編程-設(shè)置音頻數(shù)據(jù),調(diào)用setDataSource()方法,設(shè)置音視頻數(shù)據(jù)源。MediaPlayer進(jìn)入Initialized狀態(tài)。,MediaPlayer player = new MediaPlayer(); player.setDataSource(Audio_PATH);,5-4-3 多媒體編程-播放前準(zhǔn)備,調(diào)用prepare()或者prepareAsync()方法,進(jìn)行播放準(zhǔn)備。MediaPlayer進(jìn)入Prepared 狀態(tài)。,MediaPlayer player = new MediaPlayer(); player.setDataSource(Audio_PATH); player.prepare();,5-4-4 多媒體編程-播放暫停,調(diào)用start()方法開始播放,MediaPlayer進(jìn)入Started狀態(tài)。 調(diào)用pause()方法暫停播放.對象進(jìn)入Paused狀態(tài)。,MediaPlayer player = new MediaPlayer(); player.setDataSource(Audio_PATH); player.prepare(); player.start();,player.pause();,5-4-4 多媒體編程-播放暫停,定位播放 調(diào)用seekTo(int msec)方法可以調(diào)整MediaPlayer的播放位置。 參數(shù)msec的單位是毫秒。,player.seekTo(POSITION);,5-4-5 多媒體編程-停止,調(diào)用stop()方法停止播放。MediaPlayer對象進(jìn)入stopped狀態(tài)。,player.stop();,5-4-6 多媒體編程-銷毀,銷毀MediaPlayer,player.release();,5-4-7 多媒體編程-常用方法,getDuration()獲取媒體的播放總時長。 isPlaying()判斷MediaPlayer是否在播放狀態(tài)。 getCurrentPosition()獲得目前播放的時間點(diǎn)。 setAudioStreamType(int streamtype)設(shè)置音量屬性,音量分為多媒體音量和鈴聲音量等。 setVolume(float leftVolume, float rightVolume)設(shè)置音量大小。,5-5 多媒體播放,MediaPlayer可以從三種不同的位置播放。 從資源文件播放。 從文件系統(tǒng)播放。 從網(wǎng)絡(luò)上播放。,5-5-1 多媒體編程-從資源文件播放,多媒體文件可以放在資源文件夾/res/raw目錄下。 通過MediaPlayer.create()方法創(chuàng)建MediaPlayer對象。,MediaPlayer player = MediaPlayer.create(this, R.raw.test); player.start();,5-5-2 多媒體編程-從文件系統(tǒng)播放,獲得MediaPlayer對象之后,需要依次調(diào)用setDataSource()和prepare()方法,以便設(shè)置數(shù)據(jù)源,讓播放器完成準(zhǔn)備工作。 。,try MediaPlayer player = new MediaPlayer(); player.setDataSource(“/sdcard/a.mp3“); player.prepare(); player.start(); catch (Exception e) e.printStackTrace(); ,5-5-3 多媒體編程-從網(wǎng)絡(luò)上播放,在播放網(wǎng)絡(luò)文件時,下載,播放等工作均有底層PVPlayer來完成,應(yīng)用層開發(fā)者只需要設(shè)置網(wǎng)絡(luò)文件的數(shù)據(jù)源即可。,String path = “http:/website/path/file.mp3“; try MediaPlayer player = new MediaPlayer(); player.setDataSource(path); player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() public void onPrepared(MediaPlayer mp) mp.start(); ); player.prepareAsync(); catch (Exception e) e.printStackTrace(); ,5-6 注意,MediaPlay是有狀態(tài)的,不是任何狀態(tài)下都可以進(jìn)行播放,具體請參照前面的狀態(tài)圖。如果一首歌曲在播放時,你想切換歌曲,請注意一定要先調(diào)用reset函數(shù)之后,才能再設(shè)定路徑然后播放。,player.reset(); player.setDataSource(strPath); player.prepare(); player.start();,6 播放器,6-1 設(shè)計界面布局,main.xml:主界面布局 包含一個列表控件 listitem.xml: 列表項的布局 包含一些控件,這些控件可以顯示歌曲的名稱 具體每一項需要顯示什么信息,請同學(xué)們自己考慮,但是一定要顯示歌曲的路徑,以備后續(xù)的點(diǎn)擊播放。,6-2 讀取SD卡上歌曲的信息,Android是通過底層的數(shù)據(jù)來記錄歌曲信息的,可以通過ContentResolver來讀取Android中關(guān)于歌曲的信息。,ContentResolver resolver = getContentResolver(); / 從Content Provider中獲得SD卡上的音樂列表 Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); /控制Cursor startManagingCursor(cursor);,6-3 將數(shù)據(jù)庫信息綁定到ListView,R.layout.listitem布局的trackname,artist,path控件綁定到數(shù)據(jù)庫(cursor)中的以下三列數(shù)據(jù)。,R.layout.listitem,cursor,6-3 將數(shù)據(jù)庫信息綁定到ListV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論