درس لإنشاء تطبيق للساعه

الإعلانات

درس إرشادي لإنشاء تطبيق للساعه

 

درس إرشادي

1. نظرة عامه

عندما تشتري ساعة تريد منها أن.. تخبرك بالوقت. لذا فإن معظم الساعات التي تعمل بنظام تشغيل الساعات من قوقل..

تتضمن شاشة تعمل بشكلٍ دائم، فلا حاجة إلى النقر أو اللف أو الإهتزاز لمعرفة الوقت. مع نظام تشغيل الساعات 5.1 أو أعلى..

قمنا بتوسيع هذا الخيار للتطبيقات، بحيث تظل مرئية طالما كنت في حاجة إليها بدلاً من أن تختفي عند إنزال ذراعك.

تسمى التطبيقات التي تدعم هذه الوظيفة بالتطبيقات التي تعمل بشكلٍ دائم. هناك العديد من حالات الإستخدام..

التي يمكن أن تستفيد من كونها تطبيقاً يعمل بشكلٍ دائم، بدءاً من قوائم التسوق، إلى تتبع التمارين.

سيقدم لك هذا الكود التعليمي، المفاهيم الأساسية وراء التطبيقات التي تعمل بشكلٍ دائم.

بعد ذلك، ستتمكن من تحويل، تطبيق ساعة حالي يتوقف، إلى تطبيق يعمل بشكلٍ دائم وسيستمر طالما كان المستخدم بحاجة إليه.

يوجد أيضاً قسم إضافي عن زيادة معدل تحديث التطبيق، بينما يكون في الوضع المحيطي من مرة واحدة في الدقيقة، إلى مرة واحدة كل 10 ثوانٍ.

 

 

 

 

 

درس إرشادي لإنشاء تطبيق للساعه

2. المفاهيم والإعدادات

المفاهيم
بداية، دعنا نتعلم القليل عن نظام تشغيل الساعات والمفاهيم الرئيسية وراء التطبيقات التي تعمل بشكلٍ دائم.

 

نظام تشغيل الساعات عبارة عن منصة مصممة للأجهزة الصغيرة، القوية، التي يتم إرتداؤها على الجسم.

وهي مصممة لتوصيل المعلومات المفيدة، عندما تكون في أشد الحاجة إليها، أجوبة ذكية على الأسئلة المنطوقة..

وأدوات للمساعدة في الوصول إلى أهداف اللياقة البدنية.

يمكن لبعض هذه التفاعلات أن تكون مختصرة، كمثال التحقق من موقع إجتماعك القادم. يمكن أن يكون الآخرون أطول..

مثل الإشارة إلى قائمة تسوقك أثناء التسوق. خلال مثل هذه التفاعلات الطويلة، يمكن للمهلة الإفتراضية للشاشة..

إيقاف التطبيق في منتصف النشاط، مما يؤدي إلى تجربة مستخدم سيئة. هناك حلان محتملان لهذه المشكلة:

  • السيئ: تجاوز إعدادات النظام الإفتراضيه، والحفاظ على عمل الشاشة أثناء النشاط، مما يبقي النظام واعياً..

والشاشة ذات سطوع كامل، ونتيجة لذلك يستنزف كمية كبيرة من البطارية.

  • الجيد: تحويل التطبيق ليصبح تطبيق دائم التشغيل، مما يمكّن التطبيق من البقاء في المقدمة مع السماح للنظام بالسكون..

عندما لا يتفاعل المستخدم مع التطبيق، ويسمح أيضاً للتطبيق بتحديث الشاشة.

بشكلٍ مشابه لأوجه الساعه، يجتوي التطبيق دائماً على وضعين ويمكنه التبديل بينهما في جلسة:

  • تفاعليه: يقوم المستخدم بإيلاء الإهتمام الكامل، ويكون قادراً على التحكم في التطبيق.

عادةً ما تكون التطبيقات بألوان كاملة وقد تقدم حركات مرنة عندما تكون في هذا الوضع.

  • محيطيه: الساعة ليست في وضع الإستخدام النشط. النظام في وضع السكون بينما تظل الشاشة..

