package tc.com.nicemp3player; import android.content.Context; import android.database.Cursor; import android.media.MediaPlayer; import android.provider.MediaStore; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; /** * Created by thanh on 19-Jul-16. */ public class MediaManager { public static int STATE_IDLE = -1; public static int STATE_PLAYING = 1; public static int STATE_PAUSE = 2; public static int STATE_STOP = 3; public static int STATE_SEEKING = 4; private static final String TAG = "TAG"; // private Context mContext; private MediaPlayer mediaPlayer; private List listSong = new ArrayList<>(); private int mediaState; private int indexSong = 0; private OnPlayStartedListener listener; public void setIndexSong(int indexSong){ this.indexSong = indexSong; } public int getIndexSong(){ return indexSong; } public MediaManager(Context context){ // mContext = context; getListSong(context); mediaPlayer = new MediaPlayer(); mediaState = STATE_IDLE; mediaPlayer.setOnCompletionListener((MediaPlayer.OnCompletionListener)context); listener = (OnPlayStartedListener)context; } public List getSong(){ return listSong; } public void playOrPause(boolean isClickItemView){ if (mediaState == STATE_IDLE || mediaState == STATE_STOP||(mediaState==STATE_PLAYING&&isClickItemView)){ try { mediaPlayer.reset(); Song song = listSong.get(indexSong); mediaPlayer.setDataSource(song.getPath()); // mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepare(); // mediaPlayer.setLooping(false); mediaPlayer.start(); listener.onMediaStarted(song.getName(),song.getArtist(),song.getTime(),mediaPlayer.getDuration()); mediaState = STATE_PLAYING; } catch (IOException e) { e.printStackTrace(); } }else if (mediaState == STATE_PLAYING){ mediaPlayer.pause(); mediaState = STATE_PAUSE; } else if (mediaState==STATE_PAUSE) { mediaPlayer.start(); mediaState = STATE_PLAYING; } } public void next(){ if (indexSong0){ indexSong--; }else { indexSong = listSong.size()-1; } if (mediaState==STATE_PLAYING){ playOrPause(true); }else{ Song song = listSong.get(indexSong); listener.onMediaStarted(song.getName(), song.getArtist(), song.getTime(), mediaPlayer.getDuration()); mediaState = STATE_STOP; } } public void stop(){ if (mediaState==STATE_IDLE){ return; } mediaPlayer.stop(); Song song = listSong.get(indexSong); listener.onMediaStarted(song.getName(), song.getArtist(), song.getTime(), mediaPlayer.getDuration()); mediaState = STATE_STOP; } public void seekTo(int progress){ mediaPlayer.seekTo(progress); } private void getListSong(Context context){ if (listSong.size()>0){ return; } String projection[] = new String[]{ //name MediaStore.MediaColumns.TITLE, //file name MediaStore.MediaColumns.DISPLAY_NAME, //path MediaStore.MediaColumns.DATA, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.DURATION }; Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, null, null); if (cursor == null){ return; }else { cursor.moveToFirst(); while (cursor.isAfterLast()==false){ String name = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.TITLE)); String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)); String path = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)); String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); int duration = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); listSong.add(new Song(name, fileName, path, artist, album, duration)); cursor.moveToNext(); } cursor.close(); } } public int getCurrentTime() { if (mediaState==STATE_PLAYING){ return mediaPlayer.getCurrentPosition(); } return -1; } public int getCurrentPosition(){ return mediaPlayer.getCurrentPosition(); } public interface OnPlayStartedListener{ public void onMediaStarted(String nameSong,String singer,String totalTime, int totalTimeInt); } }