AlarmManager দিয়ে ভবিষ্যতে লোকাল নোটিফিকেশন দেখানো
এই উদাহরণটি পূর্বের'article'-এর সমানই — `AlarmManager` এবং `BroadcastReceiver` ব্যবহার করে ৫, ১০, ৩০ সেকেন্ড পর নোটিফিকেশন শিডিউল করা দেখানো হয়েছে। কোড স্ট্রাকচার একই।
প্রধান পার্থক্য/উন্নতি
- আধুনিক Android-এ (API 23+) `setExactAndAllowWhileIdle()` বা `setAlarmClock()` ব্যবহার করা উচিত।
- ব্যাটারি অপ্টিমাইজেশন এড়াতে `WorkManager` বেস্ট প্র্যাকটিস।
WorkManager বিকল্প (সুপারিশ করা)
// build.gradle dependencies
implementation "androidx.work:work-runtime-ktx:2.9.0"
// NotificationWorker.java
public class NotificationWorker extends Worker {
public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Result doWork() {
showNotification();
return Result.success();
}
private void showNotification() {
NotificationManager nm = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), "work_channel")
.setContentTitle("WorkManager Notification")
.setContentText("Scheduled via WorkManager")
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setAutoCancel(true);
// Channel create...
if (nm != null) nm.notify((int) System.currentTimeMillis(), builder.build());
}
}
// শিডিউল করা (১০ সেকেন্ড পর)
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(NotificationWorker.class)
.setInitialDelay(10, TimeUnit.SECONDS)
.build();
WorkManager.getInstance(context).enqueue(work);
পুরানো কোড স্ট্রাকচার (AlarmManager)
আপনার প্রদত্ত কোড স্ট্রাকচার ব্যবহার করতে চাইলে(MainActivity, MyNotificationPublisher, Manifest) সেটি ঠিকই আছে। শুধু `PendingIntent.FLAG_IMMUTABLE` (Android 12+) এবং `SCHEDULE_EXACT_ALARM` পারমিশন যোগ করুন।
পরীক্ষা
অ্যাপ রান করুন, মেনু থেকে টাইম সিলেক্ট করুন, নির্দিষ্ট সময় পর নোটিফিকেশন পাবেন।