قيد التشغيل ويتم تحديثها مرة واحدة كل دقيقة بشكلٍ إفتراضي.

مع إبعاد المفاهيم الأساسية، دعونا نبدأ! لجعل هذا سريعاً قدر الإمكان، قمنا بإعداد نموذج مشروع لك للبناء عليه.

يحتوي على بعض الأكواد الأساسية وإعدادات التطبيقات اللازمة لبناء خلفيات شاشة للساعة.

 

 

 

 

 

 

 

درس إرشادي لإنشاء تطبيق الساعه

3. أحصل على نموذج الكود

يمكنك إما تحميل جميع نماذج الكود إلى جهاز كمبيوترك …
رابط تحميل

… أو استنساخ مستودع قيت هوب من سطر الأوامر.

$ git clone https://github.com/googlesamples/io2015-codelabs.git

 

 

 

 

 

 

درس إرشادي لإنشاء تطبيق الساعه

4. قم بإعداد أندرويد ستوديو

قم بتشغيل أندرويد ستوديو، حدد “فتح مشروع أندرويد ستوديو حالي” من شاشة الترحيب، أفتح دليل المشروع..

وأنتقل إلى الدليل wear/always-on و أفتح الملف build.gradle في ذلك الدليل:

 

في حالة ظهور الشاشة التالية، أنقر فوق “موافق” على شاشة “Import Project from Gradle” دون إجراء أية تغييرات.

 

في الزاوية العلوية اليسرى من نافذة المشروع، يجب أن ترى شيئاً كهذا:

 

هناك أيقونات لثلاثة مجلدات. كل واحد منهم يعرف كـ”نموذج\ module”. يرجى ملاحظة أن أندرويد ستوديو قد يستغرق عدة ثوانٍ لتجميع المشروع في الخلفية لأول مرة.

خلال هذا الوقت، سترى إرتفاع شريط الحالة في أسفل أندرويد ستوديو:

 

نوصيك بالإنتظار حتى ينتهي هذا الإجراء قبل إجراء تغييرات على الكود. سيسمح هذا لأندرويد ستوديو بسحب جميع المكونات اللازمة.

بالإضافة إلى ذلك، إذا حصلت على مطالبة عاجلة تقول “ستصبح عملية إعادة تحميل تغييرات اللغة سارية المفعول؟” أو ما شابه، أختر “نعم”.

 

 

 

 

 

درس إرشادي لإنشاء تطبيق للساعه

5. إعداد المحاكي

إذا كنت بحاجة إلى المساعدة في إعداد محاكي نظام تشغيل الساعه، فالرجاء الرجوع إلى قسم..

تشغيل المحاكي وتشغيل تطبيق نظام ساعتك” في مقالة “إنشاء وتشغيل تطبيقات الساعه”.

يستخدم هذا الكود التعليمي أندرويد ستوديو (الإصدار 1.1)، وهو بيئة تطوير متكاملة (IDE) لتطوير تطبيقات Android. بالإضافة إلى ذلك، سيتطلب الأمر تنزيل مكونات Wear OS SDK.

يرجى الرجوع إلى هذا الدليل لتثبيت كل من Android Studio ومكونات SDK المطلوبة.

ملاحظة: يرجى تهيئة المحاكي الذي يستخدم API 22 أو ما بعده.

 

 

 

 

 

 

درس إرشادي لإنشاء تطبيق الساعه

6. تشغيل مشروع البدء

لنقم بتشغيلها على ساعة / محاكي.

قم بتوصيل جهازك الذي يعمل بنظام تشغيل الساعه، أو ابدأ المحاكي.

في شريط الأدوات، حدد التكوين “1-base” من القائمة المنسدلة، ثم أنقر فوق “زر التشغيل” المثلث الأخضر المجاور له: 

حدد جهازك الأندرويد، أو المحاكي ثم أنقر على “OK” موافق. سيؤدي ذلك إلى تثبيت خلفية شاشة الساعة على الجهاز أو على المحاكي.

