Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

بناء عداد سرعة لتحديد المواقع: الدخول لهواء Android

by
Difficulty:IntermediateLength:LongLanguages:

Arabic (العربية/عربي) translation by miahood (you can also view the original English article)

يوجد في كل الهواتف الذكية هذه الأيام إمكانات GPS ولكن التطبيقات التي تستفيد من هذا لا يجب أن تكون كلها حول الخرائط القديمة المملّة. سيقدم لك هذا البرنامج التعليمي Adobe AIR for Android و سيقودك نحو تطوير تطبيق ActionScript 3.0 speedometer الذي سيتم تشغيله على أجهزة Android 2.2.

تحقق من الجزء الثاني من هذا البرنامج التعليمي بناء عداد السرعة GPS: واجهة المستخدم والبولندية على موقعنا الأخت Activetuts +!

يمكن للأشخاص الذين يهتمون بالنظام الأساسي  وليس لديهم جهاز Android يمكن متابعة هذا البرنامج التعليمي والاختبار ضمن Flash Professional.


الخطوة ١: نظرة عامة

 يقوم  Adobe AIR  لـ Androidبإنشاء العديد من الفرص المثيرة لمطوري Flash الذين يرغبون في الانتقال إلى مساحة الجوال.

 سيعرض لك هذا البرنامج التعليمي الفروق الدقيقة عند تطبيق مهارات ActionScript على الهاتف المحمول. سيقودك ذلك عبر الخطوات اللازمة لكتابة تطبيق يعمل بشكل كامل ونشره واختباره على هاتف Android.

سيتم إيلاء اهتمام خاص لفئات تحديد الموقع الجغرافي ونظام الملفات ، والتي تكون خاصة بـ AIR SDK. 

لا تقلق إذا لم يكن لديك هاتف Android 2.2. ستظل قادرًا على إنشاء واختبار ActionScript داخل Flash CS5.


 الخطوة 2: تثبيت Adobe AIR لـ Android

قبل البدء في التطوير ، ستحتاج إلى تنزيل المكونات التالية وتثبيتها:

  1. Flash Professional CS5 (الإصدار التجريبي لمدة 30 يومًا)
  2.  وقت تشغيل Adobe AIR لنظام Android 2.2
  3. ملحق Adobe Flash Professional CS5 لـ AIR 2.5
  4. برامج تشغيل جهاز USB (في حالة نظام التشغيل Windows فقط)
  5.   Adobe AIR 2.5.1 SDK

 إذا لم يكن لديك بالفعل Flash CS5 ، يمكنك تنزيل نسخة تجريبية لمدة 30 يومًا من Adobe.

 إذا كنت تخطط للنشر والاختبار على هاتف فعلي فعليك تثبيت  تشغيل Adobe AIR المجاني من Android Market (ابحث فقط عن Adobe AIR في تطبيق Market).

 استخدمت Google Nexus One لهذا البرنامج التعليمي لكن AIR ستعمل على أجهزة Android التي تلبي متطلبات النظام التالية:

  • نظام التشغيل أندرويد 2.2 
  • ARMv7-A المعالج مع ناقلات FPU 
  • OpenGL ES 2
  • أجهزة فك تشفير أجهزة H.264 و AAC 
  • 256 ميغابايت من ذاكرة الوصول العشوائي

إذا لم يكن AIR لـ Android مدعومًا لهاتف Android ، فيمكنك متابعة هذا البرنامج التعليمي والاختبار في Flash CS5. 

 يمكنك تنزيل ملحق  AIR 2.5 من Adobe Labs. يمكن العثور على تعليمات تفصيلية حول كيفية تثبيت الامتداد هنا. إذا كنت تستخدم Windows ، فستحتاج أيضًا إلى اتباع الخطوات التفصيلية حول كيفية تثبيت برامج تشغيل أجهزة USB التي تسمح لجهاز Android الخاص بك بالاتصال مع Android SDK. 

أخيرًا ، يمكنك تنزيل أحدث إصدار من Adobe AIR SDK وتثبيته.

حسنا ، نحن نقرأ لبدء الترميز


الخطوة ٣:إعدادات FLA

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

أنا أستخدم Windows 7 لهذا البرنامج التعليمي ، ولكن عند الضرورة ، قدمت إرشادات لأولئك الذين يستخدمون Windows Vista و Windows XP و Mac OS X.

قم بتشغيل Flash CS5 وحدد File | جديد (Ctrl + N) من القائمة المنسدلة. 

من لوحة New Document ، حدد علامة التبويب Templates. من قسم الفئة ، حدد: AIR لنظام Android واختر: 480x800Android من قسم النماذج. 

يؤدي النقر على "موافق" إلى إنشاء وإعداد FLA يستهدف AIR لـ Android. يمكنك تأكيد ذلك من خلال فحص لوحة خصائص Stage: 

يجب أن ترى بوضوح من قسم PUBLISH أنه قد تم تعيين FLA الخاص بك لاستخدام مشغل AIR Android وأنه يوجد رابط لفتح إعدادات تطبيق وتثبيت Android AIR. 

إغلاق FLA الخاص بك وفتح عداد السرعة - artwork.fla من  مصدرالتنزيل. سوف نعمل من FLA من الآن فصاعدا. قبل المتابعة ، ابحث عن موقع مناسب على محرك الأقراص الثابتة واحفظه كـ speedometer.fla. 

تبلغ مساحة المسرح FLA 480 × 800 والذي يطابق دقة شاشة جهاز Nexus One من Google الذي استخدمته عند كتابة هذا البرنامج التعليمي واختباره.  لا تحتوي جميع أجهزة Android على نفس دقة الشاشة. على سبيل المثال ، يحتوي Motorola Droid على دقة شاشة 480 × 854. 

إذا اختلفت دقة شاشة جهازك ، فغيّر حجم المرحلة ليتم مطابقته. للقيام بذلك ، انقر فوق الزر Edit ... الموجود داخل لوحة Properties أسفل قسم PROPERTIES:

وسوف تظهر لوحة "إعدادات المستند". غير العرض والارتفاع داخل هذا الفريق، وانقر فوق زر "موافق".

 احفظ FLA.


الخطوة ٤: اختبار تحديد الموقع الجغرافي

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

لنبدأ من خلال تعريف أنفسنا بفئة تحديد الموقع الجغرافي AIR وإخراج سرعتك الحالية إلى حقل نص مؤقت.


خطوة ٤: اختبار واجهة

حدد أداة النص (T) وارسم حقل نص 460 × 167 على الجزء الرئيسي. 

ضع حقل النص في (10 ، 10). تأكد من أن محرك النص مضبوط على النص الكلاسيكي وأن الحقل من نوع النص الديناميكي. اسم حقل النص الخاص بك "metresPerSecond."

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

أدخل قيمة افتراضية من "0" في حقل النص ومركز محاذاة النص.

هنا لقطة من الإعدادات المذكورة أعلاه.

وأخيرا انقر على زر تضمين ... وتضمين الحروف الرمزية في الخط. انقر فوق موافق. 

الآن إضافة حقل نص ثابت وواسع 375px ووضعه في (95 ، 177). استخدم حجم خط من 40 نقطة. انا لم أكن اعاني من جولة حول هذا المجال .

 أدخل "عدد الأمتار في الثانية" في حقل النص و اعمل محاذاة النص ع اليمين .

 إليك لقطة عن إعدادات حقل النص هذا.

