《基于安卓的音乐播放器需求分析说明书(共19页).doc》由会员分享,可在线阅读,更多相关《基于安卓的音乐播放器需求分析说明书(共19页).doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上卷 号卷内编号密 级项目编号:Boom! 音乐播放器需求分析说明书项 目 承 担 部 门: 2012管工班第三组 完 成 日 期: 2015.09.04 本文档 使 用部门: 评审负责人(签名): 评 审 日 期: 目录1. 简介1.1 目的本文档用于描述音乐播放器APP的总体架构,用于指导各app的具体实施。本文档的用户包括系统设计师、开发人员、测试人员、评审组成员。1.2 范围此说明书适用于音乐播放器app项目。1.3 APP参与者手机用户2. 构架表示方式3. 构架目标和约束 主要建设功能:导入本地歌曲文件、选择显示歌词、更换皮肤、在线试听、在线下载(资源在服务
2、器上)、选择显示歌手简介、选择显示专辑简介、选择推荐专辑内其他本地没有的歌曲、显示乐库歌曲排行榜、新建歌单、管理歌单等功能。 交互设计:提供良好的交互设计、操作简单快速、按钮及菜单设计合理,合理引导用户使用。 完善的日志,所有操作数据库记录日志。 个性化:提供完全个性化的播放平台,为不同用户定制符合其喜好的歌曲及歌单,为其提供不同的主题样式、播放模式、播放菜单。 用户记忆:提供记住用户名及记住密码功能,用户可选择记忆期限:周、月、半年、年、或永远。 app能够承受一次下载同事下载5首歌曲、在播放同时下载的并发压力。 各界面色彩基调相似。操作习惯、风格相似。4. APP用例 歌曲界面控制可分为:
3、播放/暂停/停止模块、上一曲/下一曲 模块、音量模块。4.1 播放/暂停/停止模块 流程图:获取当前状态播放开 始 点击事件 停止暂停获取当前状态获取当前状态是否为播放 是否为播放 N N Y Y停止歌曲暂停歌曲是否为播放暂停 N结 束播放歌曲 Y程序逻辑: 当用户点击播放暂停停止按钮时,播放器就对当前播放事件监听从而控制当前音乐的播放暂停停止,部分关键代码如下: /播放按钮 playPauseBtn.setOnClickListener(new OnClickListener() public void onClick(View v) int cmd = 0; Intent i = new
4、Intent(MusicService.MUSIC_CONTROL); /判断当前的状态值是什么状态 如果是播放状态 if (status = MusicService.STATUS_PLAYING) cmd = MusicService.CMD_PAUSE; /发送暂停的命令 else if (status = MusicService.STATUS_STOPPED) cmd = MusicService.CMD_START; /发送播放的命令 else cmd = MusicService.CMD_RESUME; /继续播放的命令 i.putExtra(cmd, cmd); /将命令广播出
5、去 sendBroadcast(i); /发送广播 );4.2 上一曲下一曲模块 流程图:开 始 单击事件上一曲下一曲获取当前歌曲位置获取当前歌曲位置有无后继有无前驱 N N Y Y跳转到下一曲目跳转到上一曲目结 束程序逻辑: 当用户点击上一曲下一曲按钮时,播放器就对当前播放事件监听,从音乐列表中转换音乐,从而控制当前音乐的上一曲下一曲,关键代码如下:/上一曲键事件监听器 previousBtn.setOnClickListener (new OnClickListener() public void onClick(View v) Intent i = new Intent(MusicSer
6、vice.MUSIC_CONTROL); int cmd = MusicService.CMD_PREV;/发送前一首的命令 i.putExtra(cmd, cmd); sendBroadcast(i); ); / 下一曲键事件监听器 nextBtn.setOnClickListener(new OnClickListener() public void onClick(View v) Intent i = new Intent(MusicService.MUSIC_CONTROL); int cmd = MusicService.CMD_NEXT; i.putExtra(cmd, cmd);
7、 sendBroadcast(i); ); /设置SeekBar的监听事件 sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() /当停止拖动时调用的方法 public void onStopTrackingTouch(SeekBar seekBar) public void onStartTrackingTouch(SeekBar seekBar) /当SeekBar拖动时会执行此方法 public void onProgressChanged(SeekBar seekBar, int prog, boolean fromUs
8、er) /fromUser参数意思是判断拖动是否是用户用手拖动的 if (fromUser = true & Math.abs(prog - progress) = 5) progress = prog; Intent i = new Intent(MusicService.MUSIC_CONTROL); int cmd = MusicService.CMD_SEEK;/发送拖动的命令 i.putExtra(cmd, cmd); i.putExtra(progress, progress);/讲拖动的进度传进Service sendBroadcast(i); sb.setProgress(pr
9、ogress); ); 4.3 音量模块流程图:开 始 单击事件 NN音量增 Y获取当前音量 Y音量是否为0获取当前音量 N音量是否为7音量减1 Y N音量加1 结 束 程序逻辑: 声音有两个按钮控制,一个增加声音和一个减少声音。通过 这两个按钮用户可以调节播放音乐的声音大小,用AudioManager 组件对声音的大小进行增减,最大为7,最小为0。当用户点击 声音按钮时,若是增按钮,对声音进行增加,若是减按钮对声音 进行减小。 部分代码如下: /获取点击事件 voiceUp = (ImageButton)findViewById(R.id.music_voic_up); / 音量 增加 vo
10、iceDown (ImageButton)findViewById(R.id.music_voic_down); /音量 增减小 执行事件 audiomanage=(AudioManager)getSystemService( Context.AUDIO_SERVICE); voiceDown.setOnClickListener(new OnClickListener() public void onClick(View v) audiomanage.adjustVolume( AudioManager.ADJUST_LOWER,0); Volume=audiomanage.getStrea
11、mVolume( AudioManager.STREAM_RING); if(volume0) volume-; audiomanage.setRingerMode(volume); ); / 声音控制按钮声音增加 voiceUp.setOnClickListener(new OnClickListener() public void onClick(View v) audiomanage.adjustVolume(AudioManager.ADJUST_RAISE, 0); volume=audiomanage.getStreamVolume( AudioManager.STREAM_RIN
12、G); if(volume oldVersion) db.execSQL(DROP TABLE IF EXISTS + TABLE_ARTIST);db.execSQL(DROP TABLE IF EXISTS + TABLE_ALBUM);db.execSQL(DROP TABLE IF EXISTS + TABLE_MUSIC);db.execSQL(DROP TABLE IF EXISTS + TABLE_FOLDER);onCreate(db);数据库删除语句public void deleteTables(Context context) SQLiteDatabase db = th
13、is.getWritableDatabase();db.delete(TABLE_ALBUM, null, null);db.delete(TABLE_ARTIST, null, null);db.delete(TABLE_FAVORITE, null, null);db.delete(TABLE_FOLDER, null, null);db.delete(TABLE_MUSIC, null, null);添加数据到album_info表public void saveAlbumInfo(List list) SQLiteDatabase db = DatabaseHelper.getInst
14、ance(mContext);for (AlbumInfo info : list) ContentValues cv = new ContentValues();cv.put(album_name, info.album_name);cv.put(album_id, info.album_id);cv.put(number_of_songs, info.number_of_songs);cv.put(album_art, info.album_art);db.insert(TABLE_ALBUM, null, cv);获取数据从album_info表public List getAlbumI
15、nfo() SQLiteDatabase db = DatabaseHelper.getInstance(mContext);List list = new ArrayList();String sql = select * from + TABLE_ALBUM;Cursor cursor = db.rawQuery(sql, null);while(cursor.moveToNext() AlbumInfo info = new AlbumInfo();info.album_name = cursor.getString(cursor.getColumnIndex(album_name);i
16、nfo.album_art = cursor.getString(cursor.getColumnIndex(album_art);info.album_id = cursor.getInt(cursor.getColumnIndex(album_id);info.number_of_songs = cursor.getInt(cursor.getColumnIndex(number_of_songs);list.add(info);cursor.close();return list;判断数据表是否有数据public boolean hasData() SQLiteDatabase db =
17、 DatabaseHelper.getInstance(mContext);String sql = select count(*) from + TABLE_ALBUM;Cursor cursor = db.rawQuery(sql, null);boolean has = false;if(cursor.moveToFirst() int count = cursor.getInt(0);if(count 0) has = true;cursor.close();return has;获取数据表的记录数public int getDataCount() SQLiteDatabase db
18、= DatabaseHelper.getInstance(mContext);String sql = select count(*) from + TABLE_ALBUM;Cursor cursor = db.rawQuery(sql, null);int count = 0;if(cursor.moveToFirst() count = cursor.getInt(0);return count;9.数据视图所有对数据的写操作均记录系统日志,通过拦截Liferay ServiceBuilder生成的数据操纵类的相关方法实现,具体用其ModelListener机制来实现;各个功能模块根据规则控制数据范围和读写权限。一般根据组织机构控制数据范围,根据角色控制读写权限。10.大小和性能随着用户访问数量的变化,可以通过负载均衡的方式提供更大的并发访问,示意图如下所示:11.质量系统运行稳定,基本功能全部实现。专心-专注-专业