AlarmManager ব্যবহার করে সময় নির্ধারিত টাস্ক শিডিউল করুন
এই উদাহরণটি দেখায় কিভাবে AlarmManager, PendingIntent, এবং BroadcastReceiver ব্যবহার করে একটি নির্দিষ্ট সময়ের পর অ্যালার্ম বা টাস্ক ট্রিগার করা যায়।
ধাপ ১: প্রজেক্ট তৈরি
ধাপ ২: লেআউট
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="103dp" />
<EditText
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:ems="10" />
</RelativeLayout>
ধাপ ৩: MainActivity.java
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = findViewById(R.id.button);
start.setOnClickListener(v -> startAlert());
}
public void startAlert() {
EditText text = findViewById(R.id.time);
int i = Integer.parseInt(text.getText().toString());
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent,
PendingIntent.FLAG_IMMUTABLE // API 23+ এ বাধ্যতামূলক
);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + (i * 1000),
pendingIntent);
Toast.makeText(this, "Alarm set in " + i + " seconds", Toast.LENGTH_LONG).show();
}
}
ধাপ ৪: BroadcastReceiver ক্লাস
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.widget.Toast;
public class MyBroadcastReceiver extends BroadcastReceiver {
MediaPlayer mp;
@Override
public void onReceive(Context context, Intent intent) {
mp = MediaPlayer.create(context, R.raw.alarm);
mp.start();
Toast.makeText(context, "Alarm....", Toast.LENGTH_LONG).show();
}
}
ধাপ ৫: ম্যানিফেস্টে রিসিভার ডিক্লেয়ার
<receiver android:name=".MyBroadcastReceiver" android:exported="false"></receiver> // API 31+ এ exported="false" দিন (সিকিউরিটি)
ধাপ ৬: রিংটোন ফাইল
res/raw/alarm.mp3 ফাইল রাখুন (raw ফোল্ডার তৈরি: New → Android Resource Directory → raw)।
AlarmManager টাইপ সমূহ
| টাইপ | বিবরণ | ডুজ মোডে কাজ করে? |
|---|---|---|
| RTC_WAKEUP | রিয়েল টাইম (System.currentTimeMillis), ডিভাইস ওয়েক আপ করে | হ্যাঁ |
| RTC | রিয়েল টাইম, ডিভাইস ওয়েক আপ করে না | না |
| ELAPSED_REALTIME_WAKEUP | বুট থেকে बीত زمان (SystemClock.elapsedRealtime), ওয়েক আপ | হ্যাঁ |
| ELAPSED_REALTIME | বুট থেকে বিত زمان, ওয়েক আপ করে না | না |
⚠️ গুরুত্বপূর্ণ সীমাবদ্ধতা (Android 6.0+ Doze Mode)
setExact()/setExactAndAllowWhileIdle()- точный समय, но ограниченsetWindow()- উইন্ডো দিয়ে ব্যাচিং (ব্যাটারি বাঁচায়)setAlarmClock()- লকস্ক্রিনে অ্যালার্ম আইকন দেখাবে (সর্বোচ্চ প্রায়োরিটি)- WorkManager / JobScheduler - পিরিয়ডিক বা 뒤로ফেলে যাওয়া টাস্কের জন্য ভালো
Permission (API 31+)
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> // ব্যবহারকারী সেটিংস থেকে দিতে হবে