بعد بضع ثوانٍ، يتم إنشاء وجه الساعة ويكون جاهزاً للنشر.

سترى تحديث في شريط الحالة أسفل أندرويد ستوديو أثناء حدوث ذلك: 

إذا لم يكن موجوداً بالفعل في علامة التبويب “4:Run” في الجانب الأيسر السفلي من أندرويد ستوديو..

فحدد علامة التبويب هذه، وستتمكن من رؤية كيفية تقدم التثبيت. في نهاية عملية التثبيت، من المفترض أن ترى شيئاً مشابهاً لهذا:

 

 

بمجرد حدوث ذلك، يجب أن يتم تشغيل “تطبيق ساعة التوقف”، تلقائياً.

إذا كنت لا ترى هذا، فجرّب نشر التطبيق مرة أخرى، عن طريق الضغط على زر المثلث الأخضر في شريط الأدوات.

إليك ما يجب أن يبدو عليه. لا تقلق إذا لم يظهر زر التشغيل إلى اليمين في المحاكي – فلا بأس بهذا!

لماذا نضع الوقت الحالي في تطبيق ساعة التوقف هذا؟ من المتوقع أن يتم تشغيل التطبيقات التي تعمل بشكلٍ دائم لفترة أطول من الزمن.

خلال هذا الوقت، قد يرغب المستخدم في التحقق من الوقت – فهي ساعة بعد كل شيء! ونتيجة لذلك..

إذا لم يكن لديك بالفعل، فكر في عرض الوقت في تطبيقك الذي يعمل بشكلٍ دائم.

 

 

 

 

 

 

 

 

درس إرشادي لإنشاء تطبيق الساعه

7. فهم المشروع للمبتدئين

حسناً، أنت مستعد وجاهز لبدء تحويل التطبيق إلى، تطبيق يعمل بشكلٍ دائم. سننطلق بإستخدام نموذج 1-base..

وهو نقطة البداية لساعة التوقف التي سنبني عليها. ستقوم بإضافة كود من كل خطوة إلى 1-base.

يمكن إستخدام كلٍ من النماذج التالية كنقاط مرجعية، للتحقق من عملك، أو كمرجع إذا واجهتك أية مشاكل.

 

نظرة عامة على المكونات الرئيسية

  • StopwatchActivity – هذا هو نشاط ساعة التوقف. – يقع هذا الملف في الدليل

في أندرويد ستوديو، يقع هذا الموقع أسفل

ضمن فئة هذا النشاط، لدينا:

 

  • onCreate – في هذه الداله، نقوم بتوصيل عناصر واجهة المستخدم (الأزرار، طرق عرض النص، إلخ).

كما يحتوي أيضاً على أكواد تربط الأزرار بالإجراءات عند النقر عليها.

  • mActiveModeUpdateHandler متغير وفئة UpdateHandler – يعمل هذان معاً لتشغيل ساعة التوقف عن طريق..

تحديث الشاشة مرة واحدة في الثانية، عندما تكون ساعة التوقف قيد التشغيل.

  • mActiveClockUpdateHandler متغير وفئة UpdateClockHandler – يعمل هذان معاً لتشغيل الوقت الحالي (التحديث مرة واحدة في الدقيقة).

في حين أن ساعة التوقف هي حالة الإستخدام الرئيسية لتطبيقنا، لا يزال المستخدمون يريدون معرفة الوقت، إذا كانوا يريدون توقيت شيئاً قد يستمر من.. عدة دقائق، إلى ساعات.

  • toggleStartStop – يتحكم هذا في السلوك، عند بدء ساعة التوقف أو إيقافها مؤقتاً..

res/layout/activity_stopwatch.xml – هذا هو مخطط واجهة المستخدم، في دليل ساعة التوقف، حيث يتم تخزين مخطط الشاشة.

ملخص

في هذه الخطوة تعلمت عن:

  • نظام تشغيل الساعات، والمفاهيم وراء التطبيقات التي تعمل بشكلٍ دائم
  • أساسيات نقطة البداية الخاصة بنا – 1-base
  • كيفية الإتصال بجهاز يعمل بنظام تشغيل السعات، نشر التطبيق وتشغيله!

