cara buat pemutar musik dari assset RAW
javasetid.com - Tentu saja memutar musik sudah hal yang tidak lagi sulit, era sekarang ini cukup satu klik saja sudah bisa dengarnya, kalau lagi tidak ada paket data kita bisa putar musik hasil dari yang kita download, walaupun demikian buat sobat yang sedang membuat projek pemutar musik offline yang dapat di kases tanpa koneksi internet sekalipun dapat mempraktekkan nya karena kali ini javasetid.com akan kupas tuntas cara membuat cara buat pemutar musik dari assset RAW.
Keuntungan aplikasi ini
1. dapat memutar playlist yang diinginkan
2. Dapat diputar play tanpa koneksi internet
3. bebas kustom lagu yang diinginkan
Kekurangan Aplikasi ini
1. Ukuran Aplikasi yang relatif besar
2. Harus menyesuaikan dengan tipe android yang digunakan
3. Perubahan musik playlis harus manual karean menggunakan fitur asset RAW
Oke langsung saja kita mulai pembuatan projek, pertamna silahkan buat new projek empty activity, maka akan muncul jendela baru, langkah selanjutnya kita fokus ke bagian Android Manifest, silahkan ketikan permission sebagai berikut.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
setelah application ketikan kode berikut:
<service android:name=".MusicService" />
bagian android sudah seelesai kita lanjut kebagian res-nya, pada bagian ini silahkan tambah folder raw dengan klik res lalu klik kanan pilih new + pilih + folder dan pilih Res FOlder
penambahan res folder raw pada projek |
proses rename nama file mp3 yang dibuat |
Step berikutnya kita masuk kebagian layoutnya, yang berfunsgi untuk membntuk aplikasi dalam hal ini tampilan bagian dalam aplikasi ketika digunakan, untuk layout sendiri kurang lebih seperti berikut ini:
bagian antar muka projek musik offline music pro |
Nah, tampilan diatas adalah tampilan sederhana yang bisa sobat coba terapkan pada projek android studio sobat, untuk kodingan layoutnya seperti berikut ini ya:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/songTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Song Title"
android:textColor="@color/black"
android:textSize="24sp" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:outlineSpotShadowColor="@color/black" />
<TextView
android:id="@+id/songDuration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0:00 / 0:00"
android:textColor="@color/black" />
<Button
android:id="@+id/btnPrevious"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Previous" />
<Button
android:id="@+id/btnPlayPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Play" />
<Button
android:id="@+id/btnNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next" />
<Button
android:id="@+id/btnRepeat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Repeat" />
<ListView
android:id="@+id/listViewSongs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/colorPrimaryDarkCyan" />
<com.google.android.gms.ads.AdView
android:id="@+id/ad_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="50dp"
android:layout_marginEnd="50dp"
ads:adSize="LARGE_BANNER"
ads:adUnitId="@string/banner_ad_unit_id" />
</LinearLayout>
package com.musikpro;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.musikpro.databinding.ActivityMainBinding;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
// Remove the below line after defining your own ad unit ID.
private static final String TOAST_TEXT = " "
+ "To show live ads, replace the ad unit ID in res/values/strings.xml with your own ad unit ID.";
private static final String TAG = "MainActivity2";
private ActivityMainBinding binding;
private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private TextView songTitle, songDuration;
private Button btnPlayPause, btnPrevious, btnNext, btnRepeat;
private ListView listViewSongs;
private int currentSongIndex = 0;
private ArrayList<Integer> songList = new ArrayList<>();
private boolean isRepeating = false;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
songTitle = findViewById(R.id.songTitle);
songDuration = findViewById(R.id.songDuration);
seekBar = findViewById(R.id.seekBar);
btnPlayPause = findViewById(R.id.btnPlayPause);
btnPrevious = findViewById(R.id.btnPrevious);
btnNext = findViewById(R.id.btnNext);
btnRepeat = findViewById(R.id.btnRepeat);
listViewSongs = findViewById(R.id.listViewSongs);
// Mengisi daftar lagu
songList.add(R.raw.cigaret_after_sex_k); // Tambahkan lagu yang ada di res/raw
songList.add(R.raw.cigarettes_after_sex_apocalypse);
songList.add(R.raw.cigaret_after_sex_cry);
songList.add(R.raw.cigaret_after_sex_so_sweet);
songList.add(R.raw.usher_daddy_home);
songList.add(R.raw.akon_i_wanna_love_you);
songList.add(R.raw.linkin_park_crawling);
songList.add(R.raw.zayn_dusk_till_dawn);
songList.add(R.raw.shawn_mendes_senorita);
songList.add(R.raw.camila_cabelo_havana);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, new String[]{"01. cigaret_after_sex_k", "02. cigarettes_after_sex_apocalypse",
"03. cigaret_after_sex_cry.mp3","04.cigaret_after_sex_so_sweet","05. usher_daddy_home","06. akon_i_wanna_love_you","07. linking_park_crawling","08. zayn_dusk_till_dawn",
"09. shawn_mendes_senorita","10.camila_cabelo_havana"});
listViewSongs.setAdapter(adapter);
listViewSongs.setOnItemClickListener((parent, view, position, id) -> {
currentSongIndex = position;
playSong();
});
btnPlayPause.setOnClickListener(v -> togglePlayPause());
btnPrevious.setOnClickListener(v -> playPrevious());
btnNext.setOnClickListener(v -> playNext());
btnRepeat.setOnClickListener(v -> toggleRepeat());
// Initialize MediaPlayer
playSong();
// Update SeekBar and Duration
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser && mediaPlayer != null) {
mediaPlayer.seekTo(progress * 1000);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
}
private void playSong() {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer = MediaPlayer.create(this, songList.get(currentSongIndex));
mediaPlayer.start();
songTitle.setText("Playing: Musik " + (currentSongIndex + 1));
seekBar.setMax(mediaPlayer.getDuration() / 1000);
updateSeekBar();
mediaPlayer.setOnCompletionListener(mp -> {
if (isRepeating) {
playSong();
} else {
playNext();
}
});
// Load an ad into the AdMob banner view.
AdView adView = binding.adView;
AdRequest adRequest = new AdRequest.Builder()
.setRequestAgent("android_studio:ad_template").build();
adView.loadAd(adRequest);
// Toasts the test ad message on the screen. Remove this after defining your own ad unit ID.
Toast.makeText(this, TOAST_TEXT, Toast.LENGTH_LONG).show();
}
private void updateSeekBar() {
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
if (mediaPlayer != null) {
int currentPos = mediaPlayer.getCurrentPosition() / 1000;
seekBar.setProgress(currentPos);
songDuration.setText(String.format("%02d:%02d / %02d:%02d",
currentPos / 60, currentPos % 60,
mediaPlayer.getDuration() / 60000,
(mediaPlayer.getDuration() / 1000) % 60));
}
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(runnable, 1000);
}
private void togglePlayPause() {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
btnPlayPause.setText("Play");
} else {
mediaPlayer.start();
btnPlayPause.setText("Pause");
}
}
private void playPrevious() {
if (currentSongIndex > 0) {
currentSongIndex--;
} else {
currentSongIndex = songList.size() - 1;
}
playSong();
}
private void playNext() {
currentSongIndex++;
if (currentSongIndex >= songList.size()) {
currentSongIndex = 0;
}
playSong();
}
private void toggleRepeat() {
isRepeating = !isRepeating;
btnRepeat.setText(isRepeating ? "Repeat On" : "Repeat Off");
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
}
package com.musikpro;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class MusicService extends Service {
private MediaPlayer mediaPlayer;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this, R.raw.shikilaguku); // mulai dari lagu pertama
mediaPlayer.setLooping(true);
mediaPlayer.start();
}
return START_STICKY;
}
@Override
public void onDestroy() {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
3. SongAdapter :
package com.musikpro;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class SongAdapter extends ArrayAdapter<Integer> {
public SongAdapter(Context context, ArrayList<Integer> songList) {
super(context, 0, songList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
TextView songTitle = convertView.findViewById(android.R.id.text1);
songTitle.setText("Song " + (position + 1)); // Menampilkan nomor lagu
return convertView;
}
}
Karena projek kita ini menggunakan iklan admob maka kita harus menambahkan satu folder menu lagi pada resnya, seperti berikut ini:
silahkan pilih android rsource directory, lalu pilih menu dan oke tampak kode setting pada menu yang telah di tambahkan
Nah setelah semuanya, kamu dapat mencoba menjalankan aplikasi pemutar musik tersebut, silahkan build apk untuk menjadikan projek aplikasi, installah pada android sobat dan mulai jalankan, jika berhasil akan muncul file musik, iklan serta durasinya, ketika dimainkan, untuk jelasnya sobat bisa lihat pada prakteknya langsung di video berikut ini:
KESIMPULAN:
Pembuatan aplikasi menggunakan android studio dapat dilakukan dengan mudah , yng terpenting adalah memahami tata letak setiap kode yang ada, semoga artikel ini menambah wawasan buat kita semua, sampai jumpa pada artikel berikutnya. BUTUH SC nya ? bisa DM ke dipa official wawa sudah tersedia pada deskripsi.
Posting Komentar