




已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)4 播放器,播放器,顯示SD卡中的所有歌曲 列表控件的每一項(xiàng)可以顯示一首歌曲的信息,如歌曲名稱、演唱者等 點(diǎn)擊一項(xiàng)后播放該歌曲,任務(wù)簡(jiǎn)介,Android控件-ListView Activity的生命周期 Activity之間的切換 Intent MediaPlayer 播放器的設(shè)計(jì),1 ListView,1-1 ListView,ListView通過(guò)縱向列表的樣式顯示一組內(nèi)容,內(nèi)容較多時(shí),可以拖動(dòng)開始滾動(dòng)條的移動(dòng)和內(nèi)容顯示。 ListView繼承自AdapterView,一般用于顯示存儲(chǔ)的數(shù)據(jù),這些數(shù)據(jù)可能來(lái)自數(shù)組或者數(shù)據(jù)庫(kù)。,ListView控件,數(shù)據(jù),Adapter,1-1 ListView,實(shí)現(xiàn)ListView有多種辦法 繼承ListActivity(教材的第30章) 添加ListView控件 簡(jiǎn)單的字符串列表 顯示SD卡的歌曲列表 自定義列表項(xiàng),1-2 字符串列表,通過(guò)ArrayAdapter來(lái)連接字符串?dāng)?shù)組與控件。,ListView控件,字符串,ArrayAdapter,創(chuàng)建ArrayAdapter 參數(shù)1:當(dāng)前的Context 參數(shù)2:Android自帶的列表控件項(xiàng)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);,實(shí)現(xiàn)列表項(xiàng)單擊的監(jiān)聽器,1-2 字符串列表,listView.setOnItemClickListener(new AdapterView.OnItemClickListener() public void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) /arg0:ListView控件 /arg1:被單擊的列表項(xiàng)的View(目前是TextView) /arg2:被單擊的列表項(xiàng)的位置 /arg3:暫不需要 );,1-3 顯示SD卡的歌曲列表,通過(guò)Cursor訪問(wèn)Android自帶的數(shù)據(jù)庫(kù),可以獲取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ù)庫(kù)名:MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,1-3 顯示SD卡的歌曲列表,/通過(guò)ContentResolver來(lái)訪問(wèn)Android媒體庫(kù),返回值為一個(gè)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自帶的列表項(xiàng)ID /參數(shù)3:數(shù)據(jù)表的列名 /參數(shù)4:列表項(xiàng)中控件的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 自定義列表項(xiàng),通過(guò)指定布局文件,可以自定義列表項(xiàng),ListView控件,SimpleCursorAdapter,字符串?dāng)?shù)據(jù),Cursor,1-4 自定義列表項(xiàng),R.layout.listitem,cursor,數(shù)據(jù)庫(kù)名:MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,1-4 自定義列表項(xiàng),/通過(guò)ContentResolver來(lái)訪問(wèn)Android媒體庫(kù),返回值為一個(gè)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ù)庫(kù)的列名 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ù)庫(kù)列名與控件ID對(duì)應(yīng)上 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listitem, cursor, cols, ids); /將Adapter綁定到列表控件上 listview.setAdapter(adapter);,擴(kuò)展練習(xí),將SD卡歌曲顯示到列表控件后,點(diǎn)擊列表項(xiàng),通過(guò)Toast能夠提示所選歌曲的名稱、路徑。,2 Activity生命周期,2-1 Activity,對(duì)開發(fā)者而言,Activity是Android應(yīng)用程序的入口。 在Activity類中定義了一系列的 生命周期方法,比如onCreate()、onResume()、onStart()、onPause()、onStop()和 onDestroy(),系統(tǒng)會(huì)在適當(dāng)?shù)臅r(shí)候調(diào)用對(duì)應(yīng)的生命周期方法。,2-2 Activity狀態(tài),運(yùn)行 當(dāng)Activity位于堆棧的頂部時(shí),它就處于運(yùn)行狀態(tài)(active)。 暫停 當(dāng)Activity失去了焦點(diǎn),但是依然可見(jiàn)時(shí) ,Activity就處于暫停狀態(tài)(paused),維持著成員信息和所有狀態(tài)。 停止 當(dāng)Activity完全被其他的Activity覆蓋時(shí),它就處于停止?fàn)顟B(tài)(stopped),處于停止?fàn)顟B(tài)的Activity依然維持著成員信息和所有狀態(tài),只是變得不可見(jiàn)了。 銷毀 當(dāng)Activity處于停止或者暫停狀態(tài)時(shí),系統(tǒng)可能要求它結(jié)束生命周期,或者直接把它所在的進(jìn)程殺死,進(jìn)而從內(nèi)存中刪除它,此時(shí)的Activity就被銷毀了。,2-3 Activity生命周期,通過(guò)程序來(lái)觀察Activity的 生命周期。,3 Activity間的調(diào)用,3-1 Activity,一個(gè)應(yīng)用程序可以存在多個(gè)Activity 一個(gè)Activity可以切換到另外一個(gè)Acitivity Activity切換時(shí),使用到Intent,3-2 創(chuàng)建新的Activity,步驟 新建Activity 新建布局 Activity綁定布局 注冊(cè)Activity 啟動(dòng)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 注冊(cè)Activity,在【 AndroidManifest.xml 】函數(shù)中添加新的Activity,Activity1中啟動(dòng)Activity2,3-2-5 啟動(dòng)Activity,startActivity(Intent)方法用于啟動(dòng)一個(gè)新的Activity,Activity1,Activity2,Intent,4 Intent,4-1 Intent,Intent是對(duì)執(zhí)行某項(xiàng)動(dòng)作的抽象封裝 用于啟動(dòng)Activity,startActivity(Intent) 廣播一個(gè)Intent給BroadcastReceiver 用于啟動(dòng)某個(gè)Service, startService(Intent) Intent是一個(gè)橋梁,將希望做的事情,封裝在其中,然后通過(guò)傳遞過(guò)去,系統(tǒng)就知道你想干什么了。,4-1 Intent,代碼,Intent,系統(tǒng)根據(jù)Intent的參數(shù)去做相應(yīng)的事情,啟動(dòng)Activity 廣播事件 啟動(dòng)Service,4-2 Intent,Intent有以下的屬性 Action : ACTION_VIEW, ACTION_EDIT, ACTION_MAIN Data : 封裝的數(shù)據(jù),以Uri格式表示 Category : 標(biāo)志動(dòng)作執(zhí)行的分類,例如CATEGORY_LAUNCHER Type : MIME Component : 標(biāo)明Intent指向的class Extras : 用于在Intent中攜帶一些數(shù)據(jù)信息,4-2 Intent,Action的含義 ACTION_DIAL 發(fā)起一個(gè)電話呼叫 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的形式。 可以通過(guò)Intent.setData()和Intent.setType()設(shè)置URI和MIME類型。,4-2 Intent,Category的含義 與Action類似,Category也是一段字符串常量。 Category描述的信息可以幫助系統(tǒng)確定處理Intent的組件。 調(diào)用Intent.addCategory()可以在Intent中增加一個(gè)Category。,4-2 Intent,Extras的含義 Extras包含了鍵-值數(shù)據(jù)對(duì),用于向目標(biāo)組件傳遞數(shù)據(jù)。 Intent中包含了一系列的putExtra()和getExtra()方法用于存儲(chǔ)和讀取相關(guān)的數(shù)據(jù)類型。,以打開一個(gè)網(wǎng)頁(yè)為例,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);,啟動(dòng)一個(gè)Activity為例 參數(shù)1:源Activity實(shí)例 參數(shù)2:?jiǎn)?dòng)的Activity類,4-3 Intent,Intent intent = new Intent(xxxActivity.this, DetailActivity.class); startActivity(intent);,啟動(dòng)一個(gè)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ū)動(dòng) 負(fù)責(zé)和硬件進(jìn)行交互數(shù)據(jù),包括Audio Driver, Camera Driver,Display Driver等等,與其他Linux版本的Driver類似。 多媒體Native層 通常稱之為OpenCORE,它是Android多媒體的核心,來(lái)源于PacketVideo公司。 多媒體框架層(MediaPlayer) 多媒體框架層Android中間層。向下通過(guò)JNI負(fù)責(zé)封裝OpenCore,向上負(fù)責(zé)為多媒體應(yīng)用程序提供Java接口。 多媒體應(yīng)用程序 音樂(lè)播放器, 照相機(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對(duì)象。 通過(guò)New操作符創(chuàng)建的對(duì)象處于idle狀態(tài)。 方法2:通過(guò)MediaPlayer的create方法創(chuàng)建對(duì)象, 此對(duì)象產(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()方法暫停播放.對(duì)象進(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對(duì)象進(jìn)入stopped狀態(tài)。,player.stop();,5-4-6 多媒體編程-銷毀,銷毀MediaPlayer,player.release();,5-4-7 多媒體編程-常用方法,getDuration()獲取媒體的播放總時(shí)長(zhǎng)。 isPlaying()判斷MediaPlayer是否在播放狀態(tài)。 getCurrentPosition()獲得目前播放的時(shí)間點(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目錄下。 通過(guò)MediaPlayer.create()方法創(chuàng)建MediaPlayer對(duì)象。,MediaPlayer player = MediaPlayer.create(this, R.raw.test); player.start();,5-5-2 多媒體編程-從文件系統(tǒng)播放,獲得MediaPlayer對(duì)象之后,需要依次調(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ò)文件時(shí),下載,播放等工作均有底層PVPlayer來(lái)完成,應(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)行播放,具體請(qǐng)參照前面的狀態(tài)圖。如果一首歌曲在播放時(shí),你想切換歌曲,請(qǐng)注意一定要先調(diào)用reset函數(shù)之后,才能再設(shè)定路徑然后播放。,player.reset(); player.setDataSource(strPath); player.prepare(); player.start();,6 播放器,6-1 設(shè)計(jì)界面布局,main.xml:主界面布局 包含一個(gè)列表控件 listitem.xml: 列表項(xiàng)的布局 包含一些控件,這些控件可以顯示歌曲的名稱 具體每一項(xiàng)需要顯示什么信息,請(qǐng)同學(xué)們自己考慮,但是一定要顯示歌曲的路徑,以備后續(xù)的點(diǎn)擊播放。,6-2 讀取SD卡上歌曲的信息,Android是通過(guò)底層的數(shù)據(jù)來(lái)記錄歌曲信息的,可以通過(guò)ContentResolver來(lái)讀取Android中關(guān)于歌曲的信息。,ContentResolver resolver = getContentResolver(); / 從Content Provider中獲得SD卡上的音樂(lè)列表 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ù)庫(kù)信息綁定到ListView,R.layout.listitem布局的trackname,artist,path控件綁定到數(shù)據(jù)庫(kù)(cursor)中的以下三列數(shù)據(jù)。,R.layout.listitem,cursor,6-3 將數(shù)據(jù)庫(kù)信息綁定到ListV
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電工(初級(jí))職業(yè)技能鑒定實(shí)操試卷:電氣設(shè)備故障診斷與處理綜合實(shí)操試題
- 農(nóng)村生態(tài)旅游開發(fā)與經(jīng)營(yíng)管理協(xié)議
- 2025年電梯檢驗(yàn)員資格考試試卷:電梯檢驗(yàn)員電梯檢驗(yàn)實(shí)踐操作試題
- 2025年電工特種作業(yè)操作證考試試卷:電力系統(tǒng)故障預(yù)警與分析試題
- 2025年美甲師(初級(jí))考試試卷:美甲行業(yè)消費(fèi)市場(chǎng)分析
- 物流運(yùn)輸行業(yè)運(yùn)營(yíng)軌跡證明書(8篇)
- 2025年保險(xiǎn)從業(yè)資格考試保險(xiǎn)業(yè)務(wù)法律法規(guī)案例分析試題科目試卷
- 高中生古詩(shī)詞教學(xué):詩(shī)經(jīng)名篇導(dǎo)讀
- 2025年場(chǎng)(廠)內(nèi)專用機(jī)動(dòng)車輛作業(yè)特種作業(yè)操作證考試試卷(應(yīng)急處理)案例分析
- 人員勞務(wù)派遣與服務(wù)協(xié)議
- 出租車 專業(yè)部分考核試題 城市客運(yùn)企業(yè)主要負(fù)責(zé)人和安全生產(chǎn)管理人員安全考核基礎(chǔ)題庫(kù)
- GB/T 9634.3-2002鐵氧體磁心表面缺陷極限導(dǎo)則第3部分:ETD和E形磁心
- GB/T 8478-2008鋁合金門窗
- 人教版七年級(jí)下冊(cè)數(shù)學(xué)《期末檢測(cè)試卷》
- 防腐除銹檢驗(yàn)記錄
- 公司金融課件(完整版)
- 三維激光掃描技術(shù)與應(yīng)用實(shí)例-PPT課件
- 鐵路貨物裝載常用計(jì)算公式
- 14S501-1 球墨鑄鐵單層井蓋及踏步施工
- (新知杯)2017-2011上海市初中數(shù)學(xué)競(jìng)賽試卷
- 職業(yè)緊張壓力量表OSI
評(píng)論
0/150
提交評(píng)論