بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته .
سنتكلم اليوم عن إنشاء منبه متطور باستخدام Date picker و Time picker وسنعتمد على أمرين :
- التقويم Calendar .
- مستقبل البث Broadcast Receiver .
- Shared preference لتخزين الوقت ، سنحتاجه لاحقا .
بالإضافة لل Alarm manager لكننا لن نتحدث عنه كوننا ذكرناه في الدرس السابق .
مراجعة الدرس أو رؤيته من هنا (ضروري إن لم تكن تعرف ال Alarm manager ) : هنا
مكونات المشروع :
أكتيفيتي رئيسية واللياوت تحتوي على :
- Date picker لضبط التاريخ .
- Time picker لضبط الزمن .
- Button لضبط المنبه .
وسنستخدم Shared preference .
Broadcast Receiver لتنفيذ كود ما عند انتهاء الوقت المحدد وهنا سنعرض توست .
Broadcast Receiver لإعادة ضبط المنبه في حال إعادة تشغيل الجهاز او الخروج من وضع التوفير الفائق للطاقة ، وهنا موقع استخدام ال Shared preference لتخزين الوقت عند ضبطه لأول مرة واستخدامه مجددا لإعادة ضبط المنبه .
أولا : التكلم عن Date picker و Time picker :
تعريفهم بالأكتيفيتي
DatePicker d; TimePicker t; Button start; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); d = (DatePicker) findViewById(R.id.datePicker); t = (TimePicker) findViewById(R.id.timePicker); start = (Button) findViewById(R.id.start); }
وعند الضغط على الزر يتم جلب السنة والشهر واليوم والساعة والدقيقة من المؤقتين ووضبطهم إلى تقويم ( تقويم مضبوط للوقت الحالي ، اي أننا سنجمع معطياتنا من التاريخ والزمن ونضعه في التقويم ) لأننا سنستخدم الوقت المضبوط في التقويم للمنبه .
start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Calendar c = Calendar.getInstance(); c.set(d.getYear(), d.getMonth(), d.getDayOfMonth(), t.getCurrentHour(), t.getCurrentMinute()); long time = c.getTimeInMillis(); SharedPreferences sh = getSharedPreferences("save", 0); SharedPreferences.Editor e = sh.edit(); e.putLong("mills", time); e.putBoolean("state",true); e.commit(); Intent intent = new Intent(MainActivity.this, Catcher.class); PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager v3 = (AlarmManager) getSystemService(ALARM_SERVICE); v3.set(AlarmManager.RTC_WAKEUP, time, p); finish(); } });
شرح الكود :
- Calendar أي التقويم مع تعريفه للوقت الحالي .
- جلب المعلومات والإدخالات من التاريخ والوقت وضبطهم للتقويم أي أن المعلومات هذه أصبحت ضمن التقويم .
- تحويل المعطيات إلى long تمهيدا لوضعهم ضمن المنبه ( بواسطة دالة getTimeInMills الخاصة بالتقويم ) .
- حفظهم احتياطيا إلى Shared preferences في حال إعادة تشغيل الجهاز , كما أننا وضعنا boolean في حال لم نضبط منبه لأول مرة فإنه لن يعمل .
- كود Alarm manager طبيعي مع تغيير في ال pending intent من getActivity إلى getBroadcast كوننا سنبث ولن نذهب لأكتيفيتي .
ولنضع رسالة في Broadcast Receiver ولتكن تحمل رسالة “انتهى الوقت” .
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class Catcher extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "انتهى الوقت", Toast.LENGTH_SHORT).show(); } }
وفي ال Broadcast Receiver الأخرى سنستخدم قيمة ال long المخزنة عند ضبط المنبه لاول مرة واستخدامه مجددا عند اعادة الضبط .
import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; public class Rebooter extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { SharedPreferences sh = context.getSharedPreferences("save", 0); boolean state = sh.getBoolean("state", false); long time = sh.getLong("mills", System.currentTimeMillis()); if (state) { Intent i = new Intent(context, Catcher.class); PendingIntent p = PendingIntent.getBroadcast(context, 1, i, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager v3 = (AlarmManager) context.getSystemService(context.ALARM_SERVICE); v3.set(AlarmManager.RTC_WAKEUP, time, p); } } }
انتهت تدوينتا , دمتم في رعاية الله .
السلام عليكم ورحمة وبركاته .
شرح جميل جداً شكراً لكم
بس لو سمحتوا
انا عملتها جاهزة
بس المشكلة انو لما امسح الـRecents تبعي المنبه ما بيشتغل
يعني ما بيعمل بالخلفية
يا ريت لو تساعدوني بهالنقطة
ممكن توضح أكثر , أية Recent ؟
السلام عليكم
أخي لما أضبط الوقت واليوم واضغط على الزر بيخرج البرنامج للواجهة الرئيسية تبع الجهاز ، وبستناه لحد الوقت اللي اخترته بس مايصير أي شي ، يعني مايطلع المنبه
+
إذا في مجال تعطيني رابط للبرنامج كامل بكون شاكرة لك لأنه بحتاجه في مشروع التخرج للجامعة وماني قادرة اعمله
لو سمحت عايز اضيف في تطبيقي التقويم الهجري
مثلا 5من رجب 1424