Android MediaPlayer से म्यूजिक प्लेयर ऐप बनाना
यह उदाहरण दर्शाता है कि MediaPlayer क्लास का उपयोग करके प्ले, पॉज, फॉरवर्ड, बैकवर्ड और सीकबार प्रोग्रेस के साथ एक बेसिक ऑडियो प्लेयर कैसे बनाया जाए।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें।
चरण 2: रॉ ऑडियो फ़ाइल जोड़ें
res/raw/ फोल्डर बनाएं (नहीं है तो) और bohemian_rhapsody.mp3 जैसी ऑडियो फ़ाइल रखें।
चरण 3: लेआउट फ़ाइल (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="अब चल रहा: "
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/txtSongName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/textView"
android:layout_toEndOf="@id/textView"
android:textStyle="bold" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/btnPlay"
android:layout_marginBottom="16dp"
android:layout_toStartOf="@id/txtSongTime"
android:layout_toEndOf="@id/txtStartTime" />
<TextView
android:id="@+id/txtStartTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/seekBar"
android:text="0:00" />
<TextView
android:id="@+id/txtSongTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/seekBar"
android:layout_alignParentEnd="true"
android:text="0:00" />
<LinearLayout
android:id="@+id/controls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="44dp"
android:orientation="horizontal"
android:gravity="center">
<ImageButton
android:id="@+id/btnBackward"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:src="@android:drawable/ic_media_rew"
android:contentDescription="पीछे"/>
<ImageButton
android:id="@+id/btnPlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:src="@android:drawable/ic_media_play"
android:contentDescription="चलाएं"/>
<ImageButton
android:id="@+id/btnPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:src="@android:drawable/ic_media_pause"
android:contentDescription="रोकें"/>
<ImageButton
android:id="@+id/btnForward"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:src="@android:drawable/ic_media_ff"
android:contentDescription="आगे"/>
</LinearLayout>
</RelativeLayout>
चरण 4: MainActivity (src/MainActivity.java)
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
private ImageButton btnBackward, btnForward, btnPlay, btnPause;
private MediaPlayer mediaPlayer;
private TextView txtSongName, txtStartTime, txtSongTime;
private SeekBar seekBar;
private static final int FORWARD_TIME = 5000; // 5 सेकंड
private static final int BACKWARD_TIME = 5000; // 5 सेकंड
private Handler handler = new Handler();
private boolean isPlaying = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
setupMediaPlayer();
setupClickListeners();
}
private void initViews() {
btnBackward = findViewById(R.id.btnBackward);
btnForward = findViewById(R.id.btnForward);
btnPlay = findViewById(R.id.btnPlay);
btnPause = findViewById(R.id.btnPause);
txtSongName = findViewById(R.id.txtSongName);
txtStartTime = findViewById(R.id.txtStartTime);
txtSongTime = findViewById(R.id.txtSongTime);
seekBar = findViewById(R.id.seekBar);
}
private void setupMediaPlayer() {
txtSongName.setText("Bohemian Rhapsody");
mediaPlayer = MediaPlayer.create(this, R.raw.bohemian_rhapsody);
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mediaPlayer.seekTo(progress);
}
}
@Override public void onStartTrackingTouch(SeekBar seekBar) {}
@Override public void onStopTrackingTouch(SeekBar seekBar) {}
});
updateTotalTime();
}
private void setupClickListeners() {
btnPlay.setOnClickListener(v -> playAudio());
btnPause.setOnClickListener(v -> pauseAudio());
btnForward.setOnClickListener(v -> seekForward());
btnBackward.setOnClickListener(v -> seekBackward());
}
private void playAudio() {
if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
mediaPlayer.start();
isPlaying = true;
updateButtonStates();
startProgressUpdater();
Toast.makeText(this, "चल रहा है...", Toast.LENGTH_SHORT).show();
}
}
private void pauseAudio() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
isPlaying = false;
updateButtonStates();
handler.removeCallbacks(updateProgressRunnable);
Toast.makeText(this, "रोका गया", Toast.LENGTH_SHORT).show();
}
}
private void seekForward() {
if (mediaPlayer != null) {
int newPosition = mediaPlayer.getCurrentPosition() + FORWARD_TIME;
if (newPosition <= mediaPlayer.getDuration()) {
mediaPlayer.seekTo(newPosition);
} else {
Toast.makeText(this, "अंत तक पहुंच गए", Toast.LENGTH_SHORT).show();
}
}
}
private void seekBackward() {
if (mediaPlayer != null) {
int newPosition = mediaPlayer.getCurrentPosition() - BACKWARD_TIME;
if (newPosition >= 0) {
mediaPlayer.seekTo(newPosition);
} else {
Toast.makeText(this, "शुरुआत पर हैं", Toast.LENGTH_SHORT).show();
}
}
}
private void updateButtonStates() {
btnPlay.setEnabled(!isPlaying);
btnPause.setEnabled(isPlaying);
}
private void updateTotalTime() {
int duration = mediaPlayer.getDuration();
txtSongTime.setText(formatTime(duration));
}
private final Runnable updateProgressRunnable = new Runnable() {
@Override
public void run() {
if (mediaPlayer != null && isPlaying) {
int currentPosition = mediaPlayer.getCurrentPosition();
txtStartTime.setText(formatTime(currentPosition));
seekBar.setProgress(currentPosition);
handler.postDelayed(this, 100); // हर 100ms अपडेट
}
}
};
private void startProgressUpdater() {
handler.post(updateProgressRunnable);
}
private String formatTime(int millis) {
return String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) % 60);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
handler.removeCallbacks(updateProgressRunnable);
}
}
MediaPlayer लाइफसाइकल स्टेट्स

महत्वपूर्ण नोट्स
- release(): हमेशा
onDestroy()में कॉल करें - मीडिया संसाधन मुक्त करने के लिए - seekTo(): एसिंक्रोनस है, तुरंत पोजीशन नहीं बदलता
- prepareAsync(): बड़ी फ़ाइलों/स्ट्रीमिंग के लिए उपयोग करें
- WakeLock: बैकग्राउंड प्लेबैक के लिए
mediaPlayer.setWakeMode()उपयोग करें
चरण 5: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
</intent-filter>
</activity>
</application>
</manifest>
ऐप चलाएं
ऐप लॉन्च करें, प्ले दबाएं, सीकबार ड्रैग करें, फॉरवर्ड/बैकवर्ड बटन्स टेस्ट करें।



