Pertemuan 12

Multimedia &
Akses Hardware (Izin) 🎵

Mari buat aplikasimu bersuara! Belajar menggunakan MediaPlayer untuk memutar musik, dan memahami aturan ketat Android Runtime Permissions untuk mengakses hardware atau file di HP user.

1. MediaPlayer & Lokasi File

Untuk memutar file audio atau musik di Android, kita menggunakan class bawaan bernama MediaPlayer. Ada 3 fungsi utama yang wajib kamu kuasai: start(), pause(), dan stop().

Folder: res/raw

Jika kamu punya file MP3 (misal: lagu tema) yang menyatu permanen dengan aplikasimu, simpan file tersebut di folder res/raw.

MediaPlayer.create(this, R.raw.lagu_ku);

File External (Storage)

Jika kamu ingin memutar lagu MP3 milik user dari galeri/penyimpanan HP mereka, kamu harus menggunakan Uri dan wajib meminta izin terlebih dahulu!

mediaPlayer.setDataSource(this, uriLaguUser);

2. Aturan Ketat: Android Permissions

Sejak Android 6.0 (Marshmallow), Google sangat memperketat privasi user. Aplikasi tidak bisa lagi diam-diam mengakses kamera, lokasi, atau file di HP. Kita harus membagi izin menjadi dua jenis:

1. Normal Permissions

Izin yang tidak mengancam privasi user. Cukup daftarkan di AndroidManifest.xml, dan sistem akan langsung mengizinkannya.

  • Akses Internet (Internet)
  • Getar HP (Vibrate)
  • Status Jaringan (Network State)

2. Dangerous Permissions

Izin yang mengakses data sensitif. Selain didaftarkan di Manifest, kamu WAJIB memunculkan pop-up dialog kepada user saat aplikasi berjalan (Runtime Permission)!

  • Membaca File (READ_EXTERNAL_STORAGE)
  • Kamera (CAMERA) & Lokasi (ACCESS_FINE_LOCATION)

3. Simulator: Player + External Playlist

Uji coba aplikasi pemutar musik di bawah ini! Klik "Muat Lagu User", izinkan akses pop-up-nya, lalu pilih file `.mp3` sungguhan dari laptop/HP-mu. File yang kamu pilih akan ditambahkan ke Playlist layaknya aplikasi Android sungguhan!

Simulasi Permission

Uji coba skenario user menekan Allow (Izinkan) lalu memilih file .mp3 dari media penyimpanan lokal perangkatnya.

// Logcat Android...
D/App: Media Player Ready.
Now Playing
Playlist

Lagu Default (Lofi)

Aplikasi Internal

0:00 3:45

Daftar Putar

Toast

4. Bedah Kode: Intent File & Animasi!

Sesuai dengan Simulator di atas, ini adalah kode utuh yang siap dieksekusi di Android Studio! Kita akan menggunakan Intent ACTION_GET_CONTENT untuk menelusuri isi penyimpanan lokal, mengekstrak nama aslinya dengan Cursor, dan membiarkan user memilih banyak file .mp3 sekaligus.

AndroidManifest.xml

WAJIB! Tambahkan izin READ_EXTERNAL_STORAGE di luar tag <application> agar aplikasi diizinkan membaca file lagu dari galeri/memori HP user.

<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mediaplayer">

    <!-- 🚨 TAMBAHKAN BARIS INI UNTUK IZIN MEMBACA FILE DARI HP USER -->
    <uses-permission 
        android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.MyApp">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

5. Tugas Super: Music Player Pro!

Di "Bedah Kode" kita sudah membuat playlist menggunakan `Array` biasa. Sekarang, tantangannya adalah menggabungkan ilmu RecyclerView (Modul 7) dengan MediaPlayer (Modul 11)!

Misi Project Utama (RecyclerView Edition):

  1. Buat antarmuka (UI) yang memiliki area Player (Gambar Cover, Judul, & Tombol Play/Stop) di bagian atas, dan sebuah RecyclerView di bagian bawah.
  2. Buat tombol "Tambah Lagu" yang memanggil Intent.ACTION_GET_CONTENT (Pastikan kamu mendaftarkan izin Storage di Manifest!).
  3. Gunakan fungsi getFileName() yang sudah dipelajari di atas untuk mengambil nama asli lagunya, dan masukkan ke dalam ArrayList untuk RecyclerView!
  4. Syarat Mutlak: Jika user mengeklik salah satu baris judul lagu di dalam RecyclerView, lagu tersebut harus memutar (play) otomatis di Player atas!