وبلاگ - مطالب آموزشی

0
261
نحوه کار با Geofences در اندروید – بخش دوم

نحوه کار با Geofences در اندروید – بخش دوم

در مطلب قبلی با کلیاتی از geofence آشنایی پیدا کردید، در ادامه قصد داریم با ساخت یک اپلیکیشن ساده اندروید نحوه کار با geofence را به شما آموزش دهیم، با ما همراه باشید.

ساخت یک اپلیکیشن Geofencing

در این مطلب آموزشی به ساخت یک اپلیکیشن ساده پرداخته می شود که به نظارت بر موقعیت قرارگیری کاربر پرداخته و زمانی که کاربر به یک منطقه Geofence وارد یا از آن خارج شود یک نوتیفیکیشن ارسال می کند. این اپلیکیشن تنها شامل یک Activity و یک IntentSerivce است. یک نگاه سریع و اجمالی نیز به GoogleMap ،GoogleApiClient و FusedLocationProviderApi می اندازیم و چند نکته از Geofence API را نیز مورد بررسی قرار می دهیم.

blog_19517_1

گام 1: راه اندازی پروژه

GeofenceApi بخشی از Google Play Services می باشد، به منظور دسترسی به آن لازم است تا محیط توسعه خود را به درستی تنظیم کرده و یک نمونه اولیه از GoogleApiClient بسازید. یک پروژه با Activity خالی ساخته و فایل build.gradle آن را با استفاده از کدهای زیر تغییر دهید و پروژه را همگام سازی نمایید.

گام 2: مجوزها

به منظور ساخت و استفاده از Geofence باید مجوزهای درستی را تعیین کنیم، به این منظور لازم است تا مجوزهای زیر را به فایل منیفست پروژه اضافه نمایید.

از نسخه 6.0 اندروید اپلیکیشن در طول اجرا از کاربر درخواست مجوز می کند، در حالی که این فرآیند در گذشته در مرحله نصب اپلیکیشن صورت می پذیرفت و در ادامه به این موضوع نیز پرداخته خواهد شد.

گام 3: ساخت یک لی اوت

پروژه موردنظر شامل یک لی اوتMainActivity می باشد، این لی اوت latitude و longitude کنونی گوشی و فرگمنت GoogleMap که به نمایش Geofence و موقعیت قرارگیری کاربر می پردازد را در بر می گیرد.

از آنجا که activity_main.xml بسیار ساده است، تنها بر روی عنصر MapFragment متمرکز می شویم. لی اوت تکمیل شده در فایل های منبع این مطلب آموزشی قرار داده شده و به منظور کسب جزئیات بیشتر می توانید به آن مراجعه نمایید.

گام 4: Google Maps API Key

به منظور استفاده از MapFragment، لازم است تا یک نمونه اولیه GoogleMap نیز ساخته شود. اول از همه به یک API key نیاز دارید، پس از دریافت این کلید آن را به فایل منیفست پروژه خود بیفزایید.

کار را با ساخت نمونه اولیه از GoogleMap آغاز می کنیم.

GoogleMap.OnMapReadyCallBack ،GoogleMap.OnMapClickListener و GoogleMap.OnMarkerClickListener را در کلاس Activity جاسازی کرده و مپ را اینشیالایز کنید.

گام 5: GoogleApiClient

به منظور استفاده از رابط GeofenceApi باید از GoogleApiClient استفاده کنیم. برای این کار باید GoogleApiClient.ConnectionCallbacks و GoogleApiClient.OnConnectFailedListener را مانند زیر در Activity قرار دهیم.

گام 6: FusedLocationPoviderApi

برای ادامه کار به موقعیت کنونی کاربر نیاز داریم و رابط FusefdLocationProviderApi این اطلاعات را در اختیار ما قرار می دهد و ارائه دهنده سطح بالایی از کنترل برای درخواست موقعیت است. توجه به این نکته ضروری است، چرا که این درخواست ها تاثیر مستقیمی بر روی مصرف باتری گوشی دارند و باید در استفاده از آنها محتاطانه عمل کرد.

در این مرحله باید LocationListener را جاسازی کنیم. با ساخت یک درخواست Location از این بابت که کاربر مجوز موردنظر را در اختیار قرار داده مطمئن شوید و سپس موقعیت کنونی آنها را بر روی صفحه به نمایش بگذارید.

