1、(2) 能够对音乐文件进行有效的管理。(3) 系统应最大限度地实现易维护性和易操作性。2. 软件的可行性研究(1)经济上的可行性Android是 Google 历经数年和投资数亿美元开发出来的智能手机系统,是 基于 Linux 内核的操作系统,是 Google 公司在 2007 年 11 月 5 日公布的手机操 作系统。随着各大移动终端生产商大力开发和生产基于的移动智能设备,Android迅速得到业界和社会的认可,并成为整个产业的热点,基于平 台的各类人才逐渐成为各大企业竞相争夺的焦点。 而且是一个开放的系统,不管是企业还是个人都可以参与来表达自己的创意和想法。(2)技术上的可行性Google
2、发起了围绕Android的组织开放手机联盟, 其英文全称为 “Open Handset Alliance”。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层 Linux 内核只提供基本功能;其他的应用软件则 由各公司自行开发,部分程序以 Java 编写。(3)操作上的可行性本系统采用Android框架,可以在eclipse中安装Android开发插件,使用Android模拟器也可以使用任意Android终端。模拟器和真正的Android手机没有太大区别,人们对手机操作早已熟悉。(二) 系统功能需求分析1 用例图及用例描述功能需求定义了开发人员必须实现
3、的软件功能,使得用户能完成他们的任务,从而满足了用户的业务需求。用户需求文档描述了用户使用产品必须要完成的任务。针对音乐播放器分别对音乐播放功能进行详细的调研和分析,总结出如用户需求信息,其用例图如图2.1所示。图2.1 播放器用例图音乐播放器的用例描述如下:(1) 用例名称:播放 参与者:用户 目标:使得用户可以播放在播放列表中选中的歌曲 前置条件:播放器正在运行 基本事件流:1.用户单击“播放”按钮 2.播放器将播放列表中的当前的歌曲(2) 用例名称:暂停使得用户可以暂停正在播放的歌曲歌曲正在播放且未停止和暂停1.用户单击“暂停”按钮 2.播放器将暂停当前的歌曲(3) 用例名称:上一首/下
4、一首 目标:使得用户可以听上一首或下一首歌曲歌曲正在播放或暂停1.用户单击“上一首或下一首”按钮 2.播放器将播放上一首或下一首歌曲(4) 用例名称:播放列表使得用户可以进入播放清单程序在运行播放器进入播放列表(5) 用例名称:歌词显示使得程序进入播放器歌词设置状态程序运行在播设定界面播放器显示或关闭歌词2. 音乐播放器的时序图 播放器对象之间的交互情况如图2.2所示。图2.2 音乐播放器的时序图(三) 业务流程分析播放器工作流程图如图2.3所示。图 2.3 音乐播放器流程图三、系统设计(一) 总体设计根据播放器的实现目标,可获得播放器的基本需求,以下从不同角度来描述系统的需求,系统的功能需求
5、,分成三部分来概括,即播放器的基本控制需求,播放列表管理需求和播放器友好性需求,如图3.1所示为应用功能结构图分析: 图3.1 功能结构图(二) 歌曲列表模块设计程序在初始化界面时,从系统数据库获得SD内所有音乐信息,将这些得到的信息构建到列表呈现给用户,流程如图3.2所示:图3.2 歌曲列表模块流程图(三) 播放控制模块设计播放控制模块是整个设计控制的核心部分,用户只需通过简单的触摸操作就可以实现对歌曲播放的控制,如图3.3所示: 图3.3播放控制模块流程图(四) 播放器设置模块设计播放器设置包括播放器背景皮肤更换以及播放器定时睡眠,如图3.4所示:图3.4 播放器设置模块流程图(五) 数据
6、库设计1. 数据库及字段属性设计(1) 字段设计(表、图)file_table 主要是保存歌曲名字、类型、路径。字段说明:Id 歌曲id号 fileName 歌曲名字 filePath 歌曲路径 sort 歌曲类型(表3.1、图3.5)Android自带一个MediaStore封闭类专门来存储媒体信息,通过Uri EXTERNAL_CONTENT_URI 来访问SDcard中的歌曲详细信息。存放媒体信息如TITLE(标题)、ARTIST(艺术家)、ALBUM(专辑)、SIZE(大小 )(表3.2、图3.5)图3.5 歌曲列表图3.6 歌曲详细(2) 音乐播放器E-R图音乐播放器 E-R图(图3
7、.6)图3.7 E-R图2. 数据库连接(1) 创建数据库 Android 提供了标准的数据库创建方式。继承SQLiteOpenHelper ,实现onCreate 和 onUpgrade 两个方法,有个好处就是便于数据库版本的升级,连接数据库的算法如下:/*游标*/ private Cursor c = null; /*建立表的语句*/ private static final String CREATE_TAB = create table + music(_id integer primary key autoincrement,music_id integer,clicks integ
8、er, +latest text); /*列名*/ private static final String TAB_NAME = music /*数据库*/ private SQLiteDatabase db = null; /*构造函数*/ public DBHelper(Context context, String name, CursorFactory factory, int version) super(context, name, factory, version); /*构造一个数据库,如果没有就创建一个数据库*/ Override public void onCreate(S
9、QLiteDatabase db) this.db = db; db.execSQL(CREATE_TAB);(2) 操作数据库 Android对数据库的操作主要有插入、删除、更新、查询操作,在进行任何操作时都必须指定一个Uri,才能对相应的表进行数据操作。/*插入数据*/ public void insert(ContentValues values) SQLiteDatabase db = getWritableDatabase(); db.insert(TAB_NAME, null, values); db.close(); /* 更新数据*/ public void update(Co
10、ntentValues values,int id) db.update(TAB_NAME, values, music_id=+id, null); /*删除数据*/ public void delete(int id) if (db = null) db = getWritableDatabase(); db.delete(TAB_NAME, music_id=?, new StringString.valueOf(id);(3) 数据显示程序是利用Cursor游标类指向数据表中的某一项,然后进行查询数据,用Log日志显示出来/*查找数据*/ public Cursor query(int
11、 id) SQLiteDatabase db = getReadableDatabase(); c = db.query(TAB_NAME, null, , new StringString.valueOf(id), null, null, null); return c;四、系统实现(一) 主界面Android的每一个可视化界面,都有其的唯一的布局配置文件,该文件里面有各种布局方式,和各种资源文件如图像,文字,颜色的引用,程序在运行时,可以通过代码对各配置文件进行读取。这样就可以形成不同的可视化界面和炫丽的效果。播放器主界面是一个Activity,Android工程在每个activity启动
12、的时候会首先执行Oncreate()方法,如下代码:Public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState););该方法主要执行界面的初始化操作,Activity有个设置布局的方法:Context.setContentView(layoutResID),参数为资源ID,该Id在工程目录res/layout下,主界面布局文件名为main。欢迎界面结束以后进入主界面图4.1所示, 主界面主要采用相对布局(RelativeLayout)。图4.1 主界面部分布局代码如下: TextView+i
13、d/tv_player_song_infolayout_centerHorizontal=layout_toLeftOf=+id/ibtn_player_voicelayout_toRightOf=id/ibtn_player_listellipsize=marqueefocusable=focusableInTouchMode=gravity=center_horizontallines=1marqueeRepeatLimit=marquee_foreversingleLine= android:text=显示歌名textColor=android:color/whitetextSize=1
14、9sptextStyle=bold+id/tv_player_singer_infolayout_below=id/tv_player_song_infopaddingLeft=71dip显示歌手15splayout_alignParentRight=drawable/player_btn_voice/RelativeLayout1. 播放音轨SeekBar在main.xml文件中,SeekBar的代码如下:SeekBar+id/sb_player_voicelayout_centerVertical=id/iv_player_max_voiceid/iv_player_min_voicedr
15、awable/voice_seekbar_bgpaddingRight=progressDrawable=drawable/voice_seekbar_progressthumb=drawable/voice_seekbar_thumb上面代码中有参数android:drawable/ voice_seekbar_thumb为音轨游标的图片资源android:drawable/ voice_seekbar_progress 为SeekBar条的风格style。引用了drawable中的voice_seekbar_progress.xml文件, voice_seekbar_progress.xm
16、l是自定义的配置文件,代码如下:?xml version=1.0 encoding=utf-8layer-list xmlns:android= item android:id/background android:drawable= id/progressclip android:drawable/voice_seekbar_one/layer-list播放器最重要的一部分就是音轨与歌曲进度同步的实现。音轨设置了两个TextView用来显示当前歌曲播放的进度时间和歌曲的长度(图4.2)。图4.2 播放音轨音轨对象SeekBar部分代码如下:private void ShowSeekBar()
17、 seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() Override public void onStopTrackingTouch(SeekBar seekBar) public void onStartTrackingTouch(SeekBar seekBar) public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) if (fromUser) seekbar_change(progress); else if
18、 (seekBar.getId() = R.id.sb_player_voice) / 设置音量 am.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); );/* * 进度条改变事件 */ private void seekbar_change(int progress) Intent intent = new Intent(); intent.setAction(); intent.putExtra(op, PROGRESS_CHANGE);progress, progress); startService(intent);2.
19、 播放调节功能实现各按钮水平放置,从左到右依次是上一首、播放、下一首功能按钮。用的是布局中的线性布局LinearLayout,;将其设置为水平,如图4.3所示:图4.3 播放功能按钮LinearLayout中依次放置播放/暂停,上一首、下一首按钮属性。配置文件代码结构如下:LinearLayoutid/ibtn_player_control_modeid/ibtn_player_control_menucenterorientation=horizontal+id/ibtn_player_control_pre75dip58dipdrawable/player_btn_player_pre/+id/ibtn_player_control_play android
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1