Advertisement
aftab514

DjPlink MainActivity

Jun 5th, 2016
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.93 KB | None | 0 0
  1. public class MediaService extends Service implements MediaPlayer.OnBufferingUpdateListener,
  2.                                                      MediaPlayer.OnCompletionListener,
  3.                                                      MediaPlayer.OnInfoListener, MediaPlayer
  4.                                                              .OnPreparedListener, MediaPlayer
  5.                                                              .OnSeekCompleteListener {
  6.  
  7.     DataListener mCallback;
  8.     private final String TAG = "MediaService";
  9.     IBinder binder = new MyBinder();
  10.     boolean allowRebind, trackEnded = false;
  11.  
  12.     private List<Track> tracks;
  13.     MediaPlayer mPlayer;
  14.     int totalTracks, curTrack;
  15.  
  16.     public MediaService() {
  17.         Log.d(TAG, "Constructor called");
  18.     }
  19.  
  20.     @Override
  21.     public void onCreate() {
  22.         super.onCreate();
  23.         Log.d(TAG, "onCreate");
  24.         new TracksLoader().execute();
  25.         mPlayer = new MediaPlayer();
  26.         mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  27.  
  28.         mPlayer.setOnBufferingUpdateListener(this);
  29.         mPlayer.setOnCompletionListener(this);
  30.         mPlayer.setOnInfoListener(this);
  31.         mPlayer.setOnPreparedListener(this);
  32.         mPlayer.setOnSeekCompleteListener(this);
  33.     }
  34.  
  35.     @Override
  36.     public int onStartCommand(Intent intent, int flags, int startId) {
  37.         Log.d(TAG, "onStartCommand");
  38.         return START_STICKY;
  39.     }
  40.  
  41.     @Nullable
  42.     @Override
  43.     public IBinder onBind(Intent intent) {
  44.         bindCount++;
  45.         Log.d(TAG, "onBind" + bindCount);
  46.         return binder;
  47.     }
  48.  
  49.     @Override
  50.     public void onRebind(Intent intent) {
  51.         Log.d(TAG, "onRebind");
  52.         super.onRebind(intent);
  53.     }
  54.  
  55.     private int bindCount = 0;
  56.     @Override
  57.     public boolean onUnbind(Intent intent) {
  58.         --bindCount;
  59.         Log.d(TAG, "onUnbind" + bindCount);
  60.         if(bindCount == 0 && !isPlaying())
  61.             onDestroy();
  62.         return allowRebind;
  63.     }
  64.  
  65.     @Override
  66.     public void onDestroy() {
  67.         super.onDestroy();
  68.         Log.d(TAG, "onDestroy");
  69.         mPlayer.release();
  70.         mPlayer = null;
  71.         mCallback = null;
  72.     }
  73.  
  74.     @Override
  75.     public void onBufferingUpdate(MediaPlayer mp, int percent) {
  76.         if (mCallback != null)
  77.             mCallback.OnBuffered(mp, percent);
  78.         else
  79.             Log.d(TAG, "mCallback = null");
  80.     }
  81.  
  82.     @Override
  83.     public void onCompletion(MediaPlayer mp) {
  84.         Log.d(TAG, "onCompletion");
  85.         trackEnded = true;
  86.         playNextTrack();
  87.     }
  88.  
  89.     @Override
  90.     public boolean onInfo(MediaPlayer mp, int what, int extra) {
  91.         Log.d(TAG, "onInfo");
  92.         return false;
  93.     }
  94.  
  95.     @Override
  96.     public void onPrepared(MediaPlayer mp) {
  97.         Log.d(TAG, "onPrepared");
  98.         mp.start();
  99.     }
  100.  
  101.     @Override
  102.     public void onSeekComplete(MediaPlayer mp) {
  103.         Log.d(TAG, "onSeekComplete");
  104.     }
  105.  
  106.     public void seekTo(int position) {
  107.         mPlayer.seekTo(position);
  108.     }
  109.  
  110.     public boolean isPlaying() {
  111.         return mPlayer != null && mPlayer.isPlaying();
  112.     }
  113.  
  114.     public void setCallback(DataListener mCallback){
  115.         this.mCallback = mCallback;
  116.     }
  117.     public void play(int curTrack) {
  118.         Log.d(TAG, "play");
  119.         if (mPlayer.isPlaying()) {
  120.             mPlayer.stop();
  121.         }
  122.         mPlayer.reset();
  123.         try {
  124.             mPlayer.setDataSource(getTrackUrl(curTrack));
  125.             mPlayer.prepareAsync();
  126.             this.curTrack = curTrack;
  127.             mCallback.onPlay(tracks.get(curTrack));
  128.         } catch (IOException e) {
  129.             e.printStackTrace();
  130.         }
  131.     }
  132.  
  133.     public void playPreviousTrack() {
  134.         Log.d(TAG, "playPreviousTrack");
  135.         if (mPlayer.isPlaying()) {
  136.             if (curTrack == 0) {
  137.                 play(totalTracks - 1);
  138.             } else {
  139.                 play(curTrack - 1);
  140.             }
  141.         }
  142.     }
  143.  
  144.     public void playNextTrack() {
  145.         Log.d(TAG, "playNextTrack");
  146.         if (mPlayer.isPlaying() || trackEnded) {
  147.             trackEnded = false;
  148.             if (curTrack == tracks.size())
  149.                 play(0);
  150.             else
  151.                 play(curTrack + 1);
  152.         }
  153.     }
  154.  
  155.  
  156.  
  157.     public void pause() {
  158.         Log.d(TAG, "pause");
  159.         mPlayer.pause();
  160.     }
  161.  
  162.     public void resume() {
  163.         Log.d(TAG, "resume");
  164.         mPlayer.start();
  165.     }
  166.  
  167.     public void stop() {
  168.         Log.d(TAG, "stop");
  169.         if (mPlayer.isPlaying())
  170.             mPlayer.stop();
  171.         mPlayer.reset();
  172.     }
  173.  
  174.     private String getTrackUrl(int position) {
  175.         Log.d(TAG, "getTrackUrl");
  176.         return (tracks.get(position).getStream_url() + "?client_id=" + ConnectionUtils.CLIENT_ID);
  177.     }
  178.  
  179.     public void togglePlay(ImageButton bt) {
  180.         if (mPlayer.isPlaying()) {
  181.             mPlayer.pause();
  182.         } else {
  183.             mPlayer.start();
  184.             bt.setImageResource(R.drawable.ic_pause);
  185.         }
  186.     }
  187.  
  188.     public class MyBinder extends Binder {
  189.  
  190.         MediaService getService() {
  191.             Log.d(TAG, "MyBinder.getService");
  192.             return MediaService.this;
  193.         }
  194.     }
  195.  
  196.     private class TracksLoader extends AsyncTask<Void, Void, Track[]> {
  197.  
  198.         @Override
  199.         protected Track[] doInBackground(Void... params) {
  200.             Log.d(TAG, "TracksLoader.doInBg");
  201.             Track[] tracks = null;
  202.             DatabaseAdapter db = new DatabaseAdapter();
  203.             db.open(true);
  204.             try {
  205.                 tracks = db.getTracks();
  206.             } finally {
  207.                 db.close();
  208.             }
  209.             return tracks;
  210.         }
  211.  
  212.         @Override
  213.         protected void onPostExecute(Track[] newTracks) {
  214.             super.onPostExecute(newTracks);
  215.             Log.d(TAG, "TracksLoader.onPost");
  216.             tracks = Arrays.asList(newTracks);
  217.             totalTracks = newTracks.length;
  218.         }
  219.     }
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement