كيف يعمل Alarm Manager في Android؟ تحليل كامل باستخدام Kotlin مع مثال حقيقي
\n\nهل تساءلت يومًا كيف تعمل المنبهات في هاتفك؟ أو كيف يذكرك تطبيق الملاحظات بموعدك في تمام الساعة 14:30؟ في Android، يتم ذلك بواسطة خدمة نظام قوية — Alarm Manager. على الرغم من أن اسمه يُترجم كـ "مدير المنبهات"، إلا أنه في الواقع أداة جدولة مهام عالمية تسمح لك بتشغيل الكود في وقت محدد، حتى إذا كان تطبيقك مصغرًا أو كان الهاتف في وضع السكون.
\n\nموضوع مثال Alarm Manager هو أحد أكثر الاستعلامات شيوعًا على StackOverflow (آلاف المشاهدات وعشرات الأسئلة). وهذا ليس مفاجئًا: غالبًا ما يختلط الأمر على المبتدئين مع PendingIntent و BroadcastReceiver والعديد من الطرق مثل set() و setRepeating() أو setExact(). في هذه المقالة، سنستعرض مثالًا عمليًا حقيقيًا باستخدام Kotlin يمكنك تطبيقه فورًا في مشروعك. لا حشو — فقط كود وشروحات.
ما هو Alarm Manager ولماذا نحتاجه؟
\n\nAlarm Manager هي خدمة نظام Android تسمح لتطبيقك بتنفيذ إجراءات في وقت محدد. الميزة الرئيسية هي أنه يعمل بشكل مستقل عن دورة حياة تطبيقك. يمكنك ضبط المنبه، إغلاق التطبيق، إيقاف تشغيل الشاشة — وسيظل Alarm Manager ينفذ المهمة في الوقت المطلوب.
\n\nسيناريوهات الاستخدام النموذجية:
\n- \n
- تذكيرات بالأحداث (اجتماعات، أعياد ميلاد) \n
- مزامنة دورية للبيانات مع الخادم \n
- إشعارات مؤجلة (مثل "لا تنس شرب الماء بعد ساعتين") \n
- تنفيذ مهام خلفية وفقًا لجدول زمني \n
من المهم أن تفهم: Alarm Manager ليس مؤقتًا دقيقًا لفترات زمنية بالمللي ثانية. لهذا الغرض، يوجد Handler أو Coroutines. تم تحسين Alarm Manager للعمل على مستوى النظام مع مراعاة توفير الطاقة.
المكونات الأساسية: PendingIntent و BroadcastReceiver
\n\nقبل كتابة الكود، دعنا نفهم مفهومين رئيسيين بدونهما لا يعمل Alarm Manager.
\n\nPendingIntent — هو "نية مؤجلة". أنت لا تقوم بتشغيل الإجراء فورًا، بل تضعه في حاوية خاصة سيقوم Alarm Manager بتنفيذها في المستقبل. تخيل أنك تعطي ساعي بريد ظرفًا مختومًا بتعليمات: "افتح في تمام الساعة 15:00". الظرف هو PendingIntent.
\n\nBroadcastReceiver — هو مستقبل الرسائل الواسعة. عندما يتم تفعيل Alarm Manager، فإنه يرسل رسالة واسعة (broadcast) يلتقطها BroadcastReceiver الخاص بك. فيه تكتب الكود الذي يجب تنفيذه عند تشغيل المنبه.
\n\nمثال خطوة بخطوة: إنشاء منبه باستخدام Kotlin
\n\nلنكتب تطبيقًا بسيطًا يعرض إشعارًا بعد 10 ثوانٍ من الضغط على زر. هذا المثال مبني على كود حقيقي من إجابة شائعة على StackOverflow.
\n\nالخطوة 1. إنشاء BroadcastReceiver
\n\nأنشئ فئة جديدة ستتعامل مع تفعيل المنبه:
\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.widget.Toast\n\nclass AlarmReceiver : BroadcastReceiver() {\n override fun onReceive(context: Context, intent: Intent) {\n // هذا الكود سيتم تنفيذه عند تفعيل المنبه\n Toast.makeText(context, "تم تفعيل المنبه!", Toast.LENGTH_LONG).show()\n }\n}\n\nفي الوقت الحالي، نعرض فقط Toast. في تطبيق حقيقي، قد يكون هنا إنشاء إشعار، تشغيل خدمة، أو أي كود آخر.
\n\nالخطوة 2. تسجيل BroadcastReceiver في البيان
\n\nلكي يعرف النظام بالمستقبل الخاص بنا، يجب تسجيله في AndroidManifest.xml:
<receiver android:name=".AlarmRecei