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

六、演示展示

https://pan.baidu.com/s/1iZ_B5ccXk4EK2RwLO0sISg

posted @ 2018-12-11 00:49  insist_666  阅读(243)  评论(0编辑  收藏  举报