邵國強 劉春 張百順 李宏博 張麗華
摘 要:文章論述了“移動編程基礎”課程的面臨的主要問題,介紹了原型法的基本思想。以音樂播放器為例,展示了原型法在教學中的應用。以MediaPlayer對象為核心,結合文件訪問、ListView控件、List列表、數據庫訪問和服務等知識,完成了一個功能比較完善的手機軟件。該方法適合初學者,對類似的其他課程教學有一定的借鑒價值。
關鍵詞:原型法;音樂播放器;數據庫訪問;服務
隨著3G和4G移動網絡技術走進千家萬戶,手機用戶的快速發展,移動終端的市場需求占據了主導地位。目前主流的手機操作系統有:Android(谷歌)、iOS(蘋果)、Windows phone(微軟)、Symbian(諾基亞)、BlackBerry OS(黑莓)、Web OS、Windows mobile(微軟)等。Android是一種以Linux為基礎的開放源代碼操作系統,以其開放、方便、快捷、實用、穩定、安全而受到廣大用戶和廠商的信賴和支持。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一[1]。因此,Android軟件開發人員缺口也大幅攀升,如何培養合格的Android軟件行業從業者成為高校計算機專業的一項重要課題。怎樣快速教授學生Android的基礎知識點,又能激發學生興趣,引導學生自主學習,將所學知識融會貫通綜合運用,是“移動編程基礎”課程教師亟待解決的問題[2]。
1 原型法
軟件開發的規范是分層模式。但是對于初學者,恰恰需要扁平式開發,將層次打開,首先構造一個原型,即從最基本的最核心功能開始,逐步展開和完善,最后擴展成一個功能完備的成型軟件[3]。通過開門見山的方式,每一步看到一個效果,并且看到軟件演變的過程。在功能驅動的方式下,掌握特定類的方法的使用,以及如何將所學綜合運用。
2 應用案例
以音樂播放器為例,介紹如何運用原型法進行“移動編程基礎”課程教學。
核心是MediaPlayer對象,音樂的播放、暫停、重置、停止都是通過其實現[4]。另外,結合文件訪問獲取音樂文件的名字,通過ListView顯示文件列表,點擊播放選中音樂,再升級為用Service播放音樂。
(1)準備工作,訪問sdcard權限添加。
(2)準備工作,類成員變量定義:
ImageButton LXT_IB_Last = null; //上一首歌曲按鈕
ImageButton LXT_IB_Stop = null; //音樂停止按鈕
ImageButton LXT_IB_Start = null; //開始播放按鈕
ImageButton LXT_IB_Pause = null; //音樂暫停按鈕
ImageButton LXT_IB_Next = null; //下一首歌曲按鈕
MediaPlayer lxt_MediaPlayer = null; /* 創建MediaPlayer對象 */
List
int lxt_current_position = 0; /* 設置當前播放歌曲的索引為0 */
String LXT_MUSIC_PATH = “/mnt/sdcard/”; /* 默認音樂路徑為SD卡 */
(3)MediaPlayer對象的創建。
MediaPlayer lxt_MediaPlayer = new MediaPlayer();
(4)音樂的播放。
lxt_MediaPlayer.setDataSource(musicpath);
lxt_MediaPlayer.prepare();
lxt_MediaPlayer.start();
(5)音樂的暫停。
lxt_MediaPlayer.pause();
(6)音樂的停止。
lxt_MediaPlayer.stop();
(7)音樂列表的創建。
/* 定義音樂名字列表 */
List
/* 遍歷SD卡,添加音樂名字到列表 */
public void lxt_musicList()
{
//將LXT_MUSIC_PATH目錄下的音樂文件添加到播放列表
File l_root = new File(LXT_MUSIC_PATH);
if (l_root.listFiles(new Lxt_MusicFilter()).length > 0)
{
for (File lxt_file : l_root.listFiles(new Lxt_MusicFilter()))
{
if(lxt_file.getName().endsWith(“.mp3”))
lxt_MusicList .add(lxt_file.getName());
}
ArrayAdapter
setListAdapter(lxt_adapter);
}
}
/* 過濾文件類型 */
class Lxt_MusicFilter implements FilenameFilter
{
public boolean accept(File dir, String lxt_musicname)
{
//這里只過濾出.mp3音樂文件
return (lxt_musicname.endsWith(“.mp3”));
}
}
(8)列表項目選擇。
@Override
/* 當我們點擊列表時,播放被點擊的音樂 */
protected void onListItemClick(ListView l, View v, int position, long id)
{
lxt_current_position = position;
lxt_playMusic(“/mnt/sdcard/” + lxt_MusicList .get(position));
}
(9)上一首、下一首、第一首、最后一首的實現。
//下一首歌曲按鈕的實現代碼
LXT_IB_Next.setOnClickListener(new ImageButton.OnClickListener()
{
@Override
public void onClick(View arg)
{
if (++lxt_current_position >= lxt_MusicList .size())
{
lxt_current_position = 0;
}
else
{
lxt_playMusic(LXT_MUSIC_PATH + lxt_MusicList .get(lxt_current_position));
}
}
});
第一首歌的核心代碼:
if (lxt_MusicList .size()>0)
{
lxt_current_position = 0;
}
上一首、第一首、最后一首歌曲按鈕的實現代碼與下一首類似。
(10)下一首自動播放的實現。
lxt_mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
//代碼與下一首歌核心代碼相同
}
});
3 結語
原型法從某個應用的核心技術出發,構造一個基礎模型,然后在其上進行擴充,這是軟件開發的一種常見方法[5]。在教學中,單刀直入主題,學生可以快速掌握關鍵點,然后結合以前所學知識,形成一個知識群落,進而完成一個接近實際應用的軟件。在層層外推的過程中,初學者更容易接受,效果也比直接將全部知識融合在一起更好。本教學方法適用于其他編程為主的基礎課程;當然,對于已經有了基礎的學生,先整體再局部的教學模式會更有效。
[參考文獻]
[1]余應淮.基于計算思維的移動編程課程教學改革初探[J].福建電腦,2018(8):65-66.
[2]李亞飛,呂培,李亞軍.探討移動編程課程教學實踐改革[J].計算機教育,2018(5):95-98.
[3]楊捷.PLM系統二次開發項目中快速原型法的應用[J].電子技術與軟件工程,2018(4):46.
[4]楊豐盛.Android應用開發揭秘[M].北京:機械工業出版社,2013.
[5]董元和,張行文.基于Axure的軟件原型法的研究與應用[J].湖北師范大學學報(自然科學版),2017(12):15-19.