Music Streaming dengan MediaPlayer di Android

Kadang kita membutuhkan music yang distreaming langsung dari internet dengan alasan lebih banyak lagu dan mengurangi ukuran APK dengan tidak memaketkan file lagu ke dalam APK. Berikut salah satu teknik untuk streaming audio (lagu) dari internet menggunakan Android:

private MediaPlayer mediaPlayer;
private ToggleButton toggleOnoff;

private String audioURL;
boolean initialAudio = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   audioURL = "https://ia801005.us.archive.org/17/items/iwan_fals_album_emas/04___KUMENANTI_SEORANG_KEKA.MP3";
   mediaPlayer = new MediaPlayer();
   mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
   mediaPlayer.setLooping(true);
   mediaPlayer.setVolume(1, 1);

   if (initialAudio) {
      new PlayerTask().execute(audioURL);
   } else {
      if (!mediaPlayer.isPlaying()) {
         mediaPlayer.start();
      }
   }

   toggleOnoff = (ToggleButton) findViewById(R.id.toggleOnoff);
   toggleOnoff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
      
      @Override
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if (isChecked) {
             if (!mediaPlayer.isPlaying()) {
                mediaPlayer.start();
             }
         } else {
            if (mediaPlayer.isPlaying()) {
               mediaPlayer.pause();
            }
         }
      }
   });

}

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

   if (mediaPlayer != null) {
      mediaPlayer.reset();
      mediaPlayer.release();
      mediaPlayer = null;
   }
}


// ==============================================================
class PlayerTask extends AsyncTask<string, boolean, void> {
   private ProgressDialog progress = ProgressDialog.show(MainActivity.this, null,
       getString(R.string.buffering), true);

   @Override
   protected Boolean doInBackground(String... params) {
      Boolean prepared;

      try {
         mediaPlayer.setDataSource(params[0]);
         mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
               initialAudio = true;
               mediaPlayer.stop();
               mediaPlayer.reset();
           }
        });

        mediaPlayer.prepare();
        prepared = true;
     } catch (Exception e) {
        prepared = false;
        e.printStackTrace();
     }

      return prepared;
   }

   @Override
   protected void onPostExecute(Boolean result) {
      super.onPostExecute(result);
      if (result) {
         mediaPlayer.start();
         initialAudio = false;
         toggleOnoff.setChecked(true);
      }

      if (progress.isShowing()) {
         progress.cancel();
      }
   }
}

Jangan lupa tambahkan <uses-permission android:name="android.permission.INTERNET"/> pada AndroidManifest.xml untuk bisa akses internet.
Source code project lengkapnya bisa didownload di Github Andevid.
Referensi Android Developer dan Stackoverflow.com. Semoga bermanfaat.
 
Level: Beginner

No comments:

Post a Comment