ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:1.05MB ,
资源ID:4473828      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4473828.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于安卓的音乐播放器需求分析说明书.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于安卓的音乐播放器需求分析说明书.docx

1、基于安卓的音乐播放器需求分析说明书卷 号卷内编号密 级项目编号:Boom! 音乐播放器需求分析说明书项 目 承 担 部 门: 2012管工班第三组 完 成 日 期: 2015.09.04 本文档 使 用部门: 评审负责人(签名): 评 审 日 期: 1.简介1.1目的本文档用于描述音乐播放器APP的总体架构,用于指导各app的具体实施。本文档的用户包括系统设计师、开发人员、测试人员、评审组成员。1.2范围此说明书适用于音乐播放器app项目。1.3APP参与者手机用户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 Intent(MusicService.MUSIC_CONTROL); /判断当前的状态值是什么状态 如果是播放状态 if (status = Music

4、Service.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); /将命令广播出去 sendBroadcast(i); /发送广播 );4.2 上一曲下一曲模块 流程图: N N Y Y程序逻辑: 当用户点击上一曲下一曲按钮时,播放器

5、就对当前播放事件监听,从音乐列表中转换音乐,从而控制当前音乐的上一曲下一曲,关键代码如下:/上一曲键事件监听器 previousBtn.setOnClickListener (new OnClickListener() public void onClick(View v) Intent i = new Intent(MusicService.MUSIC_CONTROL); int cmd = MusicService.CMD_PREV;/发送前一首的命令 i.putExtra(cmd, cmd); sendBroadcast(i); ); / 下一曲键事件监听器 nextBtn.setOnC

6、lickListener(new OnClickListener() public void onClick(View v) Intent i = new Intent(MusicService.MUSIC_CONTROL); int cmd = MusicService.CMD_NEXT; i.putExtra(cmd, cmd); sendBroadcast(i); ); /设置SeekBar的监听事件 sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() /当停止拖动时调用的方法 public void onStopTra

7、ckingTouch(SeekBar seekBar) public void onStartTrackingTouch(SeekBar seekBar) /当SeekBar拖动时会执行此方法 public void onProgressChanged(SeekBar seekBar, int prog, boolean fromUser) /fromUser参数意思是判断拖动是否是用户用手拖动的 if (fromUser = true & Math.abs(prog - progress) = 5) progress = prog; Intent i = new Intent(MusicSe

8、rvice.MUSIC_CONTROL); int cmd = MusicService.CMD_SEEK;/发送拖动的命令 i.putExtra(cmd, cmd); i.putExtra(progress, progress);/讲拖动的进度传进Service sendBroadcast(i); sb.setProgress(progress); ); 4.3 音量模块流程图: N Y Y N Y N 程序逻辑: 声音有两个按钮控制,一个增加声音和一个减少声音。通过 这两个按钮用户可以调节播放音乐的声音大小,用AudioManager 组件对声音的大小进行增减,最大为7,最小为0。当用户点

9、击 声音按钮时,若是增按钮,对声音进行增加,若是减按钮对声音 进行减小。 部分代码如下: /获取点击事件 voiceUp = (ImageButton)findViewById(R.id.music_voic_up); / 音量 增加 voiceDown (ImageButton)findViewById(R.id.music_voic_down); /音量 增减小 执行事件 audiomanage=(AudioManager)getSystemService( Context.AUDIO_SERVICE); voiceDown.setOnClickListener(new OnClickLi

10、stener() public void onClick(View v) audiomanage.adjustVolume( AudioManager.ADJUST_LOWER,0); Volume=audiomanage.getStreamVolume( AudioManager.STREAM_RING); if(volume0) volume-; audiomanage.setRingerMode(volume); ); / 声音控制按钮 声音增加 voiceUp.setOnClickListener(new OnClickListener() public void onClick(Vi

11、ew v) audiomanage.adjustVolume(AudioManager.ADJUST_RAISE, 0); volume=audiomanage.getStreamVolume( AudioManager.STREAM_RING); 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.execS

12、QL(DROP TABLE IF EXISTS + TABLE_FOLDER); onCreate(db); 数据库删除语句 public void deleteTables(Context context) SQLiteDatabase db = this.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)

13、; db.delete(TABLE_MUSIC, null, null); 添加数据到album_info表public void saveAlbumInfo(List list) SQLiteDatabase db = DatabaseHelper.getInstance(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

14、_of_songs, info.number_of_songs); cv.put(album_art, info.album_art); db.insert(TABLE_ALBUM, null, cv); 获取数据从album_info表public List getAlbumInfo() SQLiteDatabase db = DatabaseHelper.getInstance(mContext); List list = new ArrayList(); String sql = select * from + TABLE_ALBUM; Cursor cursor = db.rawQue

15、ry(sql, null); while(cursor.moveToNext() AlbumInfo info = new AlbumInfo(); info.album_name = cursor.getString(cursor.getColumnIndex(album_name); info.album_art = cursor.getString(cursor.getColumnIndex(album_art); info.album_id = cursor.getInt(cursor.getColumnIndex(album_id); info.number_of_songs = c

16、ursor.getInt(cursor.getColumnIndex(number_of_songs); list.add(info); cursor.close(); return list; 判断数据表是否有数据 public boolean hasData() SQLiteDatabase db = DatabaseHelper.getInstance(mContext); String sql = select count(*) from + TABLE_ALBUM; Cursor cursor = db.rawQuery(sql, null); boolean has = false

17、; if(cursor.moveToFirst() int count = cursor.getInt(0); if(count 0) has = true; cursor.close(); return has; 获取数据表的记录数 public int getDataCount() SQLiteDatabase db = 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.质量系统运行稳定,基本功能全部实现。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1