التالي

لنبدأ في جعل هذا التطبيق تطبيقاً دائم التشغيل!

 

 

 

 

درس إرشادي لإنشاء تطبيق الساعه

8. أجعله تطبيقاً دائم التشغيل

في هذه الخطوة، سنبدأ في جعل تطبيقنا تطبيقاً دائماً. سيكون لديه القدرة على التنقل بين الوضع النشط و الوضع المحيطي..

وسيبقى في المقدمة، حتى يقوم المستخدم بإلغاؤها صراحة. سيتم تحديث الشاشة مرة واحدة في الدقيقه، وهذا هو الإفتراضي للتطبيقات التي تعمل بشكلٍ دائم.

إذا كنت عالقاً في أي مرحلة، فالرجاء الرجوع إلى   للحصول على الكود الكامل.

 

تغييرات ملف Gradle

للرجوع إلى الوظائف الجديدة، المرتبطة بالتطبيقات التي تعمل بشكلٍ دائم، نحتاج إلى إضافة تبعية واحدة إلى ملف البناء build.gradle لـ

com.google.android.wearable:wearable:1.0.0

 

 

 

 

 

درس إرشادي لإنشاء تطبيق الساعه

تغييرات ملف الإيضاح

لتحويل تطبيقنا إلى تطبيق يعمل بشكلٍ دائم، نحتاج إلى تغيير العديد من السمات المرتبطة بتطبيقنا في ملف AndroidManifest.xml. هذا يقع هنا:

 

نحن بحاجة إلى إجراء التغييرات التالية على الملف:

  • التطبيقات التي تعمل بشكلٍ دائم، تتطلب الحصول على إذن بالحفاظ على قفل التنبيه..

لذلك ضع ما يلي بين عناصر manifest و عناصر  uses-feature:

 

  • التطبيق الدائم، هو مفهوم جديد تم تقديمه في نظام تشغيل الساعه الإصدار 5.1.

لتحديد أنه يجب تثبيت التطبيق فقط على، الأجهزة التي تعمل بنظام أندرويد 5.1 أو أعلى، أدخل ما يلي بين عناصر  application وعناصر activity

 

 

إذا كان تطبيقك يدعم الأجهزة قبل الإصدار أندرويد 5.1 (المستوى 22)، فيجب تعيين هذا الخيار على “false”.

عند التشغيل على الأجهزة التي تعمل بالإصدارات القديمة من الأندرويد، سيعود تطبيقك إلى الأنشطة العادية، وعندما يتحول الجهاز إلى الوضع المحيطي، يعود الجهاز إلى الشاشة الرئيسية وسيخرج من نشاطك.

  • قم بتعليق/ إزالة السطر التالي في StopwatchActivity.java و الذي يحافظ على الشاشة طوال الوقت:

 

 

التبديل إلى الوضع المحيطي

دعم الوضع المحيطي وجعل تطبيقنا تطبيقاً دائماً، يتطلب حالات دورة حياة إضافية للنشاط.

يتم تضمين هذه الحالات الإضافية، في فئة نشاط جديد يُسمى WearableActivity. لدعم الوضع المحيطي، نحتاج إلى تنفيذ الخطوات التالية:

  • تغيير StopwatchActivity من توسيع النشاط، إلى توسيع WearableActivity:

 

  • في onCreate، قم بإستدعاء ()setAmbientEnabled :

 

 

أخبر التطبيق ما يجب القيام به في الوضع المحيطي

إذا قمت بتشغيل التطبيق الآن، سوف يبقى في المقدمة، لكنه لا يفهم ما ينبغي القيام به بشكلٍ مختلف في الوضع التفاعلي، و الوضع المحيطي.

وكنتيجة لذلك، في الوضع المحيطي، سوف يكون عالقاً في أي وقت تصل إليه، ولن يكون هناك تحديث حتى تقوم بتنشيطه بالوضع التفاعلي.

