音频播放服务

最近写了个音频播放的服务,功能包括准备资源、播放、暂停、前进多少秒,后退多少秒

import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import tv.danmaku.ijk.media.player.IMediaPlayer;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;

/**
 * Created by Administrator on 2017/6/26.
 */
public class VoiceService extends BaseService {

    private IjkMediaPlayer mediaPlayer;
    private VoicePlayListener voicePlayListener;
    private long totalTime;
    private Timer timer;
    public static final int IDLE = 1;
    public static final int PREPARED = 2;
    public static final int PLAYING = 3;
    public static final int PAUSE = 4;
    public static final int FINISH = 5;
    private SimpleDateFormat dateFormat = new SimpleDateFormat("mm:ss");

    public class VoiceBinder extends Binder {
        public VoiceService returnBinder() {
            return VoiceService.this;
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        VoiceBinder binder = new VoiceBinder();
        return binder;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mediaPlayer = new IjkMediaPlayer();
        totalTime = mediaPlayer.getDuration();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    public void setUrl(String url) {
        try {
            mediaPlayer.setDataSource(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void prepare(final VoicePlayListener voicePlayListener) {
        this.voicePlayListener = voicePlayListener;
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(IMediaPlayer iMediaPlayer) {
                setProgress(PREPARED);
            }
        });
    }

    public void play() {
        if (!mediaPlayer.isPlaying()) {
            mediaPlayer.start();
            setProgress(PLAYING);
        } else {
            mediaPlayer.pause();
            setProgress(PAUSE);
        }
    }

    public void forward() {
        if (mediaPlayer.getCurrentPosition() + 15000 < totalTime) {
            mediaPlayer.seekTo(mediaPlayer.getCurrentPosition() + 15000);
            setProgress(PLAYING);
        } else {
            mediaPlayer.stop();
            setProgress(FINISH);
        }
    }

    public void back() {
        if (mediaPlayer.getCurrentPosition() - 15000 > 0) {
            mediaPlayer.seekTo(mediaPlayer.getCurrentPosition() - 15000);
        } else {
            mediaPlayer.seekTo(0);
        }
        setProgress(PLAYING);
    }

    private void setProgress(final int state) {
        if (null != timer) {
            timer.cancel();
        }
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                voicePlayListener.onPlay(state, (int) (mediaPlayer.getCurrentPosition() * 100 / mediaPlayer.getDuration()), dateFormat.format(new Date(mediaPlayer.getCurrentPosition())), dateFormat.format(new Date(mediaPlayer.getDuration())));
            }
        }, 0, 1000);
    }

    public interface VoicePlayListener {
        void onPlay(int state, int progress, String currentTime, String totalTime);
    }
}
原文地址:https://www.cnblogs.com/anni-qianqian/p/7088619.html