|
@@ -0,0 +1,225 @@
|
|
|
+package com.wdkl.ncs.android.component.nursehome.util;
|
|
|
+
|
|
|
+import android.media.AudioManager;
|
|
|
+import android.media.MediaPlayer;
|
|
|
+import android.os.Handler;
|
|
|
+import android.os.HandlerThread;
|
|
|
+import android.os.Message;
|
|
|
+
|
|
|
+import com.wdkl.ncs.android.lib.base.BaseApplication;
|
|
|
+
|
|
|
+public class MediaPlayHelper {
|
|
|
+
|
|
|
+ private static MediaPlayHelper sInstance = null;
|
|
|
+ private MediaPlayer mediaPlayer;
|
|
|
+ private HandlerThread playHandlerThread;
|
|
|
+ private Handler playHandler;
|
|
|
+
|
|
|
+ private int mResId;
|
|
|
+ private String mUrl;
|
|
|
+ private float mVolume;
|
|
|
+ private boolean mLoop;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 播放res资源
|
|
|
+ */
|
|
|
+ public static final int PLAY_RES = 100;
|
|
|
+ /**
|
|
|
+ * 播放url资源
|
|
|
+ */
|
|
|
+ public static final int PLAY_URL = 101;
|
|
|
+ /**
|
|
|
+ * 停止
|
|
|
+ */
|
|
|
+ public static final int STOP = 102;
|
|
|
+ /**
|
|
|
+ * 释放
|
|
|
+ */
|
|
|
+ public static final int RELEASE = 103;
|
|
|
+
|
|
|
+
|
|
|
+ private MediaPlayHelper() {
|
|
|
+ createHandlerThread();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static MediaPlayHelper getInstance() {
|
|
|
+ if (sInstance == null) {
|
|
|
+ synchronized (MediaPlayHelper.class) {
|
|
|
+ if (sInstance == null) {
|
|
|
+ sInstance = new MediaPlayHelper();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sInstance;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void createHandlerThread() {
|
|
|
+ if (playHandlerThread == null) {
|
|
|
+ playHandlerThread = new HandlerThread("playHandlerThread");
|
|
|
+ playHandlerThread.start();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (playHandler == null) {
|
|
|
+ playHandler = new Handler(playHandlerThread.getLooper()) {
|
|
|
+ @Override
|
|
|
+ public void handleMessage(Message msg) {
|
|
|
+ switch (msg.what) {
|
|
|
+ case PLAY_RES:
|
|
|
+ playResMusicNow();
|
|
|
+ break;
|
|
|
+ case PLAY_URL:
|
|
|
+ playUrlMusicNow();
|
|
|
+ break;
|
|
|
+ case STOP:
|
|
|
+ stopMusicNow();
|
|
|
+ break;
|
|
|
+ case RELEASE:
|
|
|
+ releaseMediaNow();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void playResMusic(int id, float vol, boolean loop) {
|
|
|
+ mResId = id;
|
|
|
+ mVolume = vol;
|
|
|
+ mLoop = loop;
|
|
|
+ playHandler.sendEmptyMessage(PLAY_RES);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void playUrlMusic(String url, float vol, boolean loop) {
|
|
|
+ mUrl = url;
|
|
|
+ mVolume = vol;
|
|
|
+ mLoop = loop;
|
|
|
+ playHandler.sendEmptyMessage(PLAY_URL);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void stopMusic() {
|
|
|
+ playHandler.sendEmptyMessage(STOP);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void releaseMusic() {
|
|
|
+ playHandler.sendEmptyMessage(RELEASE);
|
|
|
+ }
|
|
|
+
|
|
|
+ //播放本地res音频资源
|
|
|
+ private void playResMusicNow() {
|
|
|
+ if (mediaPlayer != null) {
|
|
|
+ mediaPlayer.stop();
|
|
|
+ mediaPlayer.reset();
|
|
|
+ mediaPlayer.release();
|
|
|
+ }
|
|
|
+ mediaPlayer = MediaPlayer.create(BaseApplication.appContext, mResId);
|
|
|
+ try {
|
|
|
+ mediaPlayer.setLooping(mLoop);
|
|
|
+ mediaPlayer.setVolume(mVolume, mVolume);
|
|
|
+ mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
|
|
+ mediaPlayer.start();
|
|
|
+ mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
|
|
|
+ @Override
|
|
|
+ public void onCompletion(MediaPlayer player) {
|
|
|
+ //playMusicComplete();
|
|
|
+ //stopMusicNow();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
|
|
|
+ @Override
|
|
|
+ public boolean onError(MediaPlayer player, int what, int extra) {
|
|
|
+ //playMusicError();
|
|
|
+ stopMusicNow();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } catch (Exception e) {
|
|
|
+ //playMusicError();
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //播放远程或本地存储音频资源
|
|
|
+ private void playUrlMusicNow() {
|
|
|
+ if (mediaPlayer != null) {
|
|
|
+ mediaPlayer.stop();
|
|
|
+ mediaPlayer.reset();
|
|
|
+ mediaPlayer.release();
|
|
|
+ }
|
|
|
+ mediaPlayer = new MediaPlayer();
|
|
|
+ try {
|
|
|
+ mediaPlayer.reset();
|
|
|
+ mediaPlayer.setDataSource(mUrl);
|
|
|
+ mediaPlayer.setLooping(mLoop);
|
|
|
+ mediaPlayer.setVolume(mVolume, mVolume);
|
|
|
+ mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
|
|
|
+ mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
|
|
|
+ @Override
|
|
|
+ public void onPrepared(MediaPlayer player) {
|
|
|
+ if (mediaPlayer != null) {
|
|
|
+ mediaPlayer.start();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
|
|
|
+ @Override
|
|
|
+ public void onCompletion(MediaPlayer player) {
|
|
|
+ //playMusicComplete();
|
|
|
+ //stopMusicNow();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
|
|
|
+ @Override
|
|
|
+ public boolean onError(MediaPlayer player, int what, int extra) {
|
|
|
+ //playMusicError();
|
|
|
+ stopMusicNow();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ mediaPlayer.prepareAsync();
|
|
|
+ } catch (Exception e) {
|
|
|
+ //playMusicError();
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void stopMusicNow() {
|
|
|
+ if (mediaPlayer != null) {
|
|
|
+ mediaPlayer.setOnPreparedListener(null);
|
|
|
+ mediaPlayer.setOnCompletionListener(null);
|
|
|
+ try {
|
|
|
+ //if (mediaPlayer.isPlaying()) {
|
|
|
+ mediaPlayer.stop();
|
|
|
+ mediaPlayer.reset();
|
|
|
+ mediaPlayer.release();
|
|
|
+ //}
|
|
|
+ } catch (IllegalStateException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mediaPlayer = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void releaseMediaNow() {
|
|
|
+ if (mediaPlayer != null) {
|
|
|
+ mediaPlayer.setOnPreparedListener(null);
|
|
|
+ mediaPlayer.setOnCompletionListener(null);
|
|
|
+ try {
|
|
|
+ mediaPlayer.stop();
|
|
|
+ mediaPlayer.reset();
|
|
|
+ mediaPlayer.release();
|
|
|
+ } catch (IllegalStateException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mediaPlayer = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean isMediaPlaying() {
|
|
|
+ if (mediaPlayer != null) {
|
|
|
+ return mediaPlayer.isPlaying();
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|