شایان ذکر است که LocationRequest ساخته شده در بالا برای استفاده در محیط تولید بهینه نیست، چرا که وقفه UPDATE_INTERVAL بسیار کوتاه است و همین امر مصرف باتری را افزایش می دهد و راه حل بهتر به صورت زیر می باشد:

گام 7: مارکرهای GoogleMap

Activity به دو marker نیاز دارد، LocationMarker از latitude و longitude داده شده توسط FusedLocationProviderApi برای اطلاع رسانی درباره موقعیت کنونی گوشی استفاده می کند. GeofenceMarker نیز هدف ساخت geofence است و از آخرین لمس بر روی مپ برای بازیابی موقعیت استفاده می کند.

گام 8: ساخت یک Geofence

در این مرحله نوبت ساخت یک geofence رسیده، ما از geoFenceMarker به عنوان نقطه مرکزی geofence استفاده می کنیم.

بعد از آن یک آبجکت GeofencingRequest می سازیم.

از آبجکت PendingIntent برای فراخوانی IntentService که GeofenceEvent را مدیریت می کند استفاده می کنیم و بعدا کلاس GeofenceTransitionService.class را می سازیم.

یک geofence را نیز به عنوان مرجع بر روی نقشه ترسیم می کنیم.

متد ()startGeofence مسئول شروع فرآیند geofencing در کلاس MainActivity می باشد.

گام 9: سرویس انتقال Geofence

در این مرحله قادر به ساخت کلاس GeofenceTransitionService.class می باشیم، این کلاس از IntentService اکستند شده و مسئول مدیریت GeofencingEvent می باشد. اول از همه ایونت را از ایتنت دریافت شده می گیریم.

بعد نوع انتقال geofencing موردنظر را چک می کنیم. اگر انتقال صورت گرفته همان باشد که در نظر داشته ایم، به بازیابی لیستی از geofenceهای تریگر شده پرداخته و با استفاده از اکشن های مناسب یک نوتیفیکیشن را به نمایش می گذاریم.

متدهای کمکی نیز به منظور درک بهتر پیاده سازی کلاس درج شده اند.

تست کردن

تست بر روی یک گوشی مجازی

تست geofencing بر روی یک گوشی مجازی بسیار ساده تر بوده و راه های متعددی برای این کار وجود دارند. در اندروید استودیو یک گوشی مجازی را باز کنید و بر روی دکمه more options در قسمت راست و پایین کلیک کنید.

blog_19517_2

در تب Location در قسمت چپ مختصات موقعیت موردنظر خود را وارد نمایید.

blog_19517_3

استفاده از کامندهای telnet برای کنترل گوشی مجازی راه حل خوبی است، برای این کار باید از طریق کامند لاین و دستور زیر به گوشی موردنظر خود متصل شوید:

پورت گوشی در پنجره گوشی مجازی نمایش داده خواهد شد که معمولا برابر با عدد 5554 است.

احتمال دارد که نیاز به تایید این اتصال با استفاده از auth_token داشته باشید، اما کامند لاین مکان آن را به شما نمایش خواهد داد. به آن مکان رفته و توکن را کپی کرده و [auth [YOUR_AUTH_TOKEN را تایپ کنید.

در این مرحله قادر به تعیین موقعیت گوشی با اجرای کامند زیر هستید:

جمع بندی

استفاده از Geofencing به شما در راستای افزایش تعامل با کاربران یاری می رساند. افزودن Geofencing به یک پروژه ساده است، اما باید به میزان مصرف باتری و توان گوشی نیز توجه کنید. برای این کار باید اندازه geofence و نرخ آپدیت را به دقت انتخاب کرد، چرا که هر دوی این موارد میزان مصرف اپلیکیشن شما را تحت تاثیر قرار می دهند.

تست در این مورد بسیار اهمیت دارد، چرا که تنها از طریق تست اپلیکیشن میزان مصرف آن مشخص می شود. لازم است تا امکان غیرفعال سازی قابلیت geofencing به طور کامل نیز در اختیار کاربر قرار گیرد، چرا که ممکن است کاربران تمایل و نیازی به استفاده از این قابلیت نداشته باشند.

 

منبع:

http://code.tutsplus.com

این نوشته را به گوگل توصیه کنید :

بسته های آموزشی جذاب!بیشتر