حفظ FLA الخاص بك

حان الوقت لكتابة بعض ActionScript لتحديث حقل النص الديناميكي بسرعة.


الخطوة ٦: استخدام فئة تحديد الموقع الجغرافي

لنبدأ بإنشاء فئة المستند وإضافة بعض التعليمات البرمجية للاستماع إلى المعلومات الواردة من مستشعر جهاز الهاتف الخاص بك. 

قم بإنشاء ملف ActionScript 3 جديد بتحديد ملف | جديد ... (Ctrl + N) ضمن Flash Professional. ستظهر لوحة New Document. 

قم بإنشاء ملف ActionScript 3 جديد بتحديد ملف | جديد ... (Ctrl + N) ضمن Flash Professional. ستظهر لوحة New Document. 

 أضف ما يلي إليه:

قم بحفظ الصف في نفس موقع FLA الخاص بك وقم بتسميته Application.as.

انقر بزر الماوس الأيسر على الجزء الرئيسي (لا تنقر فوق أي من حقول النص) وقم بتعيين حقل "فئة المستند" داخل لوحة  "خصائص" ل: التطبيق

 يتم تعريف اثنين من المتغيرات  داخل الفئة. ها هم:

الأول ، metresPerSecond ، هو من نوع TextField ويمثل حقل النص الديناميكي الذي تم إنشاؤه في الخطوة 5. وسيتم استخدام الموقع الجغرافي الثاني ، للإشارة إلى مثيل لفئة تحديد الموقع الجغرافي.

 تم تعريف  عضو متغير  metresPerSecond للعامة لأنه يمثل حقل نص في الجزء الرئيسي. محاولة إعطاء  عضو متغير و الذي يمثل مرحلة   مثيلة  ل معدّل وصول غير عام  سيعمل خطأ  في وقت التشغيل.

 تم العثور على فئة تحديد الموقع الجغرافي داخل حزمة flash.sensors. سنستفيد أيضًا من فئة GeolocationEvent ، التي تم استيرادها مع تحديد الموقع الجغرافي:

 لا يعد استخدام فئة تحديد الموقع الجغرافي أمرًا صعبًا. أولاً يتم إنشاء مثيل وتعيينه ل عضو  الموقع الجغرافي الخاص بك:

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

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

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

 هذا أكثر أو أقل من ذلك. لديك الآن الرمز المطلوب للاستماع إلى تحديثات GPS وإخراج السرعة التي يسافر المستخدم بها.

 شيء واحد يجب ملاحظة أنه يتم استخدام الأسلوب setRequestedUpdateInterval () فقط تلميحاً إلى الجهاز. الوقت الفعلي بين تحديثات الموقع قد يكون أكبر أو أصغر من الفاصل الزمني الخاص بك المطلوب. لأجل اهداف  هذا البرنامج التعليمي  اننا سوف نفترض أن الجهاز سوف يحترم الفاصلة المقترحة 

يمكنك العثور على مزيد من التفاصيل فيما يتعلق بفئة تحديد الموقع الجغرافي في Adobe LiveDocs.


الخطوة 7: إعدادات التطبيق والمثبت

 حسنًا ، لنقم بإنشاء شفرتك ونشرها على هاتفك.

 حدد ملف | إعدادات Android AIR ... لعرض لوحة إعدادات التطبيق والمثبت.

 تتوفر أربع علامات تبويب من هذه اللوحة ، حيث تكون علامة التبويب "عام" هي الإعداد الافتراضي.

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

 انقر فوق علامة التبويب "النشر".

 عيِّن نوع نشر Android على "إصدار الجهاز" وتأكد من تحديد كلا مربعي الاختيار في قسم ما بعد النشر.

 التالي سوف تحتاج إلى إنشاء شهادة للتطبيق الخاص بك. يمكنك القيام بذلك بمجرد النقر فوق الزر إنشاء ... المجاور لحقل الشهادة.

 ستظهر لوحة Digital Certificate Sign-Signed Digital. في الحقول الثلاثة الأولى ، ما عليك سوى إدخال اسمك. حدد الرمز المناسب لبلد الإقامة الخاص بك للحقل الرابع.  على سبيل المثال ، إذا كنت تعيش في المملكة المتحدة ، فاختر GB ؛ إذا كنت تقيم في الولايات المتحدة ، اختر الولايات المتحدة. يمكنك العثور على قائمة شاملة لرموز البلدان هنا.

 حقول "كلمة المرور" و "تأكيد كلمة المرور" ، أدخل كلمة مرور لشهادتك.

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

 انقر فوق موافق وسيتم إنشاء ملف شهادة P12 وحفظه. ستتم إعادتك إلى لوحة إعدادات التطبيق والمثبت.

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

انقر فوق علامة التبويب أذونات (سنقوم بتجاهل الرموز).

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

 يسمح إذن ACCESS_FINE_LOCATION لتطبيقك بالوصول إلى بيانات GPS من خلال فئة تحديد الموقع الجغرافي. إذا كان موقع هاتفك  غيرمتاحًا ، فسيسمح  ACCESS_COARSE_LOCATION للتطبيق بدلاً من  محاولة الوصول إلى بيانات شبكة WIFI وبيانات شبكة اتصال عبر فئة تحديد الموقع الجغرافي.  لكن هذا الخيار الاحتياطي ليس دقيقًا.

 انقر فوق موافق واحفظ FLA الخاص بك.


الخطوة 8: النشر على الجهاز

 نحن الآن على استعداد لنشر FLA ونشرها على جهازك.

 إذا لم تكن قد قمت بذلك بالفعل ، فقم بتوصيل جهازك بالكمبيوتر باستخدام كابل USB.

 لقد طلبنا من Flash CS5 بدء تشغيل التطبيق على الجهاز المتصل مباشرة بعد النشر. لذلك يجب التأكد من تمكين مستشعر GPS لجهازك مسبقًا.

 قد تختلف الإعدادات الدقيقة لهذا الأمر عبر أجهزة Android ، ولكن سيتمكن معظم المستخدمين من تمكينها عبر الشاشة الرئيسية:

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

الآن اذهب إلى الأمام وانشر FLA عن طريق اختيار ملف | نشر (Alt + Shift + F12).

 إذا سارت الأمور وفقًا للخطة ، فستنشر FLA ، سيتم إنشاء APK Android وسيتم نقل الملف إلى جهازك وإطلاقه.

 يجب أن يقرأ التطبيق في البداية "0 متر في الثانية". خذ هاتفك في الخارج وابدأ في المشي أو من الأفضل بقاء تشغيله. يجب أن تشاهد تحديث الشاشة كل ثانية بسرعتك الحالية.

 إذا لم يكن لديك جهاز للاختبار عليه ، فلا تقلق ، فسنتعامل مع ذلك في الخطوة 12 - محاكاة تحديد الموقع الجغرافي.

 في الوقت الحاضر على الرغم من ببساطة التأكد من بناء التعليمات البرمجية الخاصة بك عن طريق تحديد Control | اختبار الفيلم في Flash Professional (Ctrl + Enter). في حالة نجاح تشغيل SWF في إطار AIR ، على الرغم من الأسباب الواضحة لن يتم تحديث حقل النص بسرعة.

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


