Service ব্যবহার করে ব্যাকগ্রাউন্ড মিউজিক প্লেব্যাক
এই টিউটোরিয়ালটি দেখাবে কীভাবে একটি Service-এ MediaPlayer ব্যবহার করে অ্যাপ বন্ধ থাকলেও বা ব্যাকগ্রাউন্ডে যাওয়ায়ও মিউজিক বাজাতে হয়।
পদক্ষেপ ১: প্রজেক্ট তৈরি করুন
Android Studio-তে নতুন প্রজেক্ট শুরু করুন।
পদক্ষেপ ২: লেআউট XML (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="16dp">
<Button
android:id="@+id/btnPlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="PlayBackgroundSound"
android:text="Run Background Sound" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Playing Music in Background"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
পদক্ষেপ ৩: MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void PlayBackgroundSound(View view) {
Intent intent = new Intent(this, BackgroundSoundService.class);
startService(intent);
}
}
পদক্ষেপ ৪: Raw রিসোর্স ফোল্ডার
res/raw ফোল্ডার তৈরি করুন (New → Android Resource Directory → raw) এবং সেখানে আপনার অডিও ফাইল রাখুন (যেমন: `sound.mp3` বা `audio.mp3`)。
পদক্ষেপ ৫: BackgroundSoundService.java
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class BackgroundSoundService extends Service {
private MediaPlayer mediaPlayer;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null; // বাউন্ড সার্ভিস নয়
}
@Override
public void onCreate() {
super.onCreate();
mediaPlayer = MediaPlayer.create(this, R.raw.sound);
mediaPlayer.setLooping(true); // লুপিং সক্ষম
mediaPlayer.setVolume(1.0f, 1.0f); // 0.0f to 1.0f
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
mediaPlayer.start();
Toast.makeText(this, "Playing music in background", Toast.LENGTH_SHORT).show();
}
return START_STICKY; // সিস্টেম কিল করলে রিস্টার্ট
}
@Override
public void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
}
পদক্ষেপ ৬: AndroidManifest.xml - সার্ভিস ডিক্লেয়ার
<application ...>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".BackgroundSoundService" />
</application>
গুরুত্বপূর্ণ উন্নতি ও সেরা অনুশীলন
- Foreground Service (API 26+): অ্যান্ড্রয়েড ৮+ তে ব্যাকগ্রাউন্ড সার্ভিস সীমাবদ্ধ। ফোরগ্রাউন্ড সার্ভিসে নোটিফিকেশন দেখাতে হয়।
- MediaSessionCompat: মিডিয়া কন্ট্রোল (হেডসেট বাটন, লক স্ক্রিন) সাপোর্টের জন্য।
- ExoPlayer: MediaPlayer-এর বদলে ExoPlayer ব্যবহার করুন (DASH, HLS, স্মুথ স্ট্রিমিং সাপোর্ট)।
- Audio Focus: AudioManager.requestAudioFocus() ব্যবহার করুন অন্যান্য অ্যাপের সাথে সমন্বয়ের জন্য।
- Wake Lock: ডিভাইস স্লিপ হলে মিউজিক বন্ধ না হয় তা নিশ্চিত করুন (PARTIAL_WAKE_LOCK)।
ফোরগ্রাউন্ড সার্ভিস উদাহরণ (API 26+)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
createNotificationChannel();
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Music Playing")
.setContentText("Song name")
.setSmallIcon(R.drawable.ic_music)
.build();
startForeground(1, notification);
mediaPlayer.start();
return START_STICKY;
}