邵国强 刘春 张百顺 李宏博 张丽华
摘 要:文章论述了“移动编程基础”课程的面临的主要问题,介绍了原型法的基本思想。以音乐播放器为例,展示了原型法在教学中的应用。以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.