android开发音乐盒的实验报告
- 格式:doc
- 大小:459.00 KB
- 文档页数:8
一、实训目的本次实训旨在通过实际操作,让学生掌握电子音乐盒的设计与制作流程,提高学生的电子技术、音乐处理和动手实践能力。
通过实训,使学生能够:1. 了解电子音乐盒的基本原理和组成;2. 掌握电子音乐盒的设计与制作方法;3. 熟悉相关电子元件的性能和应用;4. 培养学生的创新思维和团队协作能力。
二、实训环境实训地点:电子实验室实训设备:电子元件(如:单片机、扬声器、电阻、电容、按键等)、编程软件(如:Keil、C语言编程软件等)、音乐制作软件(如:Audacity等)。
三、实训原理电子音乐盒是一种将音乐信号转换为声波,通过扬声器播放的音乐设备。
其基本原理是利用单片机控制音乐芯片,将音乐数据转换为相应的电信号,通过扬声器播放出来。
1. 音乐芯片:存储音乐数据,如MIDI文件;2. 单片机:读取音乐芯片中的音乐数据,按照一定的时间间隔发送指令给扬声器;3. 扬声器:将电信号转换为声波,播放音乐。
四、实训过程1. 音乐制作:使用Audacity软件制作MIDI文件,并将其转换为适合单片机播放的音乐数据。
2. 元件选型:根据音乐盒的设计需求,选择合适的电子元件,如单片机、扬声器、电阻、电容、按键等。
3. 电路设计:根据元件性能和功能,设计电路图,包括单片机、音乐芯片、扬声器等部分。
4. 电路焊接:按照电路图,将元件焊接在电路板上。
5. 编程:使用Keil软件编写程序,实现音乐盒的功能。
6. 调试与测试:对音乐盒进行调试,确保其正常工作。
五、实训结果1. 设计并制作了一款具有基本功能的电子音乐盒;2. 掌握了电子音乐盒的设计与制作方法;3. 熟悉了相关电子元件的性能和应用;4. 培养了创新思维和团队协作能力。
六、实训总结1. 通过本次实训,我对电子音乐盒的基本原理和组成有了更深入的了解;2. 在设计过程中,我学会了如何根据需求选择合适的电子元件,并进行了电路设计;3. 编程过程中,我掌握了C语言编程,提高了编程能力;4. 在调试与测试过程中,我学会了如何解决实际问题,提高了问题解决能力;5. 本次实训使我认识到团队协作的重要性,培养了良好的团队精神。
竭诚为您提供优质文档/双击可除安卓音乐播放器实验报告篇一:音乐播放器实验报告面向对象程序设计课程设计设计说明书音乐播放器(mp3player)起止日期:20XX年5月27日至20XX年6月2日学班学成生姓名级号绩孙见任计算机科学与技术10110408100124指导教师(签字)计算机与通信学院20XX年6月2日目录一、课题的介绍和课题的任务二、设计的要求三、系统的分析和系统中功能的设计四、系统的实现及调试五、系统的使用说明六、总结七、程序主要源代码八、课程设计任务书一、课题的介绍和课题的任务音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。
它涵盖了各种音乐格式的播放工具,比如:mp3播放器,wmA播放器,mp4播放器等。
它们不仅界面美观,而且操作简单,带你进入一个完美的音乐空间。
利用mFc应用程序、媒体控制接口mIc的基本知识,设计一个mp3播放器。
要求能够播放常用windows音频格式的文件;实现播放控制:播放、暂停、清空播放列表、音量增减、添加歌曲、上一曲,下一曲等功能;实现从本地磁盘加入文件,然后对其进行播放。
二、设计的要求系统模块功能图:流程图:二、系统的分析和系统中功能的设计该播放器分为八大功能模块;1、背景图片:音乐播放器的背景图片。
篇二:android手机音乐播放器实训报告final课程名:软件工程综合实践实践项目:基于Android的手机音乐播放器一、课程设计题目基于Android的手机音乐播放器二、课程设计内容(含技术指标)本程序是基于Android开源系统技术,利用Java语言和eclipse编辑工具对播放器进行编写。
程序功能如下:用户可以按照以下规则进行操作:1.音乐播放:界面对歌曲操作有播放、暂停、停止、音量控制、上一首/下一首播放模式:随机播放、顺序播放、单曲循环。
2.音乐管理:音乐列表、专辑:显示全部音乐文件,能直接选择播放歌曲。
艺术家:归类艺术家的音乐文件。
最近播放:记录用户最近播放的音乐文件,方便用户再次使用。
A n d r o i d开发音乐播放器毕业论文SANY GROUP system office room 【SANYUA16H-郑州大学毕业设计(论文)题目:基于Android平台的音乐播放器指导教师:李妍职称:讲师学生姓名:陈小雨学号:专业:计算机科学与技术(软件开发)院(系):软件学院完成时间: 2014年05月05日2014年05月05日目录摘要 (1)ABSTRACT (2)前言 (3)1 Android平台及开发工具介绍 (4)1.1Android平台简介 (4)1.1.1A ndroid平台架构 (4)1.1.2Android的四大组件 (6)1.2 Android的开发环境 (8)1.2.1 Eclipse (8)1.2.2A ndroid SDK (8)1.3本章小结 (9)2 需求分析 (10)2.1 播放器的设计目标 (10)2.2 软件的可行性研究 (10)2.2.1经济上的可行性 (10)2.2.2技术上的可行性 (11)2.2.3操作上的可行性 (11)2.3 播放器的功能需求分析 (11)2.3.1播放器的基本功能 (11)2.3.2歌曲列表的功能 (14)2.3.3菜单的设置功能 (16)2.4 本章小结 (18)3 总体设计.................................................3.1设计原则 (19)3.1.1总体设计路线 (19)3.1.2 系统功能结构图 (20)3.1.3系统流程图 (21)3.2 主要功能设计 (21)3.2.1歌曲列表模块 (21)3.2.2 音乐播放模块 (22)3.2.3 专辑列表模块 (23)3.2.4 菜单设置模块 (24)3.3系统的安全设计............................................................ .. (24)3.4 本章小结 (25)4 详细设计与实现 (26)4.1 欢迎界面............................................4.2 歌曲播放界面 (27)4.2.1 播放音轨SeekBar (28)4.2.2 播放调节功能 (28)4.3 歌词显示界面 (29)4.4 列表显示界面 (30)4.5 菜单设置 (31)4.6 本章总结 (33)5 音乐播放器的测试 (34)5.1 测试模型 (35)5.1.1 V模型 (35)5.1.2 W模型 (35)5.2 测试模型的选择 (37)5.3 测试方法 (37)5.3.1 白盒测试 (37)5.3.2 黑盒测试 (38)5.3.3 测试方法的选择 (38)5.4 功能的测试与实现 (38)4.2.1 播放器整体功能的实现 (39)4.2.2 播放器主要模块功能测试 (40)5.5 测试结论 (40)5.6 测试过程与总结 (40)5.7 本章小结 (41)结论 (42)致谢 (43)参考文献 (44)摘要Android平台是Google公司最新推出的一个手机平台,该平台对移动设备的程序集中包括一个操作系统,一个中间件和一些关键性应用。
基于Android的音乐播放器的系统设计的研究报告本文基于Android平台开发了一款音乐播放器,主要实现了歌曲的播放、暂停、切换、调节音量等基本功能。
本文主要介绍了音乐播放器的系统设计,包括面向对象设计、软件体系结构设计及界面设计等。
一、面向对象设计面向对象设计是一种软件设计方法,通过将对象的属性和行为打包在一起,以便更好地管理和重复使用。
本系统的面向对象设计主要包括三个核心类: MediaPlayManager(媒体播放管理器)、 Music(音乐)和 PlayControl(播放控制器)。
MediaPlayManager类是整个系统的核心。
它负责管理音频播放相关的所有操作,如音频资源的获取、播放控制、进度更新、音量调节等。
同时,它还可以屏蔽底层的细节实现,以便更好地隔离系统的其他组成部分。
Music类是储存音频信息的基本单元,存储了音频文件的基本信息,如文件路径、歌曲名、歌手、专辑等信息。
Music类是可重用的,可以被图形用户界面和系统其他组件调用。
PlayControl类是包含系统中所有的用户交互控件,通过监听用户输入来触发音频播放的开始、暂停、停止、快进、快退等操作。
PlayControl类还包含了音量控制和进度条控制,以便更好地处理用户对音频的操作。
二、软件体系结构设计在软件体系结构设计方面,本系统采用面向服务的体系结构设计方法。
本系统包含了多个服务,分别负责从不同的数据源获取数据、音频处理、媒体播放、UI交互等工作。
这些服务各自独立地工作,通过接口来协调彼此之间的工作,以便实现整个系统的功能。
其中最重要的服务是MediaPlayService媒体播放服务,负责整个系统的媒体播放工作,包括MP3音频格式、网络音频、在线音频等媒体类型的播放工作。
另外,本系统还采用了MVVM架构模式,将业务逻辑和视图分开,使得业务逻辑可以单独测试,且可以更加方便的修改和升级。
MVVM模式可以有效地解耦,在注重变化和可维护性方面得到迅速的发展。
广东工业大学实验报告信息工程学院电子信息工程专业 2 班成绩评定_______ 学号3110002831 姓名李硕教师签名_______预习情况操作情况考勤情况数据处理情况实验 3 题目本地MP3播放器第_13_周星期_二_第_6-7_节1、打开Eclipse,导入教材第5章例程ServiceDemo;2、在PlayBindMusic界面上分别添加一个ListView控件,用于显示本地SD卡MP3文件;public void musicFileList(){try{if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){sdCardDir = Environment.getExternalStorageDirectory(File home = sdCardDir;if (home.listFiles(new mp3Filter()).length > 0){mMusicFileList.clear(); //清空缓冲for (File file : home.listFiles(new mp3Filter())){mMusicFileList.add(file.getName());}}}}catch(Exception e){e.printStackTrace();}}class mp3Filter implements FilenameFilter{public boolean accept(File dir, String name){return (name.endsWith(".mp3"));}}要将歌曲导入虚拟机的sd卡添加一个进度条,用于显示播放进度;Layout.xml 中添加如下代码<ProgressBarandroid:id="@+id/progressBar1"style="?android:attr/progressBarStyleHorizontal"//要设置为水平进度条android:layout_width="250dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentBottom="true"/>Java里面实例化,链接playProgress = (ProgressBar)findViewById(R.id.progressBar1);// 为UI控件绑定事件监听器3、把路径、音乐文件列表作为Intent的Extra属性,再绑定BindMusicService对象;把当前选中要播放的音乐文件的索引号(在ListView中位置编号)作为参数传递给BindMusicService.java 的play(int item )方法;mMusicList=(Object[])intent.getExtras().getSerializable("mMusicList"); currentListItem=(int)intent.getExtras().getInt("currentListItem");mp3Path = intent.getExtras().getString("path");return binder;在主配置文件AndroidManifest.xml中允许SD卡读写权限:<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>改写PlayBindMusic中connection( )方法,使用意图Intent传递播放列表和路径:Intent serviceIntent = new Intent("com.android.ServiceDemo.bindService");serviceIntent.putExtra("mMusicList", mMusicFileList.toArray());serviceIntent.putExtra("currentListItem", currentListItem);serviceIntent.putExtra("path", sdCardDir.getPath());bindService(serviceIntent, sc, Context.BIND_AUTO_CREATE);4、修改BindMusicService.java的play( )方法,在play方法里创建mediaPlayer,并开始播放;if(mediaPlayer==null){Uri playUri = Uri.parse(mp3Path+"/"+mMusicList[item]);mediaPlayer = MediaPlayer.create(this, playUri);mediaPlayer.start();}if(currentListItem!=item && mediaPlayer != null){currentListItem = item; //更新编号mediaPlayer.release(); //释放旧对象Uri playUri =Uri.parse(mp3Path+"/"+mMusicList[currentListItem]);mediaPlayer = MediaPlayer.create(this, playUri);mediaPlayer.start();}if ((!mediaPlayer.isPlaying()) && mediaPlayer != null) {mediaPlayer.start();}5、添加进度条控制代码,显示播放进度;playProgress.setMax(musicService.GetDuration());playProgress.setProgress(musicService.GetCurrentPosition());。
Android实验报告一.实验目的1.掌握Android项目中界面显示的基本方法;2.了解Android手机硬件API的调用方法;3.了解Android系统的资源存储结构;4.在Android平台下音乐播放器的设计开发二.实验环境计算机安装AndroidSDK,Eclipse,Android模拟器三.实验过程1、建立Android工程2、在res -> layout -> main.xml中设置程序界面3、主界面musicActivity设计。
大致的流程是调用父类onCreat函数,隐藏标题栏,设置布局,寻找布局控件,初始化应用,刷新播放列表,绑定监听器,启动服务。
代码如下:关键代码讲解设置布局函数setView()中,先初始化ListView、GridView,完毕后再将其添加到viewPager中从而可以进行滑动切换显示。
代码如下:(图1)图1播放音乐的函数playMusic(String path)函数中的参数为歌曲的路径(包含歌曲的文件名和后缀),返回类型为空,它的作用就是播放该路径的歌曲并且有一个播放完毕的监听器。
所有的歌曲控制指令都写在musicActivity中,Service本身并不负责对歌曲列表的操作,所以,如果播放完毕,则给musicActivity一个切换歌曲的指令。
代码如下:(图2)图2实现歌曲播放的暂停,上一首,下一首,停止等功能。
代码如下:(图3,图4)图3图4四.实验总结通过这次Android播放器的设计,让我更加深一步的了解到Android这门课程的用处与意义。
通过这次程序设计是我自己的Android基础有了更加深入的了解,使自己的知识更加的牢固。
如今社会Android手机的发展可谓是蒸蒸日上,Android技术人员的稀缺,更加使我们这些学习Android技术的人看到的大好的未来。
促使我更加努力的学习Android技术。
五.分工musicActivity的编写以及数据库的建立,同时负责软件后期的调试和修改;Android实验报告班级:计应1301姓名:焦强学号:20139009。
android音乐播放器开题报告Android音乐播放器开题报告一、引言近年来,随着智能手机的普及和移动互联网的发展,人们对于音乐的需求也越来越高。
作为一种重要的娱乐方式,音乐播放器在移动设备上的应用变得越来越重要。
本文将探讨Android音乐播放器的开发,旨在提供一种功能齐全、操作简便的音乐播放器应用。
二、背景随着移动设备的普及,人们越来越倾向于使用智能手机来听音乐。
然而,市面上的音乐播放器应用存在一些问题,如功能不够全面、操作复杂等。
因此,开发一款功能强大、操作简便的Android音乐播放器应用具有重要意义。
三、目标本项目的目标是开发一款Android音乐播放器应用,具有以下特点:1. 功能齐全:能够支持多种音频格式的播放,包括MP3、WAV、FLAC等。
同时,还能够提供歌曲的分类浏览、歌词显示、播放列表管理等功能。
2. 操作简便:用户能够轻松地浏览歌曲、切换播放模式、调节音量等。
同时,还能够提供便捷的搜索功能,使用户能够快速找到自己想听的歌曲。
3. 用户体验优化:通过界面设计和交互方式的优化,提供良好的用户体验。
例如,可以提供自定义主题、背景音乐、睡眠定时等功能,满足用户的个性化需求。
四、开发计划本项目的开发计划如下:1. 需求分析:对用户需求进行深入调研和分析,明确开发目标和功能要求。
2. 技术选型:选择合适的开发语言和框架,如Java和Android Studio。
3. 界面设计:设计直观、美观的用户界面,提高用户体验。
4. 功能开发:根据需求分析,逐步实现各项功能,包括音频播放、歌曲分类、歌词显示等。
5. 测试与优化:对开发的功能进行测试,修复bug并进行性能优化,确保应用的稳定性和流畅性。
6. 发布与推广:将开发完成的应用发布到应用商店,并进行推广,吸引用户下载和使用。
五、预期成果通过本项目的开发,预期将实现以下成果:1. 一款功能齐全、操作简便的Android音乐播放器应用,满足用户对音乐播放的需求。
广州xx 学院Android 程序设计 实验报告专业班级 计算机181 实验日期__ 2021.5.18_ _ 姓 名 xx 学 号201xx 实验名称 Service 编程 指导老师__ xx _(报告内容包括:实验目的、实验设备及器材、实验步骤、实验数据、图表及曲线处理、实验小结等)。
1. 实验目的(1) 了解如何创建服务;(2) 掌握服务的两种启动方式;(3) 掌握如何使用本地服务通信。
2. 实验要求(1) 使用服务通信,实现音乐播放器功能,实现音乐的播放、暂停、继续播放、退出。
3. 实验步骤(1)导入音乐文件和界面图片之后,开始创建布局,代码如下,效果图如图1-1所示。
<ImageViewandroid :id ="@+id/iv_music"android :layout_width ="240dp"android :layout_height ="240dp"android :layout_gravity ="center_horizontal" android :layout_margin ="15dp"android :src ="@drawable/music"/><SeekBarandroid :id ="@+id/sb"android :layout_width ="match_parent"android :layout_height ="wrap_content" /><RelativeLayoutandroid :layout_width ="match_parent"android :layout_height ="wrap_content"android:paddingLeft="8dp"android:paddingRight="8dp"><TextViewandroid:id="@+id/tv_progress"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="00:00" /><TextViewandroid:id="@+id/tv_total"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="00:00" /></RelativeLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_play"android:layout_width="0dp"android:layout_height="40dp"android:layout_margin="8dp"android:layout_weight="1"android:background="@drawable/btn_bg_selector"android:text="播放音乐" /><Buttonandroid:id="@+id/btn_pause"android:layout_width="0dp"android:layout_height="40dp"android:layout_margin="8dp"android:layout_weight="1"android:background="@drawable/btn_bg_selector"android:text="暂停播放" /><Buttonandroid:id="@+id/btn_continue_play"android:layout_width="0dp"android:layout_height="40dp"android:layout_margin="8dp"android:layout_weight="1"android:background="@drawable/btn_bg_selector"android:text="继续播放" /><Buttonandroid:id="@+id/btn_exit"android:layout_width="0dp"android:layout_height="40dp"android:layout_margin="8dp"android:layout_weight="1"android:background="@drawable/btn_bg_selector"android:text="退出" /></LinearLayout>图1-1 界面布局效果图(2)创建背景选择器btn_bg_selector.xml关键代码如下:<selector xmlns:android="/apk/res/android"><item android:state_pressed="true" ><shape android:shape="rectangle"><corners android:radius="3dp"/><solid android:color="#d4d4d4"/></shape></item><item android:state_pressed="false" ><shape android:shape="rectangle"><corners android:radius="3dp"/><solid android:color="#ffffff" /></shape></item></selector>(3)创建MusicService服务关键代码如下所示:public class MusicService extends Service {private MediaPlayer player;private Timer timer;public MusicService() {}@Overridepublic IBinder onBind(Intent intent) {return new MusicControl();}@Overridepublic void onCreate() {super.onCreate();player = new MediaPlayer();//创建音乐播放器对象}public void addTimer() { //添加计时器用于设置音乐播放器中的播放进度条if (timer == null) {timer = new Timer(); //创建计时器对象TimerTask task = new TimerTask() {@Overridepublic void run() {if (player == null) return;int duration = player.getDuration(); //获取歌曲总时长int currentPosition = player.getCurrentPosition();//获取播放进度Message msg = MainActivity.handler.obtainMessage();//创建消息对象//将音乐的总时长和播放进度封装至消息对象中Bundle bundle = new Bundle();bundle.putInt("duration", duration);bundle.putInt("currentPosition", currentPosition);msg.setData(bundle);//将消息发送到主线程的消息队列MainActivity.handler.sendMessage(msg);}};//开始计时任务后的5毫秒,第一次执行task任务,以后每500毫秒执行一次timer.schedule(task, 5, 500);}}class MusicControl extends Binder {public void play() {try {player.reset();//重置音乐播放器//加载多媒体文件player = MediaPlayer.create(getApplicationContext(),R.raw.music);player.start();//播放音乐addTimer(); //添加计时器} catch (Exception e) {e.printStackTrace();}}public void pausePlay() {player.pause(); //暂停播放音乐}public void continuePlay() {player.start(); //继续播放音乐}public void seekTo(int progress) {player.seekTo(progress);//设置音乐的播放位置}}@Overridepublic void onDestroy() {super.onDestroy();if (player == null) return;if (player.isPlaying()) player.stop();//停止播放音乐player.release(); //释放占用的资源player = null; //将player置为空}}(4)编写界面交互代码关键代码如下:public class MainActivity extends AppCompatActivity implementsView.OnClickListener{private static SeekBar sb;private static TextView tv_progress, tv_total;private ObjectAnimator animator;private MusicService.MusicControl musicControl;MyServiceConn conn;Intent intent;private boolean isUnbind = false;//记录服务是否被解绑@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);init();}private void init() {tv_progress = (TextView) findViewById(_progress);tv_total = (TextView) findViewById(_total);sb = (SeekBar) findViewById(R.id.sb);findViewById(R.id.btn_play).setOnClickListener(this);findViewById(R.id.btn_pause).setOnClickListener(this);findViewById(R.id.btn_continue_play).setOnClickListener(this);findViewById(R.id.btn_exit).setOnClickListener(this);intent = new Intent(this, MusicService.class);//创建意图对象conn = new MyServiceConn();//创建服务连接对象bindService(intent, conn, BIND_AUTO_CREATE); //绑定服务//为滑动条添加事件监听sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, booleanfromUser) { //滑动条进度改变时,会调用此方法if (progress == seekBar.getMax()) { //当滑动条滑到末端时,结束动画animator.pause(); //停止播放动画}}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {//滑动条开始滑动时调用}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) { //滑动条停止滑动时调用//根据拖动的进度改变音乐播放进度int progress = seekBar.getProgress();//获取seekBar的进度musicControl.seekTo(progress); //改变播放进度}});ImageView iv_music = (ImageView) findViewById(R.id.iv_music);animator = ObjectAnimator.ofFloat(iv_music, "rotation", 0f, 360.0f);animator.setDuration(10000); //动画旋转一周的时间为10秒animator.setInterpolator(new LinearInterpolator());animator.setRepeatCount(-1); //-1表示设置动画无限循环}4.运行结果开始播放如图4-1所示图4-15.实验小结通过此次实验,让我了解到了Android中的服务创建,比如下载文件、播放音乐等功能,其中让我学到了一个背景选择器,可以通过这个选择器动态呈现按钮的背景颜色。
android音乐播放器毕业设计Android音乐播放器毕业设计随着智能手机的普及,人们对音乐的需求也越来越高。
而作为一名计算机专业的毕业生,我决定选择开发一款Android音乐播放器作为我的毕业设计。
本文将介绍我设计的这款音乐播放器的功能和特点,以及我在开发过程中遇到的挑战和解决方案。
一、功能和特点1. 音乐库管理:用户可以通过该应用管理手机中的音乐文件,包括添加、删除、修改歌曲信息等操作。
同时,应用还支持对音乐文件进行分类、排序和搜索,方便用户快速找到自己想听的歌曲。
2. 播放控制:应用提供基本的音乐播放控制功能,包括播放、暂停、上一曲、下一曲等。
同时,还支持播放模式的切换,如顺序播放、随机播放和单曲循环等。
3. 歌词显示:应用可以自动搜索并显示歌曲的歌词,让用户更加沉浸在音乐中。
同时,还支持手动导入歌词文件,以满足用户个性化的需求。
4. 播放列表:用户可以创建自己的播放列表,将喜欢的歌曲添加到其中,方便随时播放。
同时,还支持对播放列表进行编辑,如添加、删除和排序等操作。
5. 主题切换:应用提供多种主题供用户选择,让用户可以根据自己的喜好来设置界面的外观。
同时,还支持自定义主题,让用户可以根据自己的需求自由设置。
二、挑战和解决方案在开发过程中,我遇到了一些挑战,下面是我解决这些挑战的方案。
1. 音乐文件的扫描和管理:为了能够准确地获取手机中的音乐文件,我使用了Android提供的媒体库API来扫描和管理音乐文件。
通过使用这些API,我能够获取到音乐文件的路径、歌曲信息和封面等数据,从而实现了音乐库管理的功能。
2. 歌词的搜索和显示:为了能够自动搜索并显示歌曲的歌词,我使用了第三方的歌词搜索API。
通过调用该API,我可以根据歌曲的名称和歌手来搜索歌词,并将搜索结果显示在应用中。
同时,为了能够满足用户自定义歌词的需求,我还实现了手动导入歌词文件的功能。
3. 播放控制和界面设计:为了实现播放控制的功能,我使用了Android提供的MediaPlayer类来控制音乐的播放。
《开发一个安卓软件报告》报告设计题目:用安卓开发单机音乐盒学院名称:电子与信息工程学院专业:计算机科学与技术班级:计科091姓名:*** 学号03指导教师:***定稿日期:2011年12月26日一、设计任务与要求1、设计目标:(1)了解Java编程的基础知识和数据库知识(2)掌握用android开发应用软件的的一般步骤和方法。
(3) 能够利用所学的基本知识,设计一个完整的音乐播放盒,还可以实现后台播放声音,并且在播放过程中可以通过前台的按钮控制声音的播放、暂停与关闭。
(4)在以上基础上再加一个界面,能够实现跳转,出现一个歌词界面。
2、课程设计的要求:1、用Service组件、BroadcastReceiver组件、Intent、菜单对话框来完成音乐的播放等操作。
2、提交设计报告一份(需求分析、设计的基本思路、设计的步骤及主要代码、心得体会)。
二、系统分析1、需求分析随着android手机的普及和一些小游戏的流行,android开发也日益high了。
现在,大家也都是用手机听音乐了,一个绚丽的、酷酷的音乐盒就可以成为我们炫耀的资本了。
为了符合更多人的喜欢,设计的界面要清晰、美观、大方、并且操作方便。
所以我设计的界面也一定要清晰、美观、大方、并且操作方便。
2、模块分析(1)在layout文件中增加一个歌词的界面songwords.xml并画好界面,还要在mail.xml中画好界面。
(2)在raw文件中放入歌曲。
<string name="myTextView1">我爱他</string><string name="myTextView2">叮当</string><string name="swords">歌词</string><string name="words">他的轻狂留在某一节车厢地下铁里的风比回忆还重···省部分歌词···若那一刻重来我不哭让他知道我可以很好</string>(3)在values文件中的string中添加所要用到的字符串。
(4)在src文件中的文件中的Sample_9_3.java中定义一些按钮和转换的方法,在MyService.java中实现了按钮,在songwords.java中实现了歌词那个界面的功能。
三、系统设置1、功能设计这个播放器可以实现播放,暂停,停止和歌词界面跳转功能。
在刚打开音乐盒的时候,是播放状态,按一下暂停按钮,音乐停止播放,且暂停按钮的图像变为播放按钮的图像;此时再按一下播放按钮,音乐继续;无论音乐在播放状态还是暂停状态,只要按一下停止按钮,音乐就会被关闭;当音乐在播放时,按歌词按钮,就会跳转到当前播放的歌的歌词界面,且音乐继续在播放;如果退出音乐盒这个界面,音乐也还是再继续的。
而且在还没有跳转的时候,按菜单栏就会出现退出前台的按钮了。
2、界面设计第一个界面总体分为上、下两层,第一层主要分三个部分,把播放按钮和暂停按钮重叠的放在第一部分,把停止按钮放在第二部分,第三部分又划分成上、下两个部分,上面放歌曲的名称,下面放歌曲的演唱者;第二层只有一个按钮,跳转到歌词界面的功能。
<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayoutxmlns:android="/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"><ImageButtona ndroid:id="@+id/start"a ndroid:layout_width="wrap_content"a ndroid:layout_height="wrap_content"a ndroid:src="@drawable/png2"/><ImageButtona ndroid:id="@+id/stop"a ndroid:layout_width="wrap_content"a ndroid:layout_height="wrap_content"a ndroid:src="@drawable/png1"/><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewa ndroid:id="@+id/textView1"a ndroid:layout_width="wrap_content"a ndroid:layout_height="wrap_content"a ndroid:textSize="25px"a ndroid:textColor="#ffffff"a ndroid:ellipsize="marquee"a ndroid:layout_weight="1"a ndroid:marqueeRepeatLimit="marquee_forever"a ndroid:text="@string/myTextView1"/><TextViewa ndroid:id="@+id/textView2"a ndroid:textSize="15px"a ndroid:gravity="center_vertical"a ndroid:layout_weight="1"a ndroid:layout_width="wrap_content"a ndroid:layout_height="wrap_content"a ndroid:text="@string/myTextView2"/></LinearLayout></LinearLayout><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/swords"android:id="@+id/swords"></Button></LinearLayout>第二个界面也分为上、下两层,第一层就是用来放歌词的;第二层有一个返回按钮,可以返回到第一个界面。
<LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/words"android:textSize="15px"android:textColor="#FF00FF"android:id="@+id/words"></TextView><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="返回"android:id="@+id/back"android:onClick="@string/swords"></Button>最终的效果是:四、个人总结这个音乐盒虽然比较简单,但是是我自己用这个学期所学到的知识来完成的,有我自己的心血,让自己觉得自己还不错。
在做实验的过程也遇到了问题,毕竟所学的知识不是很深,问了在暑假所过的同学很多问题,终于完成了。
在做音乐盒的过程中,先前想得很简单,只要它能播放、暂停、停止就可以了。
后来想想要是可以看到歌词就好了,所以才加的歌词那个界,还把字体设置成了自己喜欢的枚红色。
本来还想在歌词按钮的下面再加一个列表,来显示所有的歌曲名及其演唱者,但是自己的知识还是太少了,没能把它实现。
不过还是会再接再砺的。
五、附录:代码4、修改Music.java源代码:public class Music extends Activity implements OnClickListener{ ImageButton start;//播放、暂停按钮ImageButton stop;//停止按钮private Button swords;ActivityReceiver activityReceiver;int status = 1;//当前的状态,1没有声音播放 ,2 正在播放声音,3暂停/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {//重写的onCreate方法super.onCreate(savedInstanceState);setContentView(yout.main);//设置当前的用户界面start= (ImageButton) this.findViewById(R.id.start);//得到start的引用stop = (ImageButton) this.findViewById(R.id.stop);//得到stop按钮的引用swords = (Button) this.findViewById(R.id.swords);start.setOnClickListener(this);//为按钮添加监听stop.setOnClickListener(this);//为按钮添加监听swords.setOnClickListener(this); activityReceiver = new ActivityReceiver();//创建BroadcastReceiverIntentFilter filter = new IntentFilter();//创建IntentFilter过滤器 filter.addAction("wyf.ytl.update");//添加ActionregisterReceiver(activityReceiver, filter);//注册监听Intent intent = new Intent(this, MyService.class);//创建IntentstartService(intent);//启动后台Service}public class ActivityReceiver extends BroadcastReceiver{//自定义的BroadcastReceiver@Overridepublic void onReceive(Context context, Intent intent) {//重写的onReceive方法// TODO Auto-generated method stubint update = intent.getIntExtra("update", -1);//得到intent中的数据switch(update){//分支判断case 1://没有声音播放status = 1; //设置当前状态break;case 2://正在播放声音start.setImageResource(R.drawable.png3);//更换图片status = 2; //设置当前状态break;case 3://暂停中start.setImageResource(R.drawable.png2);//更换图片status = 3; //设置当前状态break;}}}@Overridepublic void onClick(View v) {//接口中的方法// TODO Auto-generated method stubIntent intent = new Intent("wyf.ytl.control");//创建Intentswitch(v.getId()){//分支判断case R.id.start://按下播放、暂停按钮intent.putExtra("ACTION", 1);//存放数据sendBroadcast(intent);//发送广播break;case R.id.stop://按下停止按钮intent.putExtra("ACTION", 2);//存放数据sendBroadcast(intent);//发送广播break;case R.id.swords:Intent intent2=new Intent();intent2.setClass(this, Songwords.class);startActivity(intent2);}}@Overrideprotected void onDestroy() {//释放时被调用// TODO Auto-generated method stubsuper.onDestroy();Intent intent = new Intent(this, MyService.class);//创建Intent stopService(intent);//停止后台的Service}@Overridepublic boolean onCreateOptionsMenu(Menu menu){//弹出菜单menu.add(0,Menu.FIRST,0,"退出").setIcon(R.drawable.ic_menu_delete);//设置图标return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item){//选择的菜单项switch(item.getItemId()){//分支判断case Menu.FIRST:showDialog(1);//显示对话框break;}//将来可在此进行扩展return false;}@Overrideprotected Dialog onCreateDialog(int id){//创建对话框switch(id){//判断case 1:return new AlertDialog.Builder(this).setTitle("您确定退出?").setPositiveButton("确定", newandroid.content.DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubSystem.exit(0);//直接退出}}).setNegativeButton("取消", null)//取消按钮.create();default:return null;}}}5、修改Myservice.java源代码:package wyf.ytl;public class MyService extends Service{MediaPlayer mp;ServiceReceiver serviceReceiver;int status = 1;//当前的状态,1没有声音播放 ,2 正在播放声音,3暂停@Overridepublic IBinder onBind(Intent intent) {//重写的onBind方法// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {//重写的onCreate方法,会在Service创建时被调用// TODO Auto-generated method stubstatus = 1;serviceReceiver = new ServiceReceiver();//创建BroadcastReceiverIntentFilter filter = new IntentFilter();//创建过滤器filter.addAction("wyf.ytl.control");//添加ActionregisterReceiver(serviceReceiver, filter);//注册BroadcastReceiversuper.onCreate();}@Overridepublic void onDestroy() {//重写的onDestroy方法// TODO Auto-generated method stubunregisterReceiver(serviceReceiver);//取消注册super.onDestroy();}public class ServiceReceiver extends BroadcastReceiver{//自定义BroadcastReceiver@Overridepublic void onReceive(Context context, Intent intent) {//重写的响应方法// TODO Auto-generated method stubint action = intent.getIntExtra("ACTION", -1);//得带需要的数据switch(action){case 1://播放或暂停声音if(status == 1){//当前没有声音播放mp = MediaPlayer.create(context, R.raw.nx);status = 2;Intent sendIntent = new Intent("wyf.ytl.update");sendIntent.putExtra("update", 2);sendBroadcast(sendIntent);mp.start();}else if(status == 2){//正在播放声音mp.pause(); //停止status = 3;//改变状态Intent sendIntent = new Intent("wyf.ytl.update");sendIntent.putExtra("update", 3);//存放数据sendBroadcast(sendIntent);//发送广播}else if(status == 3){//暂停中mp.start();//播放声音status = 2;//改变状态Intent sendIntent = new Intent("wyf.ytl.update");sendIntent.putExtra("update", 2);//存放数据sendBroadcast(sendIntent);//发送广播}break;case 2://停止声音if(status == 2 || status == 3){//播放中或暂停中mp.stop();//停止播放status = 1;//改变状态Intent sendIntent = new Intent("wyf.ytl.update");sendIntent.putExtra("update", 1);//存放数据sendBroadcast(sendIntent);//发送广播}}}}}6、增加Songwords.java的源代码:public class Songwords extends Activity implements OnClickListener{ private TextView view_words;private Button back;private void findViews(){back = (Button) findViewById(R.id.back);v iew_words = (TextView) findViewById(R.id.words);}@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(yout.songwords);findViews();showSongwords();Intent intent =getIntent();}private void showSongwords(){Bundle receive = this.getIntent().getExtras();view_words.setText(R.string.words);back.setOnClickListener(this);}@Overridepublic void onClick(View v) {Intent intent=new Intent();intent.setClass(this, Sample_9_3.class);startActivity(intent);}}。