إذا أبقيت ساعتك متصلة بمصدر طاقة، فقد يكون السلوك مختلفاً، وستستمر الساعة في التحديث مرة واحدة كل ثانية.

هذا لأنه عندما يتم توصيل الساعة، فإنها لا تنتقل إلى “النوم العميق” وسيستمر كود المعالج في العمل.

هذا هو أحد الأسباب التي تجعل من الضروري لمطوري البرامج، أن يقوموا بفحص تطبيقاتهم في الحياة الواقعية بدلاً من الإعتماد على المحاكي أو الأجهزة الراسخة.

 

قبل أن نبدأ في تغيير كود دورة الحياة، سنحتاج إلى:

1) إضافة إشعار لتذكير المستخدم، بأنه يتم تحديث الشاشة مرة واحدة كل دقيقه (هذا هو الإعداد الإفتراضي للتطبيقات التي تعمل بشكلٍ دائم..

ويمكنك معرفة كيفية تغييره في القسم التالي).

 2) تحميل بعض الإعدادات، بما في ذلك الألوان، التي نستخدمها عندما نكون في الوضع التفاعلي، حتى نتمكن من التنشيط من الوضع المحيطي باللونين الأسود والأبيض:

  • في string.xml تحت res/values ، قم بإضافة ما يلي:

 

  • في activity_stop_watch.xml تحت res/layout ، قم بإضافة ما يلي بعد آخر زر للتحكم في عنصر GridLayout:

 

  • في StopwatchActivity
  • إضافة متغير TextView خاص، يسمى mNotice.
  • إضافة متغير  GridLayout خاص، يسمىmBackground .
  • إضافة متغيرين خاصين على مستوى الفئه، لتمثيل الخلفية، وألوان المقدمة، في الوضع التفاعلي على التوالي:

 

  • قم بإرفاق المرجع إلى mNotice في onCreate وقم بتعيين anti-aliasing إلى “خطأ” لأن هذا سيستهلك طاقة معالجة أقل لتسليم:

 

  • قم بإرفاق مرجع الخلفية إلى mBackground في onCreate

 

  • قم بتحميل هذه الإعدادات من ملف الإعداد color.xml بإضافة السطور التالية إلى دالة onCreate في StopwatchActivity:

 

شيء آخر يجب علينا القيام به هو، إيقاف تشغيل المعالج في الوضع المحيطي، في دالة updateDisplayAndSetRefresh يجب أن نقوم بإضافة..

تحقق لمعرفة ما إذا كانت الساعة في الوضع المحيطي، قبل جدولة، الإستدعاء المتأخر إلى المعالج.

يمكن للمطورين التحقق مما إذا كان التطبيق حالياً، في الوضع المحيطي، عن طريق إستدعاء ()isAmbient  – قم بإحاطة هذا الكود “بالتحقق” هكذا:

 

عندما تكون الساعة في الوضع المحيطي (وفي حالة السكون العميق)، هناك إستدعاء للتحديثات، لذلك لا تحتاج إلى المعالج.

بالإضافة إلى ذلك، لا يستطيع المعالج “handler “، تنبيه المعالج “processor”، من حالة السكون..

لذلك لن يعمل على أية حال. سنتوسع في هذا، في القسم التالي.

لإخبار النظام بما يجب القيام به في الوضع المحيطي، نقوم بتجاوز ثلاث دوال

 

(....)onEnterAmbient

تُستدعى هذه الداله، عندما ينتقل التطبيق من الوضع التفاعلي إلى المحيطي.

هذا هو المكان الذي نغير فيه صيغ عناصر الشاشة.

لا تتردد في نسخ ولصق الكود التالي في StopwatchActivity لمراعاة الوضع المحيطي.

 

 

()onExitAmbient

أساساً سوف نعكس ما فعلناه من قبل في (...)onEnterAmbient

()onUpdateAmbient