الخطوة 9: الخلفية

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

 الحمد لله AIR يوفر آلية للحفاظ على شاشة الجهاز مستيقظا عبر خاصية systemIdleMode فئة NativeApplication .

 أولاً استيراد فئات NativeApplication و SystemIdleMode إلى فئة المستند الخاص بك عن طريق إضافة الأسطر التالية:

 الآن دعنا نضيف السطر الفعلي من الشفرة الذي يفرض على الشاشة ب ان تبقى مستيقظًا أثناء استخدام تطبيقك:

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

 حدد ملف | إعدادات Android AIR .... انقر فوق علامة التبويب أذونات وتحقق من أذونات WAKE_LOCK و DISABLE_KEYGUARD:

 انقر فوق موافق لإغلاق لوحة إعدادات التطبيقات والمثبت. احفظ FLA الخاص بك.

 انشر التطبيق وانشره على هاتفك مرة أخرى (Alt + Shift + F12). سيتم إغلاق الإصدار الحالي من التطبيق الذي يعمل على جهازك تلقائيًا وسيتم إطلاق الإصدار الجديد.

هذه المرة يجب أن تعمل بدون إضاءة خلفية الذهاب للنوم.

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

 يمكنك العثور على مزيد من المعلومات بخصوص NativeApplication و SystemIdleMode على Adobe LiveDocs.


الخطوة 10: إدارة التطبيقات

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

 عندما ينتقل أحد تطبيقات AIR إلى الخلفية ، فإنه يتلقى حدث Event.DEACTIVATE ، كما يتم خفض معدل الإطارات إلى 4fps. ومع ذلك ، بالنسبة للجزء الأكبر ، الأمر متروك لك لكتابة رمز لنقل التطبيق بأمان إلى وضع السكون و لن تستنزف الموارد دون داع.

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

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

 في المرة التالية التي تستخدم فيها التطبيق (عادةً عن طريق تحديده من القائمة) ، سيتم نقله إلى المقدمة مرة أخرى وستتصرف كما لو كان يعمل في المقدمة طوال الوقت. عندما يتم نقل تطبيق AIR إلى المقدمة ، فإنه يتلقى حدث Event.ACTIVATE ويتم ضبط معدل الإطارات مرة أخرى إلى قيمته الأصلية.

 دعونا نتحقق من أن تطبيقك قد تم نقله إلى الخلفية عند الخروج منه.

 انشر التطبيق وانشره على هاتفك (Alt + Shift + F12).

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

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

 المضي قدما وإجبار التطبيق على التوقف.


الخطوة 11: الخروج من التطبيق

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

يمكنك استخدام ActionScript فعليًا لفرض إغلاق تطبيق AIR (بدون إرساله إلى الخلفية) عن طريق إجراء المكالمة التالية على برنامج NativeApplication:

 دعونا نفعل ذلك فعلاً باستخدام تطبيق عداد السرعة عن طريق اعتراض مفتاحي Back و Home وتجاوز سلوكهما الافتراضي. دعونا نكتب بعض التعليمات البرمجية للتعامل مع مفتاح العودة.

أولاً إضافة الواردات الاثنتين التالية إلى Application.as:

الآن داخل المنشئ إضافة سامع الحدث لالتقاط ضغطات المفاتيح:

 عند التقاط مفاتيح الضغط في Flash Player ، نضيف عادة وحدة إصغاء حدث إلى  مشروع المرحلة:

 ولكن عند الكتابة لـ AIR لل Android ، يجب إضافة وحدة سامع الحدث إلى موضوع NativeApplication:

إضافة أسلوب handleKeyDown () الذي يعمل  على استدعاء KeyboardEvent.KEY_DOWNعندما يتم التقاطها:

تحدد هذه الطريقة المفتاح الذي يتم الضغط عليه عن طريق فحص خاصية keyCode المخزنة داخل KeyboardEvent التي تم تمريرها إلى handleKeyDown ().

 تم إخفاء رموز المفتاح نفسها بواسطة الثوابت التي توفرها فئة لوحة المفاتيح. يتم تمثيل رمز المفتاح السابق بواسطة Keyboard.BACK.

من المفترض أن ترى من الرمز أنه في حالة الضغط على "السابق" ، يتم إجراء استدعاء لفرض إنهاء التطبيق بدلاً من نقله إلى الخلفية:

 يبحث أيضاً أسلوب handleKeyDown () للمستخدم الضغط على مفاتيح البحث أو القائمة ومنع سلوكها الافتراضي عن طريق إجراء استدعاء إلى أسلوب الحدث preventDefault () :

 سيؤدي هذا إلى منع لوحة المفاتيح الظاهرية في Android من الظهور في حالة استمرار المستخدم في الضغط على مفتاح القائمة ، وسيتم حظر تطبيق Google Voice عندما يحتفظ المستخدم بمفتاح البحث. لا نحتاج إلى تطبيق عداد السرعة.

 لم نتناول مفتاح Home بعد. بخلاف "العودة" و "البحث" و "القائمة" ، لا يمكنك في الواقع اعتراض مفتاح "الصفحة الرئيسية" عبر الحدث KeyboardEvent.KEY_DOWN.  بدلاً من ذلك عند الضغط على مفتاح Home سيتم إرسال حدث Event.DEACTIVATE ، والذي يمكنك الاستماع إليه. يتم إرسال هذا الحدث قبل نقل التطبيق إلى الخلفية. بدلاً من ذلك ، يمكنك الاستماع إلى الحدث وإجبار التطبيق على الإنهاء.

 إضافة رمز للاستماع إلى الحدث Event.DEACTIVATE:

ستحتاج أيضا إلى استيراد فئة الحدث:

 الآن أضف الطريقة التي يتم الاتصال بها عند اكتشاف الحدث:

 احفظ Application.as ثم احفظ FLA الخاص بك.

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

 انشر التطبيق (Alt + Shift + F12) وعندما يتم تشغيله على جهازك ، اضغط على المفتاح Back أو Home to exit.  انتقل الآن إلى شاشة إدارة التطبيقات (عبر الإعدادات) على جهاز Android الخاص بك. حدد علامة التبويب قيد التشغيل وتأكد من عدم وجود عداد السرعة في القائمة.


الخطوة 12: محاكاة تحديد الموقع الجغرافي

 كما يمكنك أن تتخيل ، يمكن أن يصبح اختبار التطبيق الذي يدعم نظام تحديد المواقع العالمي مضغوطًا تمامًا نظرًا لأنك تحتاج إلى الاستمرار في التنقل إذا كنت تريد تلقي بيانات مفيدة من فئة تحديد الموقع الجغرافي. بالنسبة لأولئك الذين يشغلون التطبيق داخل Flash CS5 ، كان الاختبار باستخدام بيانات الموقع الفعلي مستحيلاً حتى الآن.

 دعونا نحاول معالجة كلتا القضيتين عن طريق كتابة التعليمة البرمجية التي تحاكي فئة تحديد الموقع الجغرافي باستخدام بيانات GPS المسجلة مسبقًا. ستعطيك هذه الخطوة فرصة لاستخدام بعض فئات ملفات النظام التي توفرها AIR.

 ستجد ملفًا ثنائيًا في source / gps.dat يحتوي على مجموعة من السرعات التي يتم قياسها في فواصل زمنية ثانية واحدة من Google Nexus One أثناء قيادة سيارتي. سنقوم بكتابة فصل يمتلك نفس واجهة برمجة التطبيقات العامة بصفتها فئة تحديد الموقع الجغرافي ولكن يقرأ القيم من gps.dat بدلاً من قراءة البيانات من مستشعر موقع هاتفك.


