حسنا عقبت بكلمة.. بصورة مكتملة لاني قمت بتصميم تطيق اخر اثناء بدايتى لتعلم اندرويد ولكنه كان فشلا ذريعا بكل ما للكلمة من معني :-)
حسنا ما هو التطبيق؟
ببساطة هو تطبيق Todo list بسيط جدا يمكنك من اضافة وتعديل وحذف وتمييز المهمة على انها مكتملة ويحتوي على اشعارات تقوم بتنبيهك للمهمة بوقت محدد تضيفه مع امكانية تكرارها يوميا او اسبوعيا او شهريا او حتى سنويا.
واجهة بسيطة لعرض المهام، واجهة لاضافة مهمة جديدة (وللتعديل) وواجهة About.
للاطلاع على التطبيق :
المراحل التى مررت بها اثناء التنفيذ :
بعيدا عن انخراطي في جو الدراسة والاختبارات (لدي اختبار فيزياء الخميس القادم) فساتحدث عن الصعوبات التى واجهتني من الجانب التقني فقط :-)
التصميم وتخيل البرنامج .. انا من الاشخاص الذين يصعب عليهم تخيل شئ شديد الجاذبية ولا استطيع مزج الالوان بتاتا الخ ولذلك قمت ببساطة بالبحث عن تطبيقات بنفس الاسم واخذ فكرة التصميم من ابسط ما رايت منها (ايضا اهملت نوعا ما مظهر التطبيق على الشاشات الكبيرة الخاصة باجهزة التابليت وقمت بتحديد اتجاه الشاشة ltr عمدا حتى لا اضطر لدعم الاجهزة العاملة باللغة العربية) حسنا لا تبدا بالهجوم الان هذه تجربة فقط اردت بها معرفة ان كان يمكننى بناء شئ بما تعلمته ولكننى اشجع المحتوي العربي يا صديقي ;-)
الايقونة ليست بالجميلة وانا اعلم فقد قمت على عجلة بتصميمها باستخدام Adobe xd (اه من مرحلة التصميمات هذه اكرهها جدا)
الوصول الى مرحلة الكود.. بدات هذه المرحلة ببناء التطبيق على فكرة ال array list المعرفة ك static في ال activity الاساسي عندي يتم اضافة العناصر من نوع TODO_ITEM اليها وتظهر هذه العناصر في list view ثم انتقلت الى دعم التعديل على العنصر عبر ارسال بياناته الي ال activity الخاص بالاضافة (مع تغيير بعض خواص الواجهة) لتظهر كواجهة للتعديل.
الربط بقاعدة البيانات.. كانت مرحلة متوسطة الصعوبة بالنسبة لى اردت استخدام بعض الاشياء التى لم اكن قد تدربت عليها او فهمتها بشكل جيد او حتى نسيتها اثناء مروري بالدورات وبالنسبة لهذا الجزء فقد كان استخدام ال content provider و ال cursor adapter هما اللذان اردت ان اعرف ان كان يمكننى التطبيق عليهما ام لا (اضطررت للنظر في احد المصادر المفتوحة من احد الدورات طوال فترة كتابتى لهذا الجزء حتى فهمته أخيرا الحمد لله) ثم قمت بربط قاعدة البيانات بالواجهة فى النهاية.
اظهار الاشعارات (كانت اصعب المراحل من وجهة نظري) .. في البداية واول فكرة لمعت في ذهني هو استخدام alarmmanager مع broadcast receiver لتشغيل كود يتحقق من كل مهمة لم يتم تعيينها كمكتملة ثم يتحقق من ان هذا هو الوقت المناسب لاطلاق الاشعار الخاص بها ويتم ارسال هذا التنبيه كل دقيقة حيث ان التطبيق يسمح لك بتحديد الدقائق ايضا :-) .. ولكن مهلا لا يعمل هذا في وضع الخمول واحيانا حتى في وضع اليقظة لا يصلني التنبيه احيانا .. ببعض البحث عرفت انه لا يمكننى للاسف الاعتماد على هذه الطريقة حيث ان ادق تنبيه لل alarmmanager في وضع اليقظة يصل فى الوقت تماما ولكن في وضع الخمول قد يتاخر فترة 15 دقيقة وهذا لا يجوز لانني اريد ان يظهر الاشعار في الوقت المحدد.
تغيير الاسلوب.. بعد بعض البحث وجدت ان الحل هو في استخدام foreground service تلك التى يظهر معها اشعار ان التطبيق يعمل مع تضمين كود التحقق من وجود مهمة داخلها بين قوسين ل while جميلة شرطها دائما true في وجود فترة سكون مع عمل array لتخزين ال pending intent لكل اشعار تم اطلاقه يتم افراغها كل فترة وتستخدم للتاكد من ان الاشعار لا ينطلق في حالة تم استدعاء دالة انشاء الاشعار اكثر من مرة اظن هذا الحل يعمل حتى الان ^_^
اضافة خدمات firebase للتحليل والاشعارات واضافة احد اعلانات ادموب الصغيرة (كان ذلك سهلا للغاية لم افعل شيئا الا اتباع بعض التعليمات)
الرفع على المتجر.
حسنا ربما الامر ليس خارقا ولكننى احببت مشاركتكم هذه التجربة لاستفيد من خبراتكم ولتعطونى اراءكم فيما فعلت وهل كان من الافضل لى تنفيذ شي مختلف او التفكير بطريقة مختلفة :-)
التعليقات