يتم إستدعاء هذه الدالة مرة واحدة في الدقيقة، في الوضع المحيطي، بواسطة إطار العمل، ويجب على مطوري البرامج أن يخبروا نظام تشغيل الساعه، ما الذي يجب تحديثه من خلال:

  • إستدعاء الدالة الأصل – ;()super.onUpdateAmbient
  • تحديث الساعة عن طريق إستدعاء ()updateClock
  • تحديث الوقت المنقضي عن طريق إستدعاء ()updateDisplayAndSetRefresh

إذا قمت بتشغيل التطبيق الآن، يجب أن يعرض شيئاً مشابهاً لما يلي في الوضع التفاعلي – لا يختلف كثيراً عن السابق:

ومع ذلك، إذا أنتظرت لفترة، على جهاز حقيقي (للمحاكي قم بضغط F7 أو fn + F7) للتبديل إلى الوضع المحيطي..

سترى ما يلي وسيتم تحديث هذا مرة في الدقيقة:

بالنسبة التي تعمل بنظام تشغيل الساعات، و التي تحتوي على زر، فإن تغطية الشاشة سيأخذ المستخدم إلى الوضع المحيطي.

الضغط على زر الجهاز، سوف يخرجك من التطبيق. بالنسبة إلى الأجهزة التي لا تحتوي على هذا الزر، فإن تغطية الشاشة ستؤدي إلى الخروج من التطبيق.

 

تواجه مشاكل؟

إذا ظهر لك الخطأ INSTALL_FAILED_MISSING_SHARED_LIBRARY ، فحاول تحديث محاكي الساعه إلى الإصدار 22 أو أحدث.

تتوفر واجهات برمجة التطبيقات (API) المحيطة فقط بدءاً من هذا الإصدار.

 

ملخص

في هذه الخطوة تعلمت عن:

  • تحويل تطبيق الساعه إلى تطبيق يعمل بشكلٍ دائم
  • تعلمت كيفية التعامل مع التغييرات في دورة الحياة، أثناء الدخول والخروج من الوضع المحيطي..

وما الذي يجب تحديثه مرة في الدقيقه، أثناء تشغيل الوضع المحيطي

 

 

درس إرشادي لإنشاء تطبيق الساعه

القادم

نشاط إختياري للتعرف على زيادة مرات تكرار، تحديث التطبيق، لأكثر من مرة في الدقيقة أثناء تشغيل الوضع المحيطي.

لن تحتاج معظم التطبيقات إلى التحديث بشكلٍ أسرع من مرة واحدة في الدقيقة، ولكن ربما يكون هذا مناسباً..

كمثال، لتطبيق يعرض للمستخدم الخطوة الحالية.

إذا كان لا يزال لديك وقت، ولكن لا تفكر في زيادة معدل التحديث، فنحن نشجعك على تغيير المعاملات “باراميتر” المختلفة لعناصر الشاشة..

على سبيل المثال، المخطط، حجم الحدود، ولون عناصر الشاشة المتنوعة، وما إلى ذلك. لنرى ما ستحصل عليه!

 

 

 

 

درس إرشادي لإنشاء تطبيق الساعه

9. إختياري: قم بزيادة معدل التحديث في الوضع المحيطي

بالنسبة لبعض التطبيقات، قد يرغب المطورين في التحديث أكثر من مرة في الدقيقة. طالما أن الجهاز الذي يعمل بنظام تشغيل الساعة..

يكون في وضع السكون العميق، في الوضع المحيطي، فلن يتم تشغيل فئة المعالج Handler في هذه الحالة.

وكنتيجة لذلك، سنحتاج إلى إعداد AlarmManager الذي سيقوم بتنبيه التطبيق على فترات محددة، ويقوم بتحديث الشاشة.

إذا كنت عالقاً في أي مرحلة، فالرجاء الرجوع إلى   للحصول على كامل الكود.

 

إعداد مدير المنبه AlarmManager

الخطوة الأولى هي إعداد متغيّر AlarmManager و PendingIntent الذي سيخبر الأندرويد بالنشاط الذي سيتم تشغيله عند إطلاق AlarmManager.

