top of page
Search

Modul 10 - Media Player

  • Writer: Reza Prihandi
    Reza Prihandi
  • Jun 20, 2021
  • 3 min read

Updated: Jun 26, 2021

Framework multimedia Android menyertakan dukungan untuk memutar berbagai jenis media umum agar Anda dapat mengintegrasikan audio, video, dan gambar dengan mudah ke dalam aplikasi Anda. Anda dapat memutar audio atau video dari file media yang disimpan dalam resource aplikasi (resource mentah), dari file mandiri dalam sistem file, atau dari streaming data yang masuk melalui koneksi jaringan, semuanya menggunakan MediaPlayer API.

Class berikut digunakan untuk memutar suara dan video dalam framework Android :

  • MediaPlayer Class ini adalah API utama untuk memutar suara dan video.

  • AudioManager Class ini mengelola sumber audio dan output audio di perangkat.

pastikan manifes memiliki deklarasi yang sesuai untuk mengizinkan penggunaan fitur terkait.

  1. Izin Internet – Jika Anda menggunakan MediaPlayer untuk melakukan streaming konten berbasis jaringan, aplikasi Anda harus meminta akses jaringan. <uses-permission android:name=”android.permission.INTERNET” />

  2. Izin Penguncian Layar Saat Aktif – Jika aplikasi pemutar Anda mengharuskan layar tetap menyala atau mengharuskan prosesor tetap bekerja, atau menggunakan metode MediaPlayer.setScreenOnWhilePlaying() atau MediaPlayer. setWakeMode() , Anda harus meminta izin ini.

<uses-permission android:name=”android.permission.WAKE_LOCK” />


Salah satu komponen terpenting framework media adalah class MediaPlayer. Objek class ini dapat mengambil, mendekode, serta memutar audio dan video dengan sedikit penyiapan. Class ini pendukung beberapa sumber media yang berbeda, seperti: Resource Lokal , URI internal (seperti yang mungkin Anda peroleh dari Content Resolver) , & URL eksternal (streaming).

Untuk daftar format media yang didukung Android, lihat halaman Format Media yang Didukung. Berikut contoh cara memutar audio yang tersedia sebagai resource mentah lokal (disimpan dalam direktori res/raw/ aplikasi Kalian) :


Java

MediaPlayer mediaPlayer = MediaPlayer.create(context,R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you

Dalam hal ini, resource “mentah” adalah file yang tidak akan diuraikan oleh sistem dengan cara khusus apa pun. Namun, konten resource ini tidak boleh berupa audio mentah. Konten ini harus berupa file media yang dienkode dan diformat dengan benar dalam salah satu format yang didukung.

Membuat App MusicPlayer Menggunakan API MediaPlayer


Pertama jalankan aplikasi IDE Android Studio dan buat projek baru.

Siapkan sebuah file suara/musik dengan forma file .mp3 dan file gambar apa saja bebas / sesuaikan gambar dengan judul musiknya dengan jenis file .png/.jpg seperti gambar di bawah ini.

ree

Buat sebuah direktori/folder engan nama raw di dalam folder ../res/raw dengan cara klik kanan pada folder res lalu pilih New – Directory seperti gambar di bawah ini.

ree

Copy file music.mp3 tadi yang sudah kita siapkan pada windows explorer lalu Paste kedalam folder ../raw directory yang sudah kita buat tadi.


Lalu Copy file gambar.png/.jpg tadi yang sudah kita siapkan pada windows explorer lalu Paste kedalam folder ../res/drawable.


Selanjutnya ketikan kode program / script activity_main.xml seperti script di bawah ini.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="#00FFFF"
    android:orientation="vertical"
    android:padding="20dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/songName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Judul Lagu"
        android:textColor="#ffffff"/>
    <ImageView
        android:id="@+id/mp3Icon"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_margin="30dp"
        android:background="#ffffff"
        android:padding="30dp"
        android:src="@drawable/koikimo"/>
    <TextView
        android:id="@+id/songDuration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Durasi Lagu"
        android:textColor="#ffffff"/>
    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="30dp"
        android:gravity="center_horizontal">
        <ImageButton
            android:id="@+id/btn_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="backforward"
            android:src="@android:drawable/ic_media_rew"/>
        <ImageButton
            android:id="@+id/btn_pause"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="pause"
            android:src="@android:drawable/ic_media_pause"/>
        <ImageButton
            android:id="@+id/btn_play"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="play"
            android:src="@android:drawable/ic_media_play"/>
        <ImageButton
            android:id="@+id/forward"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="forward"
            android:src="@android:drawable/ic_media_ff"/>
    </LinearLayout>
</LinearLayout>

Setelah itu Buka dan ubah script MainActivity.java menjadi seperti script di bawah ini. Jika ingin meng-copy paste code dibawah ini, pastikan copy dan paste mulai dari code public class MainActivity extends AppCompatActivity

public class MainActivity extends AppCompatActivity {
    private MediaPlayer mediaPlayer;
    private TextView songName, songDuration;
    private SeekBar seekBar;
    private double timeStart = 0, finalTime = 0;
    private int forwardTime = 20000, backwardTime = 20000;
    private Handler durationHandler = new Handler();
    private boolean swtch = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        songName = findViewById(R.id.songName);
        songDuration = findViewById(R.id.songDuration);
        mediaPlayer = MediaPlayer.create(this, R.raw.music);

        MediaMetadataRetriever meta = new MediaMetadataRetriever();

        final AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.music);
        meta.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());

        String music_duration = meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        finalTime = Long.parseLong(music_duration);

        Log.v("musicDuration", "Duration : " + music_duration);

        seekBar = findViewById(R.id.seekBar);
        songName.setText("Koikimo.mp3");
        seekBar.setMax((int) finalTime);
        seekBar.setOnSeekBarChangeListener(new yourListener());
        seekBar.setClickable(false);
    }

    private class yourListener implements SeekBar.OnSeekBarChangeListener {
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (swtch) {
                mediaPlayer.seekTo(progress);
            }
        }

        public void onStartTrackingTouch(SeekBar seekBar) {
            swtch = true;
        }

        public void onStopTrackingTouch(SeekBar seekBar) {
            swtch = false;
        }
    }

    private Runnable updateSeekBarTime = new Runnable() {
        @Override
        public void run() {
            timeStart = mediaPlayer.getCurrentPosition();
            seekBar.setProgress((int) timeStart);
            double timeRemaining = finalTime - timeStart;
            songDuration.setText(String.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining),
                    TimeUnit.MILLISECONDS.toSeconds((long) timeRemaining) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));
            durationHandler.postDelayed(this, 1000);
        }
    };
    public void play(View view){
        mediaPlayer.start();
        timeStart = mediaPlayer.getCurrentPosition();
        seekBar.setProgress((int) timeStart);
        durationHandler.postDelayed(updateSeekBarTime, 100);
    }
    public void pause (View view){
        mediaPlayer.pause();
    }
    public void forward(View view){
        timeStart = timeStart + forwardTime;
        mediaPlayer.seekTo((int) timeStart);
    }
    public void backforward(View view){
        timeStart = timeStart - backwardTime;
        mediaPlayer.seekTo((int) timeStart);
    }
}

Lalu coba jalankan menggunakan emulator yang tersedia di Android Studio Anda, maka akan tampil seperti gabar dibawah ini.

ree


 
 
 

Comentarios


©2021 by MyBlog. Proudly created with Wix.com

bottom of page