الخطوة 13: نسخ البيانات لتحديد المواقع

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

بالنسبة إلى أجهزة سطح المكتب ، فإليك مكان نسخ ملف gps.dat إلى:

  • Windows Vista و Windows 7: C: \ Users \ your_username \
  • نظام التشغيل Windows XP: C: \ Documents and Settings \ your_username \
  • Mac OS X: Macintosh HD / Users / your_username /

 بالنسبة لهاتف Android ، انسخ ملف gps.dat إلى جذر بطاقة SD للهاتف. لإجراء ذلك ، عليك توصيل جهازك بسطح المكتب عبر كبل USB الخاص به. افتح لوحة الإشعارات على جهازك من خلال لمس شريط الحالة والسحب لأسفل.

داخل لوحة الإشعار ، سترى قسمًا مستمرًا. اضغط على أيقونة USB المتصلة داخل هذا القسم للانتقال إلى شاشة USB Mass Storage. من هذه الشاشة ، اضغط على الزر "تشغيل وحدة تخزين USB".

 يمكنك الآن استكشاف بطاقة SD للجهاز من سطح المكتب. في Windows ، سيتم منحك خيار عرض الملفات على بطاقة SD باستخدام مستكشف Windows.  من لوحة التحديد التي تظهر ببساطة حدد "فتح مجلد لعرض الملفات باستخدام مستكشف Windows".

 في نظام التشغيل Mac OS X ، سيظهر رمز يمثل جهازك على سطح المكتب. ببساطة انقر نقراً مزدوجاً فوق الرمز لفتح نافذة Finder. بدلاً من ذلك ، افتح نافذة Finder من Dock وحدد الجهاز من قائمة DEVICES على الجانب الأيمن من نافذة Finder.

 الآن نسخ ملف gps.dat إلى مجلد الجذر على بطاقة SD.

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

 أنت الآن جاهز لكتابة بعض الرموز لقراءة هذه البيانات.


الخطوة 14: محاكاة فئة  الموقع الجغرافي

 قم بإنشاء فئة ActionScript جديدة وقم بإضافة التعليمة البرمجية التالية إليها:

 قم بحفظ الفصل في نفس موقع FLA الخاص بك وقم بتسميته GeolocationSimulate.as.

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

 بشكل أساسي ، نكتب فئة تلتزم بنفس الواجهة العامة مثل فئة تحديد الموقع الجغرافي الخاصة بـ AIR SDK. إذا نظرت إلى المستندات المباشرة لموقع Geolocation ، فستلاحظ أن واجهة برمجة التطبيقات تحتوي على قائمة شاملة بالوسائل العامة.

 لأغراض هذا البرنامج التعليمي ، فإننا في الواقع نستفيد فقط من مجموعة فرعية صغيرة من واجهة برمجة التطبيقات العامة في Geolocation ، لذا نحتاج فقط إلى ضمان أن صنف GeolocationSimulate يوفر وظائف لأساليب من تحديد الموقع الجغرافي التي نستخدمها بالفعل.

هنا قائمة من تلك الأساليب:

  • setRequestedUpdateInterval()
  • ()addEventListener

بالنظر إلى تطبيقنا الحالي لموقع GeolocationSimulate ، قد تعتقد أننا قمنا بتضمين واحد فقط من هذه الطرق - قد يبدو كما لو أن addEventListener () مفقود من الفصل . ولكن إذا نظرت قليلاً ، سترى أن GeolocationSimulate تمدد فئة EventDispatcher في Flash API.

تقدم فئة   GeolocationSimulate مع أسلوب addEventListener () وتوفر أيضًا وظيفة تسمح لفصلنا بإرسال الأحداث في النهاية - سنحتاج  بسماح لفئة GeolocationSimulate بإرسال حدث GeolocationEvent.UPDATE الذي نستمع إليه من Application.as. إليك الرمز من Application.as مرة أخرى كتذكير:

 بشكل أساسي ، نريد توصيل فئة GeolocationSimulate الجديدة في الشفرة أعلاه وجعلها تعمل كما لو كانت فئة تحديد الموقع الجغرافي الحقيقية. يجب أن يكون الاختلاف الوحيد هو أن GeolocationSimulate يجب إرسال حدث GeolocationEvent.UPDATE يحتوي على بيانات مزيفة تم التقاطها دوريًا من ملف gps.dat  موجودا على الهاتف أو على سطح المكتب.

على الرغم من أنها بعيدة عن الانتهاء من دعونا هوك لدينا فئة جديدة تصل إلى Application.as.

قم أولاً بتغيير التعليمة البرمجية التالية إلى إنشاء مثيل GeolocationSimulate بدلاً من تحديد الموقع الجغرافي:

 قم بنشر كودك واختباره داخل Flash CS5 في الوقت الحالي عن طريق تحديد Control | اختبار الفيلم في Flash Professional (Ctrl + Enter). لن يفعل أي شيء بعد ، لكن يجب أن ينتشر على الأقل.


خطوة 15:  تحديث الفاصل الزمني

الوقت لبدء إضافة بعض الوظائف إلى أساليب  الروتين داخل فئة GeolocationSimulate. دعونا نركز على كتابة رمز setRequestedUpdateInterval ().

. وبشكل أساسي ، نريد من الفئة قراءة قيمة السرعة من gps.dat وإرسال حدث GeolocationEvent.UPDATE يحتوي على  القيمة إلى أي من المستمعين.

يمكننا القيام بذلك عن طريق إضافة مثيل Timer وتعيين خاصية التأخير الخاصة به داخل setRequestedUpdateInterval (). قم بإجراء التغييرات التالية على شفرتك:

داخل المُنشئ قمنا بإنشاء مثيل لفئة Timer وقمت بتعيينه إلى متغير عضو يسمى المؤقت. عند instantiating مشروع Timer قمنا بإرشادك لتكرارها في ثانية واحدة (1000 ميلي ثانية) الفواصل الزمنية. تمت إضافة وحدة سامه للحدث باسم handleTimer () أيضًا إلى المؤقت وستتم دعوته على كل تكرار.

في الوقت الحالي لن تفعل طريقة handleTimer () أي شيء في نهاية المطاف سوف يقرأ قيمة السرعة التالية من gps.dat.

احفظ GeolocationSimualte.as.


الخطوة 16:  Android Debug Bridge

دعونا  نختبر الإصدار الحالي من GeolocationSimulate من خلال إثبات أن رمز المؤقت يعمل. يمكننا القيام بذلك عن طريق إضافة عبارة تتبع بسيطة إلى طريقة handleTimer () والبحث عنها في نافذة الإخراج الخاصة بـ Flash.

