android第三次作业
一、实现的功能
1.实现播放,暂停,停止,播放上一首,下一首功能
2.实现了进度条与歌曲的匹配
3.实现了播放时候的专辑旋转效果
4.实现了播放列表
二、项目截图
播放界面
歌曲界面
三、主要代码
相关service的配置
package com.example.yc.musicbox; import android.app.Activity; import android.app.Service; import android.content.Intent; import android.content.pm.PackageManager; import android.media.MediaPlayer; import android.os.Binder; import android.os.Environment; import android.os.IBinder; import android.os.Parcel; import android.os.RemoteException; //import android.support.v4.app.ActivityCompat; import android.widget.Toast; import java.io.File; import static android.os.Environment.DIRECTORY_MUSIC; public class MusicService extends Service { public static MediaPlayer mp = new MediaPlayer();//音乐 File myfile=new File(Environment.getExternalStorageDirectory(),"Jony J - Team Work.mp3"); public MusicService() { try { mp.setDataSource(myfile.getPath()); mp.prepare(); mp.setLooping(true); } catch (Exception e) { e.printStackTrace(); } } private IBinder mBinder = new MyBinder(); @Override public IBinder onBind(Intent intent) { // 必须实现的接口 return mBinder; } public class MyBinder extends Binder { @Override protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { switch (code) { case 101://“还未播放”状态,点击开始播放 mp.start(); break; case 102://“正在播放”状态,点击暂停 mp.pause(); break; case 103://“正在暂停”状态,点击继续播放 mp.start(); break; case 104://点击停止,进度条归零 mp.stop(); try { mp.prepare(); mp.seekTo(0); } catch (Exception e) { e.printStackTrace(); } break; } return super.onTransact(code, data, reply, flags); } } }
service与activity的绑定,实现歌曲的读取
public void service_connection() { mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBinder = service; } @Override public void onServiceDisconnected(ComponentName name) { mConnection = null; } }; Intent intent = new Intent(this, MusicService.class); startService(intent); bindService(intent, mConnection, Context.BIND_AUTO_CREATE); }
利用handle进行UI界面的更行,实现相应进度条的变化以及碟片的转动
public void update() { new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } handler.obtainMessage(123).sendToTarget(); } } }).start(); handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 123: //UI更新 progressTime.setText(t.format(MusicService.mp.getCurrentPosition())); seekBar.setProgress(MusicService.mp.getCurrentPosition()); break; default: break; } } }; }
拖动进度条改变歌曲进度
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { MusicService.mp.seekTo(seekBar.getProgress()); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); }
四、代码链接
https://git.coding.net/insist_shen/musicplay.git
五、APK链接
https://git.coding.net/insist_shen/music_apk.git
六、演示展示