কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে অ্যালার্ম ম্যানেজার ইমপ্লিমেন্টেশন

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" />
// ব্যবহারকারী সেটিংস থেকে দিতে হবে
  1. How to play ringtone/alarm/notification sound in Android?

  2. অ্যান্ড্রয়েডে কাস্টম রিংটোন বা অ্যালার্ম সাউন্ড বাজানোর উপায়

  3. অ্যান্ড্রয়েডে লাইন আঁকা (Canvas এবং Paint ব্যবহার করে)

  4. অ্যান্ড্রয়েডে AlarmManager ব্যবহার করে সার্ভিস শুরু করার পদ্ধতি