قم بإضافة عبارة التتبع التالية:

 قم بنشر كودك واختبره داخل Flash CS5 من خلال تحديد Control | اختبار الفيلم في Flash Professional (Ctrl + Enter). إذا سار كل شيء وفقًا للخطة ، فيجب أن ترى ما يلي تتبعه إلى نافذة الإخراج كل ثانية:

 لنختبر الشفرة على جهاز Android الآن.

 لمساعدتنا ، سنستخدم أداة (Android Debug Bridge (abd) ، والتي يمكن استخدامها لتصفية وعرض معلومات التسجيل من تطبيقات متنوعة على جهازك ، بما في ذلك عبارات التتبع الواردة من تطبيقات AIR الخاصة بك.

 جارٍ العثور على adb ...

تعد Adb أداة سطر أوامر ويمكن العثور عليها جنبًا إلى جنب مع تثبيت Flash CS5. في ما يلي مكان العثور على adb على نظام التشغيل Windows أو Mac OS X:

  • Windows Vista و Windows 7: C:\Program Files (x86)\Adobe\Adobe Flash CS5\Android\tools\adb.exe
  • نظام التشغيل Windows XP: C: \ Program Files \ Adobe \ Adobe Flash  CS5 \ Android \ tools \ adb.exe
  • Mac OS X: / Applications / Adobe Flash CS5  / Android / tools / adb

 انتقل إلى القسم الفرعي أدناه ذي الصلة بنظام التشغيل الخاص بك ، ثم انتقل إلى القسم الفرعي "تشغيل adb" لأسفل قليلاً.

... على نظامي التشغيل  Windows 7 و Windows Vista

إذا كنت تقوم بتشغيل Windows 7 أو Vista ، افتح مستكشف Windows وانتقل إلى المجلد: C: \ Program Files (x86) \ Adobe \ Adobe Flash CS5 \ Android .  الآن اضغط Shift وانقر بزر الماوس الأيمن على مجلد الأدوات. من القائمة المنسدلة ، حدد "فتح نافذة الأوامر هنا" لفتح نافذة أوامر.

 ... على نظام التشغيل Windows XP

 بالنسبة لأولئك الذين يستخدمون Windows XP ، انقر فوق زر البدء وحدد تشغيل ... لتشغيل إطار التشغيل:

 في إطار Run ، اكتب "cmd":

 انقر فوق "موافق" لفتح إطار أوامر. الآن انتقل إلى المجلد حيث يتم حفظ adb عن طريق إدخال ما يلي:

... على نظام التشغيل Mac OS X 

يجب أن يقوم مستخدمو Max OS X بفتح نافذة طرفية. للقيام بذلك ، افتح حزمة التطبيقات واعثر على مجلد الأدوات المساعدة:

انقر على مجلد الأدوات (Utilities) وابحث عن رمز المحطة الطرفية (Terminal): 

انقر على أيقونة Terminal لإطلاق نافذة طرفية.

 من نافذة  terminal  انتقل إلى المجلد حيث يتم حفظ adb عن طريق إدخال ما يلي:

 جارٍ تشغيل adb

 من نافذة الأوامر ، يمكننا إطلاق adb وإصدار أمر logcat إليه لبدء تلقي معلومات التسجيل الواردة من جهاز Android الخاص بك. نحن مهتمون فقط بتلقي معلومات التتبع القادمة من تطبيق AIR ، لذا سيلزم تطبيق فلتر.

تأكد من توصيل جهاز Android عبر منفذ USB.

إذا كان لديك باستخدام Windows أدخل ما يلي في سطر الأوامر من أجل الحصول على معلومات السجل من الجوية التطبيق الخاص بك:

يجب على مستخدمي Mac OS X إدخال ما يلي في نافذة  terminal :

 يستمع Adb الآن و يعطي أي معلومات سجلت  من جهازك  تتعلق ب تطبيقك. نحتاج الآن إلى إنشاء تصميم جديد للتطبيق ونشره على الهاتف.

ضمن Flash CS5 ، حدد ملف | إعدادات Android AIR .... داخل لوحة إعدادات التطبيق والمثبّت ، انقر فوق علامة التبويب Deployment وانقر فوق زر الراديو Debug.

انقر فوق 'موافق' لإغلاق اللوحة.

احفظ FLA .

الآن انشر التطبيق عن طريق تحديد ملف | نشر (Alt + Shift + F12).

 قد يظهر مربع الحوار التالي على جهازك عند تشغيل تطبيقك:

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

 يجب أن تتلقى الآن نافذة الأوامر التي يتم تشغيل adb منها معلومات التتبع من فئة GeolocationSimulate الخاصة بك. يجب أن يظهر الإخراج في إطار الأوامر على النحو التالي:

هناك طرق عديدة لتصحيح أخطاء AIR لتطبيقات Android حيث يكون adb خيارًا واحدًا وربما يكون أسهلها. يمكنك العثور على وثائق شاملة لبرنامج adb على موقع مطوري برامج Android الرسمي.

 بدلا من ذلك قد ترغب في النظر في استخدام Dalvik Debug Monitor أو تشغيل جلسة تصحيح أخطاء عن بعد مباشرة من Flash Pro. نظرًا للنطاق المحدود لهذا البرنامج التعليمي ، سنلتزم باستخدام adb عبر نافذة الأوامر.

 قم بإنهاء التطبيق لمنع ظهور أي عبارات أخرى في إطار الأوامر.

 حسنًا ، يمكننا الاستمرار في إضافة وظيفة إلى  GeolocationSimulate.


خطوة 17: قراءة البيانات من gps.dat

الآن ونحن على ثقة من أن رمز المؤقت يعمل ، نحتاج إلى إضافة بعض الوظائف التي تقرأ بالفعل بيانات GPS المزورة من gps.dat. لكن دعني أوضح أولاً تنسيق البيانات المخزنة داخل gps.dat.

 أساسا gps.dat هو ملف ثنائي يتكون من مجموعة من أرقام النقطة العائمة. يتم تمثيل أرقام النقطة العائمة بنوع الرقم في Flash ، ويمثل كل من أرقام النقاط العائمة هذه قيمة سرعة يتم قياسها بالأمتار في الثانية.

 يوفر Adobe AIR SDK فئة FileStream التي يمكن استخدامها لفتح الملفات من الملفات الثنائية والقراءة منها والكتابة عليها. بالنسبة لفئة GeolocationSimulate الخاصة بنا ، سنكون مطالبين بفتح وقراءة البيانات من الملف - الكتابة غير مطلوبة.

 ابدأ بالتصريح عن متغير عضو خاص باسم filestream داخل فئة GeolocationSimulate سنستخدم هذا المتغير لاستيعاب مرجع ل برنامج FileStream:

 دعونا أيضا نعمل تحديد ثابت يحمل اسم الملف الثنائي الذي سنقوم بقراءته من:

 الخطوة التالية هي إنشاء مثيل لبرنامج FileStream داخل مُنشئ الفصل ولفتح الملف الثنائي للقراءة. هنا الرمز:

 أولاً يتم إنشاء  برنامج ملف يشير إلى موقع gps.dat على كل من جهاز الكمبيوتر وجهاز Android الخاص بك.

 تحتوي فئة الملف على خصائص لها قيم ذات معنى على أنظمة تشغيل مختلفة. على سبيل المثال ، يكون لكل من Windows و Mac OS X و Android مسارات محلية مختلفة إلى دليل المستخدم. ومع ذلك ، يمكننا الوصول بسهولة إلى مجلد المستخدم في نظام التشغيل بطريقة مستقلة باستخدام File.userDirectory كما هو موضح أدناه:

بمجرد أن يكون لدينا مؤشر لمجلد المستخدم ، فإننا ببساطة نستخدم الأسلوب resolPath () لطبقة الملف لإنشاء المسار إلى ملف gps.dat:

يحدد سطرين من الكود الموضح أعلاه بشكل فعال مسارًا لـ gps.dat على أنظمة Windows و Mac و Android. لاحظ استخدام ثابت FILE ، والذي يحمل اسم الملف.

الآن وبعد أن أصبح لدينا المسار إلى ملف gps.dat ، يمكننا إنشاء برنامج FileStream وفتح الملف. فيما يلي سطرين من التعليمات البرمجية المسؤولة عن القيام بذلك:

عند فتح ملف ، يجب تحديد ما إذا كنت تقوم بفتح الملف للقراءة منه ، أو الكتابة إليه ، أو كليهما. في حالتنا نحن نريد فقط أن نقرأ من الملف ، والذي يتم عن طريق تمرير FileMode.READ كوسيطة  للأسلوب open ().

يمكنك رؤية قائمة شاملة من الثوابت المتاحة من FileMode على Adobe LiveDocs.

 كل ما تبقى للقيام به الآن هو قراءة قيمة السرعة التالية من الملف عند تحديث المؤقت. قم بإضافة التعليمة البرمجية التالية إلى أسلوب handleTimer ():

 يقرأ الكود أعلاه السرعة المتاحة التالية من الملف ويخزنها في متغير محلي يدعى السرعة.

 قبل قراءة السرعة من الملف ، يتم إجراء فحص لمعرفة ما إذا كنا قد وصلنا إلى نهاية الملف أم لا. يتم ذلك عن طريق قراءة bytesAvailable  filestream.  إذا تم الوصول إلى نهاية الملف ، فسيكون البايت المتوفر 0 يشير إلى أنه لا توجد بيانات أخرى ليتم قراءتها.  إذا كانت هذه هي الحالة ، فإننا نبدأ ببساطة في قراءة البيانات من بداية الملف مرة أخرى عن طريق تعيين خاصية  وضع filestream إلى 0. إليك مقتطف الشفرة المسؤول عن إجراء ذلك:

 يتم قراءة قيمة السرعة نفسها من الملف عن طريق إجراء استدعاء إلى طريقة readFloat (). هذا يقرأ قيمة نقطة الفاصلة التالية المتاحة من الملف.

 قبل اختبار أحدث إصدار من فئة GeolocationSimulate ستحتاج إلى إضافة بعض الواردات للسماح لـ Flash بمعرفة مكان العثور على فئات filestream المختلفة التي تم استخدامها:

الآن دعنا نختبر الإصدار الأحدث من الفئة بإضافة عبارة التتبع بالقرب من نهاية أسلوب handleTimer ():

سيؤدي ذلك إلى تتبع أحدث قيمة السرعة التي تمت قراءتها من ملف gps.dat.

يمكنك الآن حفظ الفصل واختبار أحدث إصدار من التطبيق سواء داخل Flash CS5 أو على الجهاز. على الرغم من أن حقل النص "متر في الثانية" لن يتم تحديثه بعد (سنصل إلى ذلك في الخطوة التالية) ، يجب أن ترى بيان تتبع كل ثانية مع أحدث قيمة للسرعة يتم الحصول عليها من gps.dat.


خطوة 18: إرسال GeolocationEvent.UPDATE

 عندما كنا نستخدم فئة تحديد الموقع الجغرافي في الخطوات من 4 إلى 11 ، قد تتذكر أنها أرسلت حدثًا في GeolocationEvent.UPDATE في كل مرة كان فيها جهاز استشعار الموقع بجهازك يحتوي على بيانات GPS جديدة. من هذا الحدث ، تمكنا من استخراج السرعة وعرضها في حقل نصي.

 كنا نستمع لهذا الحدث ونقوم بتحديث حقل النص من داخل فئة التطبيق.

 كتذكير ، هنا هو رمز من مُنشئ فئة التطبيق الذي قام بتأليف فئة تحديد الموقع الجغرافي وإعداد سامع الحدث:

 وإليك الطريقة الفعلية التي يتم الاتصال بها كلما أرسل  موضوع الموقع الجغرافي حدثًا في GeolocationEvent.UPDATE:

 بالنسبة لفئة GeolocationSimulate الخاصة بنا لمحاكاة تحديد الموقع الجغرافي بشكل كامل ، يجب أيضًا إرسال حدث GeolocationEvent.UPDATE. إذا لم يحدث ذلك ، فلن يكون لدى فئة التطبيق لدينا أي طريقة لمعرفة أن بيانات GPS الجديدة متوفرة وبالتالي لن تكون قادرة على عرض السرعة الحالية في حقل النص الخاص بها.

لحسن الحظ إرسال حدث من GeolocationSimulate هو تافه. إذا نظرت إلى الخطوة 14 ، فستتذكر أن الفصل يوسع فصولة EventDispatcher الخاصة بالفلاش.  هذا يوفر GeolocationSimulate مع وسائل إرسال الأحداث عبر أسلوب dispatchEvent ().

 قم بإزالة عبارة التتبع التي قمت بإضافتها في الخطوة السابقة وقم بإضافة التعليمة البرمجية التالية بالقرب من نهاية handleTimer () داخل GeolocationSimulate.as:

 يتوقع أسلوب dispatchEvent () وسيطة واحدة -  موضوع من نوع الحدث. تمتد جميع الأحداث ضمن Flash من فئة الحدث.  الحدث المحدد الذي يهمنا هو GeolocationEvent ، والذي يتم إنشاء مثيله ونقله إلى dispatchEvent () أعلاه.

 يتوقع مُنشئ فئة GeolocationEvent وجود 11 وسيطة ، اثنتان منها مهتمتان - المتغيرين الأولى والتاسعة.

 المعلمة الأولى هي نوع الحدث ، الذي يكون في هذه الحالة من النوع GeolocationEvent.UPDATE. المتغيرالتاسع هي السرعة الحالية بالأمتار في الثانية. لهذا نعبر عن متغير السرعة المحلي.

 المتغيرات المتبقية نملؤها مع القيم الافتراضية المفصلة في LiveDocs.

إضافة بيان استيراد يتيح لـ Flash معرفة مكان العثور على فئة GeolocationEvent:

كلما توفرت قيمة سرعة جديدة ، تستطيع GeolocationSimulate الآن إرسال حدث إلى أي مستمعين. احفظ ملف الفصل.

إليك الإصدار الحالي من الفصل للرجوع إليه:

 اختبر الآن أحدث إصدار من التطبيق سواء داخل Flash CS5 أو على الجهاز. ضمن Flash CS5 وعلى جهاز Android ، سترى الآن تحديث حقل النص "عدد الدقائق في الثانية" بأحدث سرعة باستخدام القيم المخزنة داخل gps.dat.

هذا مثالي ، حيث يمكنك الآن الاختبار من خلال Flash CS5 ، وعلى جهازك دون الحاجة إلى الذهاب إلى أي مكان (أو حتى تشغيل وحدة GPS الخاصة بهاتفك).


خطوة 19:  أخطاء GPS

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

 2 و 128 و 5 و 6 و 128 و 7 و 128 و 7 و 128 و 8 و 6 و 5 و 128 و 7 و 9

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

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

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

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


الخطوة 20: التبديل بين فئات تحديد الموقع الجغرافي

 لذلك لدينا محاكاة وظيفية بالكامل لتحديد الموقع الجغرافي ولكن كيف يمكننا مبادلة بين المحاكاة والنسخة الحقيقية من الطبقة؟

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

على سبيل المثال ، للتغيير من GeolocationSimulate إلى Geolocation ، يمكنك تغيير هذا السطر:

إلى

وهذا السطر:

إلى

 كما يمكنك بلا شك ان تفهم ان هذا يمكن  ان يصبح ممل بسرعة ويكون عرضة للخطأ في التبادل باستمرار بين الاثنين أثناء الاختبار.

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

 من خلال تغيير قيمة REAL_GEOLOCATION الثابته من true إلى false قبل النشر ، يمكنك التبديل بسهولة بين استخدام فئة الموقع الجغرافي لـ AIR وفئة GeolocationSimulate الخاصة بك.

 ولكي نكون صادقين ، ما زال هذا الحل غير مرضٍ تمامًا.

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

 الحمد لله يمكن تحقيق ذلك من خلال استخدام واجهات.

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

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

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

ها هم :

  •  الوظيفة العامة setRequestedUpdateInterval (الفاصل الزمني: رقم): void
  • الوظيفة العامة addEventListener (النوع: String، listener: Function، useCapture: Boolean = false، priority: int = 0، useWeakReference: Boolean = false): void

 الآن بعد أن عرفنا الطرق العامة التي يجب أن توفرها فئتانا (وفعلت بالفعل) ، دعنا ننشئ واجهة لها.

 قم بإنشاء ملف ActionScript 3 جديد وقم بإضافة التعليمة البرمجية التالية إليه:

 احفظ الملف كـ IGeolocation.as. هو اصطلاح لأسماء واجهة البادئة بحرف "I".

قد تكون لاحظت بالفعل أن addEventListener () لم يتم سردها بوضوح داخل الواجهة. لا تقلق أنا لم أنس الأمر.  وبدلاً من ذلك ، اخترت تمديد واجهة IEventDispatcher ، التي يوفرها Flash SDK وتتضمن addEventListener (). هذا فعليًا فرض كافة الطرق العامة المذكورة داخل IEventDispatcher لتكون جزءاً من واجهة IGeolocation.  ولكن هذا لا يمثل مشكلة نظرًا لأن كل من تحديد الموقع الجغرافي و GeolocationSimulate تمدد فئة EventDispatcher ولذلك فهي تتضمن تطبيقات لكل هذه الطرق.

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

 الآن بعد أن أصبحت لديك الواجهة الخاصة بك ، ستحتاج إلى اعتماد كل من تحديد الموقع الجغرافي و GeolocationSimulate. دعنا نبدأ مع GeolocationSimulate. .

أضف السطر التالي من التعليمات البرمجية:

هذا هو! مطلوب سطر واحد من التعليمات البرمجية. استخدمنا الكلمة المفتاحية implements لإجبار الفصل على تطبيق الأساليب المذكورة في واجهة IGeolocation.

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

 الآن هناك مشكلة طفيفة مع فئة تحديد الموقع الجغرافي. تم توفيره بواسطة AIR SDK ولا توجد طريقة لتغيير تعريف هذا الفصل بشكل مباشر. لذلك لا يمكننا ببساطة تحميل فئة تحديد الموقع الجغرافي إلى محرر نصوص وإجبارها على تنفيذ IGeolocation.

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

 إنشاء فصل جديد وإضافة ما يلي إليه:

احفظ الفئة ك GeolocationReal.as.

هذه الفئة الجديدة لديها جميع وظائف تحديد الموقع الجغرافي ولكن أيضا بتنفيذ IGeolocation. من الآن فصاعدًا سنستخدم GeolocationReal بدلاً من تحديد الموقع الجغرافي داخل الشفرة.

 لقد انتهينا تقريبًا ، ومن المفترض أن تبدأ الأمور في التوضيح لسبب استخدامنا للواجهات.

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

أولاً ، قم بإزالة عبارة الاستيراد لـ flash.sensors.Geolocation من Application.as حيث سنستخدم الآن GeolocationReal في مكانه:

 الآن قم بإجراء التغييرات التالية على الفصل وحفظه:

هناك شيء آخر يجب علينا القيام به ، ولكن أولاً قم باختبار الإصدار الحالي من FLA على سطح المكتب وعلى هاتف Android. عيّن ثابت GEOLOCATION_REAL إلى true إذا كنت ترغب في الاختبار باستخدام مستشعر GPS الخاص بهاتفك (تذكر تنشيط GPS على جهازك قبل تشغيل التطبيق) ، وإلا فعيّنه على خطأ لاستخدام فئة المحاكاة.

 بفضل استخدام واجهة IGeolocation ، يكون متغير عضو تحديد الموقع الجغرافي قادراً على تمثيل مثيل لفئة GeolocationReal أو GeolocationSimulate. سيظل هذا صحيحًا طالما أنك تجري مكالمات فقط على متغيرات عضو تحديد الموقع الجغرافي التي تنتمي إلى IGeolocation.  أي محاولة لاستدعاء الطرق التي تنتمي إلى GeolocationReal أو GeolocationSimulate ولكن ليس IGeo locationسينتج خطأ مترجم عند النشر.


خطوة 21:  التجميع الشرطي

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

بالنظر إلى أنه يمكن استخدام GeolocationReal أو GeolocationSimulate فقط في أي وقت ، يبدو أنه من المبذر إلى حد ما أن يتم تجميعهما في الواقع في SWF  المنشور النهائي . سيكون مثاليًا إذا لم يتم تضمين GeolocationSimulate فعليًا في SWF للمخرجات إذا كنا نعتزم استخدام GeolocationReal والعكس صحيح.

منذ تقديم Flash CS4 ، أصبح التحويل الشرطي متاحًا لمطوري Flash. يسمح التجميع الشرطي باستخدام ثوابت التكوين لإملاء الرمز الذي يتم تضمينه بالفعل ضمن SWF المنشور.  بمعنى آخر ، يسمح التحويل البرمجي الشرطي بتشغيل كتل من التعليمات البرمجية خلال المشروع وإيقافه.  

بما أننا سنستخدم الترجمة الشرطية ، يمكننا إزالة ثابت GEOLOCATION_REAL الذي كنت تستخدمه لتحديد ما إذا كان سيتم إنشاء GeolocationReal أو GeolocationSimulate. يتم تعيين الثوابت المستخدمة في الترجمة الشرطية من لوحة إعدادات النشر بدلاً من ActionScript.

لنقم بإزالة أسطر التعليمات البرمجية من فئة التطبيق التي لن تكون مطلوبة بعد الآن. يمكنك رؤيتها أدناه بالخط العريض:

الآن داخل Flash CS5 حدد File | نشر الإعدادات .... ستظهر لوحة إعدادات النشر.  

من لوحة Publish Settings ، حدد علامة التبويب Flash:   

انقر فوق الزر إعدادات ... على يمين Script: الخيار. سيؤدي هذا إلى فتح لوحة إعدادات متقدمة لـ ActionScript 3.0:  

انقر فوق علامة التبويب تكوين الثوابت: 

من هنا ، انقر فوق رمز علامة الجمع لإضافة ثابت تكوين. قم بتسمية CONFIG :: GEOLOCATION_REAL الثابتة وقم بتعيينها كقيمة false.

إضافة ثابت تكوين ثاني يسمى CONFIG :: GEOLOCATION_SIMULATE وتعيينه قيمة true.

يجب أن يظهر جزء Const Constations الآن كما يلي: 

انقر فوق موافق لإغلاق لوحة إعدادات متقدمة ActionScript 3.0. أخيرا انقر فوق موافق لإغلاق لوحة إعدادات النشر.

تمتلك الآن ثوابت تكوين يمكنك استخدامها لتحديد الرمز الذي يتم نشره مع ملف SWF الخاص بك. دعونا الدانتيل تلك الثوابت اثنين في فئة التطبيق الخاص بك. أضف الأسطر من التعليمات البرمجية الموجودة في غامق:

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

لقد حددنا في البداية CONFIG :: GEOLOCATION_SIMULATE إلى المعنى الحقيقي أنه سيتم تجميع سطر التعليمة البرمجية التالي داخل هذه المجموعة:

إذا عيّننا CONFIG :: GEOLOCATION_SIMULATE على false و CONFIG :: GEOLOCATION_REAL إلى true ، فسيتم تجميع سطر الشفرة ضمن هذه المجموعة بدلاً من ذلك

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

احفظ التغييرات التي أجريتها على فئة التطبيق.


الخطوة 22: نشر الملفات الشخصية

عندما تريد إنشاء بنية لجهاز Android الخاص بك وترغب في استخدام وحدة GPS الخاصة بالجهاز ، تأكد من تغيير ثوابت التكوين الخاصة بك إلى ما يلي :

للاختبار على سطح المكتب أو على الجوّال دون الاضطرار إلى الاعتماد على وحدة GPS الخاصة به ، قم بتعيين ثوابت التكوين على: 

كما يمكنك أن تتخيل ، فإن تغيير هذه القيم باستمرار داخل لوحة Advanced ActionScript 3.0 Settings قد تتعب بسرعة. من الجيد إنشاء ملفات تعريف متعددة للنشر ، كل منها بإعدادات ثابتة خاصة به.

ضمن Flash CS5 ، حدد ملف | نشر الإعدادات  .... ستظهر لوحة إعدادات النشر.

انقر على رمز إعادة تسمية الملف الشخصي (الرمز الرابع على يسار القائمة المنزلة للملف الشخصي الحالي) واسم الملف الشخصي "ريال".

انقر فوق "موافق" للخروج من لوحة خصائص ملف التعريف ولإرساء اسم ملف التعريف. انقر الآن على علامة التبويب Flash داخل لوحة Publish Settings ثم انقر فوق الزر Settings ... (إعدادات ...) على يمين Script: option. انقر فوق علامة التبويب لتكوين Constants وتأكد من أن ثوابت التكوين كما هو موضح أدناه:

انقر فوق موافق لإغلاق لوحة إعدادات متقدمة ActionScript 3.0. 

الآن من داخل لوحة Publish Settings ، قم بعمل نسخة مكررة من ملف التعريف الحالي عن طريق النقر على أيقونة Duplicate Profile (الرمز الثالث الموجود على يسار القائمة المنزله لملف التعريف الحالي). اسم الملف الشخصي المكرر "محاكاة ".

انقر على "موافق" للخروج من لوحة "تكرار الملفات الشخصية" وإنشاء الملف الشخصي المكرر. 

الآن ضمن لوحة "إعدادات النشر" ، انقر فوق الزر "إعدادات ..." على يمين النص البرمجي: الخيار. انقر فوق علامة التبويب تكوين Constants وقم بتغيير ثوابت التكوين إلى القيم الموضحة أدناه:

انقر فوق موافق لإغلاق لوحة إعدادات متقدمة ActionScript 3.0. انقر فوق موافق لإغلاق لوحة إعدادات النشر. 

احفظ FLA. 

لديك الآن ملفان شخصيان - Real و Simulate - يمكنك التبديل بسهولة بينهما اعتمادًا على نوع البنية التي ترغب في إنشائها عند النشر.  يمكن القيام بذلك بسهولة عن طريق تحديد ملف | نشر الإعدادات ... داخل Flash CS5. الآن من لوحة إعدادات النشر ،  حدد الملف المطلوب من القائمة المنسدلة الحالية:

 انطلق ، حاول نشر الملفات الشخصية على كل من جهاز سطح المكتب وجهاز Android.


الخطوة 23: تحويل السرعة إلى أميال في الساعة

نحن على وشك الانتهاء للجزء الأول من هذا البرنامج التعليمي ولكن دعونا نفعل شيئا واحدا قبل أن نختتم الأمور. 

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

إذن كيف يمكننا تحويل العدادات في الثانية إلى أميال في الساعة؟ ليس من الصعب أن نكون صادقين. 1 متر في الثانية تساوي 2.2369362920544 ميل في الساعة. 

قبل كتابة أي رمز ، أضف حقل نص إلى الجزء الذي سيتم استخدامه لعرض السرعة بالأميال في الساعة. ما عليك سوى نسخ الحقول النصية الديناميكية والثابتة الحالية ووضعها مباشرة أسفل الحقول الحالية.  ضع حقل النص الديناميكي المكرر في (10 ، 270) وقم بوضع حقل النص الثابت المكرر في (95 ، 437). 

 اسم مثيل حقل النص الحيوي المكرر "milesPerHour." تغيير النص داخل حقل نص ثابت مكرر إلى "ميلاً في الساعة."

توضح اللقطة أدناه كيف ستبدو المرحلة الآن: 

إضافة إلى فئة التطبيق متغير عضو عام يمثل حقل النص الديناميكي الجديد: 

إضافة أسلوب إلى فئة التطبيق الخاص بك يقوم بعملية التحويل. هنا الرمز:

أضف الثابت التالي في الجزء العلوي من الفصل الدراسي: 

وأخيراً ، أضف السطر التالي من التعليمات البرمجية إلى أسلوب handleGeolocationUpdate (): 

قد تتساءل عن سبب استخدام Math.round () لتقريب قيمتي السرعة قبل عرضهما في حقول النص الخاصة بهما. هذا في الواقع حل بديل عن خطأ اكتشفته في AIR لنظام التشغيل Android ، مما تسبب في تعطل Google Nexus One عند عرض قيم النقطة العائمة داخل حقول النص. 

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

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

احفظ الصف.  

لتجنب الشك ، إليك الإصدار الحالي من فئة التطبيقات بالكامل: 

نشر وتشغيل التطبيق الخاص بك. يجب أن تشاهد الآن السرعة المقاسة بالمترين في الثانية والأميال في الساعة. يجب أن يظهر لك هذا المنتدى ما يمكن توقعه. 

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


الاستنتاج

الجزء الأول من هذا البرنامج التعليمي قد غطى الكثير من الأرض. لقد تعلمت أساسيات تطوير AIR لنظام Android وقضاء بعض الوقت مع بعض واجهات برمجة التطبيقات الخاصة بـ AIR بما في ذلك دعم GPS والقراءة من نظام الملفات  بالإضافة إلى ذلك ، لقد تطرقنا إلى واجهات وتعلمنا كيف يمكن استخدام الترجمة الشرطية لتضمين واستبعاد الشفرة من بعض البنيات. 

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

شكرا للقراءة وأتمنى أن أراك مرة أخرى للجزء الثاني على أكتيف توتس +.


شكر وتقدير

تم إنشاء العمل الفني المستخدم في هذا البرنامج التعليمي باستخدام الخطوات الموضحة في 'How to Design a Speedometer Icon in Photoshop' - وهو برنامج تعليمي لمعلم التصميم الإسباني ، Roberto Abril Hidalgo.

شكراً جزيلاً لـ Dave Wagner لإشارتي في الاتجاه الصحيح مع مواصفات Mac OS X المطلوبة لهذا البرنامج التعليمي.

شكر خاص لأختتي ، هيلين كالب ، التي تأتي دائمًا لإنقاذي من خلال خبرتها في Photoshop.  

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.