للقيام بذلك، سنقوم بإجراء التغييرات التالية في StopwatchActivity:

  • قم بإنشاء متغيرين خاصين:
  •  AlarmManager يسمى mAmbientStateAlarmManager
  • PendingIntent يسمى mAmbientStatePendingIntent
  • قم بإنشاء متغير ثابت جديد (AMBIENT_INTERVAL_MS) من النوع الطويل، لعدد المرات التي سيتم فيها تحديث الشاشة.

في حالتنا، سنقوم بتعيين هذا إلى (TimeUnit.SECONDS.toMillis(10 أو 10 ثواني.

 

خارج كود الإختبار هذا، لتطبيقك الخاص، خذ في الإعتبار ما إذا كان التحديث أكثر من مرة في الدقيقه، مهماً لتجربة المستخدم أم لا.

قد لا تحتاج التطبيقات مثل: قوائم المهام إلى التحديث على الإطلاق، ما لم تتغير العناصر، بحيث يؤدي تحديث الشاشة مرة واحدة في الدقيقة..

إلى تحديث الساعة، وهذا سيكون كافياً. بالنسبة إلى التطبيقات الأخرى، يجب على مطوري البرامج، أن يقوموا بالتحديث بشكلٍ متكرر، أكثر من مرة واحدة كل 10 ثوانٍ..

أثناء التشغيل في الوضع المحيطي، من أجل توفير قدر كبير من الطاقة. كلما كان التحديث أقل تكراراً، كان ذلك أفضل.

 

  • في دالة onCreate ، سنقوم بتهيئة كلا المتغيرين:
  • بالنسبة إلى  mAmbientStateAlarmManager، قمنا بتعيينها على (AlarmManager)

;(getSystemService (Context.ALARM_SERVICE


  • بالنسبة إلى mAmbientStatePendingIntent ،
  • قم بإنشاء غرض يشير إلى StopwatchActivity.class:
Intent intent = new Intent(getApplicationContext(),
                        StopwatchActivity.class);

 

بدء mAmbientStatePendingIntent بإستخدام ما يلي.

mAmbientStatePendingIntent = PendingIntent.getActivity(
                getApplicationContext(),
                MSG_UPDATE_SCREEN,
                intent,
                PendingIntent.FLAG_UPDATE_CURRENT);

 

 

المعامل “الباراميتر” الأخير مثير للإهتمام. هناك خيارين سيكونان مناسبين هنا – FLAG_CANCEL_CURRENT و FLAG_UPDATE_CURRENT – نحن نستخدم هذا الأخير..

لأنه في هذه الحالة سواءً كنا سنقوم بإنشاء PendingIntent جديد، سيحدث فرقاً بسيطاً، لعدم وجود حالات معقدة يتم تمريرها.

أما عند عدم إنشاء PendingIntent جديد، فإن هذا يجعل العملية أكثر كفاءة.

 

 

  • AlarmManager يتطلب إذن للتشغيل. أفتح AndroidManifest.xml وأدخل ما يلي مباشرة، أسفل إذن WAKE_LOCK التي أضفناها في الخطوة الأخيرة:
<uses-permission
    android:name="com.android.alarm.permission.SET_ALARM"/>

 

  • للحفاظ على تناسق واجهة المستخدم، قم بتحديث قيمة السلسلة التالية في string.xml تحت res/values ،
<string name="updatefrequencynotice">Updates every 10 seconds</string>

 

تفعيل مدير المنبه AlarmManager 

بعد وضع الأساسيات، حان الوقت الآن لإضافة الكود، لتشغيل AlarmManager.

نحتاج إلى تحديث الكود، حيث سبق لنا الحصول على كود المعالج لتحديث الشاشة. لذلك سيكون هذا في دالة updateDisplayAndSetRefresh:

 

  • قم بإضافة شرط إضافي عندما لا يكون التطبيق في الوضع المحيطي:
if (!isAmbient()) {
    // same code as before...
} else {
    // Our new code for AlarmManager goes here!
}

 

  • في هذه الأقواس الشرطية الجديدة (أي في جزء else الذي يحدث، عندما تكون الساعة في الوضع المحيطي)..

نقوم بحساب طول المدة التي يجب أن ننتظر حتى التنبيه التالي بإستخدام ()System.currentTimeMillis :

long timeMs = System.currentTimeMillis();
long delayMs = AMBIENT_INTERVAL_MS - (timeMs % AMBIENT_INTERVAL_MS);
long triggerTimeMs = timeMs + delayMs;

 

  • قم بإلغاء أي تنبيه سابق بإستخدام دالة  cancel على mAmbientStateAlarmManager للتغذية في mAmbientStatePendingIntent.

 

 

إذاً، لماذا نحتاج إلى فعل هذا؟ بجانب قيام AlarmManager نفسها بجدولة التحديث، فهناك أيضاً إمكانية أن تقوم onUpdateAmbient ..

بإستدعاء updateDisplayAndSetRefresh وجدولة التنبيه. في هذه الحالة، لن نحتاج إلى جدولة العديد من التنبيهات التي قد تسبب إرباكاً بسرعة.

ومن ثم، فإننا نقوم بإلغاء جميع التنبيهات بإستخدام PendingIntent قبل أن نقوم بجدولة المنبه التالي.

درس إرشادي لإنشاء تطبيق الساعه

  • جدولة التنبيه التالي:

mAmbientStateAlarmManager.setExact(
                        AlarmManager.RTC_WAKEUP,
                        triggerTimeMs,
                        mAmbientStatePendingIntent);

 

 

في كود الإختبار هذا، نستخدم AlarmManager.RTC_WAKEUP لأننا نستخدم ()System.currentTimeMillis  كمقياس للوقت.

يوجد وضع بدء تشغيل بديل AlarmManager.ELAPSED_REALTIME_WAKEUP  يستخدم ()SystemClock.elapsedRealtime  كأساس للتوقيت.

أياً من هذه الأزواج، “وضع بدء التشعيل/ مقياس الوقت”، سوف يعمل، ولكن تذكر أن تبقيها متناسقة، ولا تمزج بين وضع بدء التشغيل ومقياس الوقت.

 

  • في وضع onExitAmbient ، تحقق مما إذا كانت ساعة التوقف تعمل فقط تحت ()super.onExitAmbient.

إذا كان الأمر كذلك، قم بإلغاء أي تنبيه بإستخدام دالة  cancel على mAmbientStateAlarmManager.

لا داعي للقلق بشأن، بدء تشغيل الكود ذي الصلة بالمعالج Handler والذي سيقوم بتحديث الشاشة مرة في الثانيه في الوضع التفاعلي.

تتم معالجة هذا بواسطة updateDisplayAndSetRefresh عندما يتم إستدعاؤه بإستمرار في الدالة.

  • قم بإلغاء أي تنبيه في دالة  onDestroy عند خروج التطبيق
  • قم بإضافة دالة جديدة على onNewIntent ، سيتم إستدعاء هذه عند تشغيل المنبه:
@Override
public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    setIntent(intent);
    updateDisplayAndSetRefresh();
}

 

إذا فتحت ملف AndroidManifest.xml ، فستلاحظ وجود سمة في عنصر النشاط تسمى

android:launchMode والتي تم تعيينها على "singleInstance".

هذا أمر مهم، وإلا ستقوم AlarmManager بإطلاق نشاط جديد في كل مرة يتم فيها إطلاقها، بدلاً من تحديث النشاط نفسه.

توجد طرق بديلة للتعامل مع هذا، ولكن هذه واحدة من أنظف الطرق.

إذا قمت بتشغيل التطبيق مجدداً، فيجب تحديثه كل 10 ثوانٍ:

 

ملخص

في هذه الخطوة تعلمت عن:

  • كيفية زيادة عدد التحديثات
  • تعلمت كيفية إستخدام AlarmManager لجدولة هذه التحديثات، حتى عندما يكون الجهاز في وضع السكون العميق، في الوضع المحيطي

درس إرشادي لإنشاء تطبيق الساعه

10. تعلم المزيد

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا

الإعلانات