package com.hongx.framework.manager;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Message;
import com.hongx.framework.utils.LogUtils;
import java.io.IOException;
public class MediaPlayerManager {
public static final int MEDIA_STATUS_PLAY = 0;
public static final int MEDIA_STATUS_PAUSE = 1;
public static final int MEDIA_STATUS_STOP = 2;
public int MEDIA_STATUS = MEDIA_STATUS_STOP;
private MediaPlayer mMediaPlayer;
private static final int H_PROGRESS = 1000;
private OnMusicProgressListener musicProgressListener;
private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message message) {
switch (message.what) {
case H_PROGRESS:
if (musicProgressListener != null) {
int currentPosition = getCurrentPosition();
int pos = (int) (((float) currentPosition) / ((float) getDuration()) * 100);
musicProgressListener.OnProgress(currentPosition, pos);
mHandler.sendEmptyMessageDelayed(H_PROGRESS, 1000);
}
break;
}
return false;
}
});
public MediaPlayerManager() {
mMediaPlayer = new MediaPlayer();
}
public boolean isPlaying() {
return mMediaPlayer.isPlaying();
}
public void startPlay(AssetFileDescriptor path) {
try {
mMediaPlayer.reset();
mMediaPlayer.setDataSource(path.getFileDescriptor(),
path.getStartOffset(), path.getLength());
mMediaPlayer.prepare();
mMediaPlayer.start();
MEDIA_STATUS = MEDIA_STATUS_PLAY;
mHandler.sendEmptyMessage(H_PROGRESS);
} catch (IOException e) {
LogUtils.e(e.toString());
e.printStackTrace();
}
}
public void startPlay(String path) {
try {
mMediaPlayer.reset();
mMediaPlayer.setDataSource(path);
mMediaPlayer.prepare();
mMediaPlayer.start();
MEDIA_STATUS = MEDIA_STATUS_PLAY;
mHandler.sendEmptyMessage(H_PROGRESS);
} catch (IOException e) {
LogUtils.e(e.toString());
e.printStackTrace();
}
}
public void pausePlay() {
if (isPlaying()) {
mMediaPlayer.pause();
MEDIA_STATUS = MEDIA_STATUS_PAUSE;
removeHandler();
}
}
public void continuePlay() {
mMediaPlayer.start();
MEDIA_STATUS = MEDIA_STATUS_PLAY;
mHandler.sendEmptyMessage(H_PROGRESS);
}
public void stopPlay() {
mMediaPlayer.stop();
MEDIA_STATUS = MEDIA_STATUS_STOP;
removeHandler();
}
public int getCurrentPosition() {
return mMediaPlayer.getCurrentPosition();
}
public int getDuration() {
return mMediaPlayer.getDuration();
}
public void setLooping(boolean isLooping) {
mMediaPlayer.setLooping(isLooping);
}
public void seekTo(int ms) {
mMediaPlayer.seekTo(ms);
}
public void removeHandler() {
if (mHandler != null) {
mHandler.removeMessages(H_PROGRESS);
}
}
public void setOnComplteionListener(MediaPlayer.OnCompletionListener listener) {
mMediaPlayer.setOnCompletionListener(listener);
}
public void setOnErrorListener(MediaPlayer.OnErrorListener listener) {
mMediaPlayer.setOnErrorListener(listener);
}
public void setOnProgressListener(OnMusicProgressListener listener) {
musicProgressListener = listener;
}
public interface OnMusicProgressListener {
void OnProgress(int progress, int pos);
}
}
public class AnimUtils {
public static ObjectAnimator rotation(View view) {
ObjectAnimator mAnim = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f);
mAnim.setDuration(2 * 1000);
mAnim.setRepeatMode(ValueAnimator.RESTART);
mAnim.setRepeatCount(ValueAnimator.INFINITE);
mAnim.setInterpolator(new LinearInterpolator());
return mAnim;
}
}
public class MediaPlayerActivity extends AppCompatActivity {
private ImageView iv_music_switch;
private MediaPlayerManager mGuideMusic;
private ObjectAnimator mAnim;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_player);
iv_music_switch = findViewById(R.id.iv_music_switch);
startMusic();
}
private void startMusic() {
mGuideMusic = new MediaPlayerManager();
mGuideMusic.setLooping(true);
final AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.guide);
mGuideMusic.startPlay(file);
mGuideMusic.setOnComplteionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mGuideMusic.startPlay(file);
}
});
mAnim = AnimUtils.rotation(iv_music_switch);
mAnim.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
mGuideMusic.stopPlay();
}
}