基于Android 系统的音乐播放器设计与实现
实验报告
一、实验要求:
本课程设计的目的是开发一个可以播放主流音乐文件格式的播放器的播放功能模块,要求音乐播放器能够播放Mp 3,Wav 多种格式的音乐文件,能够控制播放,暂停,重播,停止,要求视觉外观美观,操作简单。
二,设计思想
首先查找相关书籍与文献,了解An droid 的构架并搭建An dr oid 开发平台。 查找相关资料,了解现阶段基于And roid 平台手机音乐播放器发展现状以及相关功能。
播放器基本拥有以下功能:
播放本地音乐文件
对播放的状态进行控制
播放设置,开始暂停停止
三,系统结构
?
四、数据结构的说明和模块的算法流程图
运行 结束
暂停 开始 音乐播放器主界面
音乐播放器 设定 播放界面 开始 暂停
停止
五、使用说明书
菜单有6个功能:播放,暂停,停止,重播。
播放功能:点击后事件触发,传入歌曲名字,让程序操作该名字进行播放。
暂停功能:点击后事件触发,歌曲暂停播放。
停止功能:点击后事件触发,歌曲停止播放。
重播功能;点击后事件触发,歌曲重新播放。
六、运行结果和结果分析
作为Android平台上开发的应用软件,本设计具备与用户交互的界面,界面简洁美观易于操作。作为一款在线音乐客户端,提供给用户在线选歌的方便,提供在线播放歌曲的即时信息,如歌曲名,歌手名,时长等等。
七、我评价与总结
现如今社会生活节奏日益加快,人们在忙碌的生活中欣赏音乐是最好的舒缓压力的方式之一。随着移动设备的日益完善,我们大家都已经有了在手机上听自己喜欢歌曲的习惯,以往的做法是用数据线或者蓝牙等无线设备将PC上的歌曲复制几首到手机当中,反反复复的听,等到听厌了以后,再次装一些歌曲进去,如此反复,非常的麻烦。因此,如果在我们的手机上能实现在线听歌,这将会带来极大的方便。本项目是一款基于Android手机平台的音乐播放器,使Android 手机拥有个性的多媒体播放器,是手机显得更生动灵活化,与人们更为方便,让手机主人随时随地处于音乐的旋律之中。本设计实现的重要功能是播放Mp3格式的音乐文件,并且能够控制音乐的播放,暂停,显示歌手信息,歌曲专辑等功能。本项目还可以使人们生活更加多样化,也使设计者更加熟悉Android的技术和其它在市场上的特点。
八、附录
package com.example.seekbar;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
MediaPlayer mediaPlayer;
SeekBar seekBar;
?private TextView text4;
Button playButton, pauseButton, close, exit;
?// 本地歌曲的路径
String path = "/storage/sdcard1/sky.mp3";
// 处理进度条更新
Handler mHandler = new Handler() {
??public void handleMessage(Message msg) {
??switch (msg.what) {
?case 0:
??// 更新进度
?int position = mediaPlayer.getCurrent Position();
???int time =mediaPlayer.getDuration();
???int max = seekBar.getMax();
???seekBar.setProgress(position * max / time);
??break;
default:
??break;
??}
?}
?};// 结束
?@Override
protectedvoid onCreate(Bundle savedInstanceS tate) {
super.onCreate(savedInstanceState);
??setContentView(R.layout.activity_main);
?init();
??text4 = (TextView) findViewById(R.id.text4);
?// 初始化关闭按钮
?close = (Button) findViewById(R.id.close);
close.setOnClickListener(new OnClickListener(){
??@Override
??public void onClick(View arg0) {
??close();
??}
});
?// 初始化播放按钮
?playButton = (Button) findViewById(R.id.pla yButton);
?playButton.setOnClickListener(new OnClickListener() {
???@Override
??public void onClick(View arg0) {
?//TODO Auto-generated method stub
???Toast.makeText(MainActivity.this, "time is " + mediaPlayer.getDuration(), 1000).show();
?play();
??}
});
?// 初始化暂停按钮
?pauseButton = (Button) findViewByI
d(R.id.pauseButton);
??pauseButton.setOnClickListener(newOnClickListener(){
?@Override
?public void onClick(View arg0) {
?pause();
??}
?});
??//初始化退出按钮
??exit =(Button) findViewById(R.id.exit);
??exit.setOnClickListener(new OnClickListener() {
???@Override
?public void onClick(View arg0) {
??exit();
?}
??});
?seekBar = (SeekBar)findViewById(R.id.seekbar);
??seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBa rChangeListener() {
??@Override
?public void onStopTrackingTouch(SeekBar seekBar) {
// 手动调节进度
??int dest = seekBar.getProgress();
??int time = mediaPlayer.getDuration();
??int max = seekBar.getMax();
??mediaPlayer.seekTo(time * dest / max);
?}
?@Override
?public void onStartTrackingTouch(SeekBara rg0) {
???// TODO Auto-generated method stub
???}
??@Override
?public void onProgressChanged(SeekBar ar g0, intarg1, boolean arg2) {
???// TODO Auto-generated method stub
?}
}); // seekbar结束
}
?// 初始化音乐播放
?void init() {
?//进入Idle
mediaPlayer= new MediaPlayer();
try {
??// 初始化
??mediaPlayer.setDataSource(path);
??mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
??//prepare 通过异步的方式装载媒体资源
mediaPlayer.prepareAsync();
???//后台线程发送消息进行更新进度条
?finalint milliseconds = 100;
??new Thread() {
???@Override
????public void run() {
???while (true) {
???try {
???sleep(milliseconds);
?????} catch (InterruptedException e) {
//TODO Auto-generated catch block
?????e.printStackTrace();
???}
?????mHandler.sendEmptyMessage(0);
??}
?}
}.start();// 11
??} catch(Exception e) {
???// TODO Auto-generated catch block
e.printStackTrace();
??}
?}
//关闭
private void close() {
?
}
?//测试播放音乐
void play() {
?mediaPlayer.start();
?text4.setText("音乐总长度为:" + mediaPlayer.get Duration() + "毫秒");
}
// 暂停音乐
?private void pause() {
?if (mediaPlayer != null &&mediaPlayer.isPl aying()) {
?mediaPlayer.pause();
??text4.setText("暂停");
}
}
?//关闭
??private void exit(){
???this.finish();
?
?}
?// activity 退出时,停止播放音乐,释放资源
@Override
?protected voidonDestroy() {
?// 在activity结束的时候回收资源
??if(mediaPlayer != null && mediaPlayer.isPlaying()){
?mediaPlayer.stop();
?mediaPlayer.release();
??mediaPlayer= null;
??}
??super.onDestroy();
?}
?@Override
public boolean onCreateOptionsMenu(Menu menu) {
??// Inflate the menu; this adds items to the action bar i f it is present.
?getMenuInflater().inflate(R.menu.main,menu); ??return true;
}
}
android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="100dp" android:layout_gravity="center" android:text="@string/text1" android:textSize="60dp"/> <TextView android:id="@+id/text2" android:layout_width="match_parent" android:layout_height="50dp" android:layout_gravity="center" android:text="@string/text2" android:textSize="30dp"/> android:id="@+id/text3" android:layout_width="match_parent" android:layout_height="40dp" android:layout_gravity="center" android:text="@string/text3" android:textSize="15dp"/> android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> android:id="@+id/close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/close"/> <Button android:id="@+id/playButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/play"/>