کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش دریافت نمودن موقعیت طول و عرض جغرافیایی در اندروید

آموزش دریافت نمودن موقعیت طول و عرض جغرافیایی در اندروید
شرح مختصر پروژه

در این مقاله قصد داریم تا نحوه استفاده از مکان یابی« GPS » در اندروید را بصورت تصویری در محیط برنامه نویسی Eclipse به شما دانشجویان محترم آموزش دهیم...

توضیحات پروژه

دوره آموزش آندروید

رمز فایل :tahlildadeh.com

 

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

 

با عرض سلام و خسته نباشید به شما دانشجویان محترم آموزشگاه تحلیلگر داده ها. در این مقاله قصد داریم تا نحوه استفاده از مکان یابی« GPS » در اندروید را بصورت تصویری در محیط برنامه نویسی Eclipse به شما دانشجویان محترم آموزش دهیم.

 

اهداف پروژه :

در این پروژه ما  قصد داریم اهداف زیر را پیاده سازی نماییم:

دریافت نمودن موقعیت طول و عرض جغرافیایی

بیشتر دستگاه های اندرویدی قابلیت تعیین موقعیت جغرافیایی فعلی ما را دارا هستند. این کار را می توانیم از طریق شبکه های بی سیم « Wi-Fi »، ماژول سامانه ی موقعیت یابی جهانی « GPS » و تکنولوژی مثلث بندی برج های مخابراتی، انجام دهیم.

برای شروع کار ابتدا می بایست یک پروژه جدید در محیط Eclipse ایجاد نماییم. برای این منظور از منوی File زیر منوی New و سپس زیر منوی Android Application Project را انتخاب می نماییم. (شکل 1)

 

clip_image002[6]

شکل 1

همچنین برای ساده تر شدن و بالا بردن سرعت کار می توانید از منوی ابزار ها، منوی New و سپس Android Application Project را انتخاب نمایید. (شکل 2)

clip_image004[8]

شکل 2

با انجام هر دو روش پنجره جدیدی با عنوان New Android Application باز می گردد. (شکل 3)

clip_image006

شکل 3

در این پنجره قسمت هایی وجود دارد که در زیر به توضیح آنها می پردازیم :

Application Name : در این فیلد می بایست نام برنامه خود را وارد نمایید. توجه داشته باشید که هر مقداری را که در این فیلد وارد نمایید، برنامه با این نام در لیست برنامه های نصب شده قرار خواهد گرفت.

در این فیلد می توانید یک رشته فارسی نیز وارد نمایید.

 

Project Name : در این فیلد می بایست نام کلی پروژه خود را وارد نمایید و بهتر است که یک رشته با معنا و مرطبت با برنامه خود وارد نمایید.

زمانی که مقدار فیلد Application Name را وارد می نمایید، فیلد Project Name نیز بصورت خودکار همان نام را وارد می نماید. توجه داشته باشد که اگر فیلد Application Name را با یک رشته فارسی مقداردهی نمودید، برای جلوگیری از خطاها می بایست رشته فارسی تولید شده در فیلد Project Name را با یک رشته معادل انگلیسی جایگزین نمایید.

Package Name :  در این فیلد می بایست پکیج پروژه خود را تعیین نمایید که بهتر است آدرس وب سایت خود را بدون درج http  و www و بصورت از آخر به اول و به همراه نام وارد شده در فیلد Project Name وارد نمایید. این نوع مقداردهی به برنامه های مارکت نظیر بازار و Google Paly این امکان را میدهد تا زمانی که نسخه جدیدی از برنامه شما ساخته و آماده منتشر گردید باخبر شده و نسخه جدید برنامه تان را جایگزین نسخه قبلی نماید.

Minimum Required SDK : در این لیست انواع API های « نسخه های سیستم عامل اندروید » منتشر شده توسط گوگل وجود دارد. با انتخاب هر کدام از آنها مشخص می نمایید که برنامه تان به چه حداقل نسخه ای از سیستم عامل اندروید نیاز دارد. برای مثال اگر گزینه API 14 را انتخاب نمایید، برنامه تان در سیستم عامل اندروید پایین تر از اندروید 4 یا همان Ice-Cream Sandwich، نصب و اجرا نمی گردد.

اگر از امکانات خاص نسخه های جدیدتر سیستم عامل اندروید استفاده نمی نمایید پیشنهاد می گردد که API 8  را انتخاب نمایید. چرا که با انتخاب این نسخه از سیستم عامل اندروید مطمئن خواهید بود که برنامه شما در تمامی گوشی ها و تبلت ها اجرا خواهد شد.

Target SDK : در این لیست انواع API های « نسخه های سیستم عامل اندروید » منتشر شده توسط گوگل وجود دارد. با انتخاب هر کدام از آنها مشخص می نمایید که بالاترین نسخه اندرویدی که برنامه شما می تواند در آن نصب و اجرا گردد کدام نسخه است. بدیهی ست که هرچه سطح API انتخاب شده بالاتر باشد، گوشی ها و تبلت های جدید نیز می توانند از برنامه شما استفاده نمایند.

Compile With: در این لیست انواع API های « نسخه های سیستم عامل اندروید » منتشر شده توسط گوگل وجود دارد. با انتخاب هر کدام از آنها مشخص می نمایید که برنامه Eclipse از کدام نسخه از سیستم عامل اندروید برای نوشتن کلاس های برنامه و همچنین کامپایل و تست نمودن آن استفاده نماید.

Theme: در این لیست می توانید یک Theme برای برنامه خود انتخاب نمایید.

توجه داشته باشید زمانی که مقدار Compile With را کمتر از API 14 انتخاب نمایید، از این قسمت نمی توانید استفاده نمایید و می بایست از لیست موجود گزینه None رو انتخاب نمایید.

پس از مقداردهی نمودن فیلد های ذکر شده بر روی دکمه Next کلیک می نماییم تا به مرحله بعدی ایجاد پروژه برویم. (شکل 4)

clip_image008[4]

شکل 4

در مرحله بعدی اگر گزینه Create custom launcher icon را انتخاب نمایید، برنامه Eclipse به شما اجازه میدهد تا برای برنامه خود یک عکس جهت ساختن icon انتخاب و یا با استفاده از ابزار های خود برنامه Eclipse، icon مورد نظر خود را ترسیم نمایید. توجه داشته باشید که در صورت عدم انتخاب این گزینه، صفحه مربوطه برای شما باز نخواهد شد.

همچنین اگر گزینه Create Activity را انتخاب نمایید، برنامه Eclipse به شما اجازه میدهد که نام و نوع activity برنامه تان را انتخاب نمایید.

این دو گزینه را انتخاب می نماییم و سایر گزینه ها را به حالت پیش فرض خود می گذاریم. حال مجددا بروی دکمه Next کلیک می نماییم تا به مرحله بعدی ایجاد پروژه برویم. (شکل 5)

clip_image010[4]

شکل 5

در مرحله بعدی می توانید برای برنامه خود یک icon انتخاب و یا رسم نمایید.

دکمه image برای انتخاب یک عکس ترجیحا با فرمت png به عنوان icon برنامه

دکمه Clipart برای انتخاب یک clipart « شکلک » به عنوان icon برنامه

دکمه Text برای ورود یک نوشته به عنوان icon برنامه مورد استفاده قرار می گیرند.

ما دکمه image را انتخاب و پس از انتخاب کردن عکس مورد نظر به عنوان icon برنامه بر روی دکمه Next کلیک می نماییم تا به مرحله بعدی ایجاد پروژه برویم. (شکل 6)

clip_image012[6]

شکل 6

در مرحله بعدی گزینه Create Activity را انتخاب می نماییم و از لیست موجود که بیانگر انتخاب نوع Activity برنامه می باشد گزینه Blank Activity را انتخاب می نماییم. (شکل 7)

clip_image014[8]

شکل 7

در مرحله آخر نیز باید برای activity و layout خود یک نام انتخاب نمایید. ما نام انتخاب شده پیش فرض را قبول کرده و بر روی دکمه Finish کلیک می نماییم تا پروژه مان ساخته شود. (شکل 8)

 

 

 

 

 

clip_image016[8]

شکل 8

تا این جای کار ما پروژه خود را در برنامه Eclipse ایجاد کرده ایم. حال برای ادامه کار می بایست layout برنامه خود را طراحی نماییم.

برای این منظور یک Button بر روی layout خود قرار می دهیم. (شکل 9)

clip_image017

شکل 9

همچنین مقادیر لازمه برای نمایش متن Button را در فایل string.xml وارد می نماییم. (شکل 11)

clip_image018[8]

شکل 10

در مرحله بعدی می بایست کلاسی ایجاد نماییم تا بوسیله آن بتوانیم از GPS استفاده نماییم. برای این کار ابتدا بر روی آیکون clip_image019[4] در نوار ابزار کلیک می نماییم. بعد از کلیک نمود بر روی آیکون فوق الذکر پنجره Java New Class باز می گردد. در این پنجره و در فیلد Package، نام پکیجی که تمایل داریم کلاسمان به آن اضافه گردد را انتخاب می نماییم. برای راحتی کار نیز می توانیم با انتخاب نمودن دکمه Browse، پکیج مورد نظر خود را انتخاب نماییم. (شکل 11)

clip_image021

شکل 11

 

 

سپس در فیلد Name، نام کلاس خود را وارد نموده و بر روی دکمه Finish کلید می نماییم. (شکل 12)

clip_image023

شکل 12

در مرحله بعدی می بایست کدهای لازم را در این کلاس وارد نماییم. ابتدا متغیرهای لازم و همچنین متد  Constructorرا تعریف می نماییم. (شکل 13)

 

 

clip_image024

شکل 13

از متغیرهای isGPSEnabled و isNetworkEnabled برای بررسی نمودن فعال بودن و یا نمودن Wi-Fi و GPS و دریافت مختصات جغرافیایی از آنها در دستگاه اندرویدی که برنامه مان را اجرا نموده است، استفاده می گردد.

با استفاده از کلاس LocationManager به قابلیت سرویس GPS سیستم عامل اندروید دسترسی پیدا خواهیم نمود و با استفاده از کلاس Location مقادیر طول و عرض جغرافیایی را بدست خواهیم آورد.

متغیر MIN_DISTANCE_CHANGE_FOR_UPDATE برای تعیین نمودن حداقل فاصله برای تغییر به روز رسانی در دریافت اطلاعات طول و عرض جغرافیایی، مورد استفاده قرار می گیرد.

متغیر MIN_TIME_BW_UPDATES برای تعیین نمودن حداقل زمان ما بین به روز رسانی در دریافت اطلاعات طول و عرض جغرافیایی، مورد استفاده قرار می گیرد. توجه داشته باشید که این زمان می بایست به میلی ثانیه تعیین گردد.

در متد Constructor، با استفاده از تابع getLocation که خود اقدام به تعریف آن نموده ایم به سرویس GPS سیستم عامل اندروید وصل شده و موقعیت مکانی خود را دریافت می نماییم. در ادامه کدهای مربوط به تابع getLocation را وارد می نماییم. (شکل 14)

 

clip_image026

شکل 14

در تابع getLocation، ابتدا از بلاک try / catch استفاده نموده ایم تا در صورت ایجاد خطا در زمان اجرای برنامه آنرا کنترل نموده و از ایجاد خطای force close جلوگیری نماییم.

در خط ابتدایی بلاک try، با استفاده از متد getSystemService شی mContext، دسترسی به سرویس GPS ایجاد نموده ایم. در دو خط بعدی نیز با استفاده از متد isProviderEnabled شی locationManager، چک نموده ایم که کدام یک از قابلیت های Wi-Fi و GPS فعال می باشد.

همان طور که در ابتدای مقاله ذکر گردید، برای استفاده از سیستم مکان یابی می توانیم از شبکه های بی سیم « Wi-Fi »، ماژول سامانه ی موقعیت یابی جهانی « GPS » و یا تکنولوژی مثلث بندی برج های مخابراتی استفاده نماییم که با استفاده از دو دستور ذکر شده چک می نماییم که کدامیک از ماژول سامانه ی موقعیت یابی جهانی و یا شبکه های بی سیم دستگاه اندرویدی مان فعال می باشد.

در خط بعد، با استفاده از دستور شرطی if چک نموده ایم که آیا یکی از دو ماژول چک شده برای ادامه کار فعال می باشد یا خیر؟ در صورتی که یکی از ماژول های چک شده فعال شده باشد وارد بدنه دستور شرطی if می شویم. در بدنه دستور شرطی if، ابتدا مقدار متغیر canGetLocation را برابر با true قرار می دهیم. « در ادامه از این متغیر برای نمایش دادن کادر پیغام مبنی بر فعال نمودن ماژول GPS استفاده خواهیم نمود » سپس مجددا با استفاده از دستور شرطی if چک نموده ایم که آیا Wi-Fi دستگاه اندرویدی مان فعال می باشد یا خیر؟ در صورت فعال بودن، وارد بدنه دستور شرطی if می شویم و با استفاده از متد requestLocationUpdates شی

locationManager آماده دریافت مختصات طول و عرض جغرافیایی می شویم. این متد چهار پارامتر ورودی دریافت می نماید که پارامتر اول نوع ماژولی می باشد که قصد دریافت مختصات با استفاده از ان را داریم. پارامتر دوم یک مقدار از نوع داده ای Long می باشد و حداقل زمان ما بین به روز رسانی در دریافت اطلاعات طول و عرض جغرافیایی را مشخص می نماید. پارامتر سوم نیز یک مقدار از نوع داده ای Long می باشد و حداقل فاصله برای تغییر به روز رسانی در دریافت اطلاعات طول و عرض جغرافیایی را مشخص می نماید و پارامتر آخر نیز به صورت پیش فرض با مقدار this، مقداردهی می شود.

در خط بعدی، با استفاده از متد getLastKnownLocation شی locationManager، آخرین مختصات طول و عرض جغرافیایی را دریافت می نماییم و در شئی با نام location ذخیره می نماییم.

حال اگر Wi-Fi دستگاه اندرویدی مان فعال نباشد، دستور شرطی بعدی که تعریف نموده ایم اجرا می گردد. در این دستور چک نموده ایم که اگر ماژول GPS دستگاه اندرویدی مان فعال باشد و مقدار شی location نیز برابر با null باشد « قبلا از Wi-Fi استفاده نکرده باشیم »، وارد بدنه دستور شرطی if می شویم و با استفاده از متد requestLocationUpdates شی locationManager آماده دریافت مختصات طول و عرض جغرافیایی می شویم و همچنین با استفاده از متد getLastKnownLocation شی locationManager، آخرین مختصات طول و عرض جغرافیایی را دریافت می نماییم و در شی location ذخیره می نماییم.

در انتها، با استفاده از دستور return، مقدار شی location را به برنامه بر می گردانیم.

در ادامه متدی را تعریف می نماییم که با استفاده از آن بتوانیم به مقدار متغیر canGetLocation دسترسی پیدا نماییم. (شکل 15)

clip_image027

شکل 15

بعد از تعریف نمودن متد canGetLocation، متد دیگری را تعریف می نماییم که با استفاده از آن می توانیم پنجره تنظیمات را جهت فعال نمودن ماژول GPS باز نماییم. (شکل 16)

 

clip_image029

شکل 16

در متد showSettingsAlert، یک کادر محاوری ایجاد نموده ایم که شامل دو دکمه Settings و Cancel است که در صورت انتخاب نمودن دکمه Settings توسط کاربر وارد بخش Location برنامه تنظیمات دستگاه اندرویدی خود می شویم و در صورت انتخاب دکمه Cancel کادر محاوره ای بسته می شود.

برای ساخت یک کادر محاوری از کلاسی به نام AlertDialog و متد Builder استفاده می نماییم. برای ساختن یک شی از این کلاس، می بایست پارامتر ورودی را برای متد Builder مشخص نماییم که شئی از نوع Context می باشد. توجه داشته باشید که برای مقار دهی نمودن آن حتما می بایست از نام کلاس Activity به همراه کلمه کلیدی this استفاده گردد.

در خط بعدی، با استفاده از متد setTitle، عنوان کادر محاوره ای خود را مقداردهی نموده ایم و در خط بعدی و با استفاده از متد setMessage، یک متن دلخواه که قصد نمایش آن به کاربر را داریم، مقداردهی نموده ایم. با استفاده از متد های setPositiveButton و setNegativeButton دکمه های Setting و Cancel کادر محاوره ای را ایجاد نموده ایم و با استفاده از کلاس DialogInterface.OnClickListener() و متد onClick، رویداد کلیک را برای دکمه های ایجاد شده شبیه سازی نموده ایم. در انتها با استفاده از متد show، کادر محاوره ای ساخته شده را به کاربر نمایش می دهیم.

هرگاه بخواهیم از داخل Activity جاری Activity و یا برنامه ای دیگر را اجرا نماییم می بایست از کلاس Intent استفاده نماییم. برای ساختن یک شی از این کلاس، می بایست پارامتر ورودی را برای آن مشخص نماییم که action اکتیویتی و یا برنامه دیگر مورد نظر می باشد. بعد از ساختن شی با استفاده از متد startActivity شی ساخته شده از ملاس Context، action تعیین شده را اجرا می نماییم.

متدهای دیگری با نام های onLocationChanged، onProviderDisabled، onProviderEnabled و onStatuseChange وجود دارند که زمانی که کلاس خود را در زمان تعریف نمودن از کلاس LocationListener بسط می دهیم، می بایست حتما دوباره نویسی شوند. (شکل 17)

شکل 17

همان گونه که مشاهده می نمایید ما تنها سه متد ابتدا فوق الذکر را دوباره نویسی نموده ایم. متد onLocationChanged زمانی اتفاق صدا زده می شود که متد getLastKnownLocation کار خود را با موفقیت انجام داده باشد. معمولا از این متد برای دریافت مختصات طول و عرض جغرافیایی استفاده می گردد.  در این متد ما پس از دریافت مختصات ذخیره شده در شی location، آنها را در یک متغیر از نوع String و با نام str قرار داده ایم و یک متن نمایشی جهت نمایش دادن به کاربر ایجاد نموده ایم و با استفاده از کلاس Toast آنرا به کاربر نمایش داده ایم.

کلاس Toast کلاسی می باشد که برای نمایش دادن پیغام هایی « با توجه به اتفاقاتی که در طول اجرای برنامه رخ می دهد » به کاربر، مورد استفاده قرار می گیرد. این کلاس سه پارامتر ورودی دارد که مقداردهی کردن هر سه پارامتر الزامی می باشد. پارامتر اول، شئی از نوع Context و پارامتر دوم، پیغام مورد نظر جهت نمایش به کاربر و پارامتر سوم، مدت زمان به نمایش درآمدن کادر پیغام می باشد که می توان از دستور Toast.LENGTH_LONG و یا Toast.LENGTH_SHORT و یا یک عدد صحیح به میلی ثانیه باشد.

متد های onProviderDisabled و onPrividerEnabled زمانی اجرا می شوند که ماژول GPS توسط کاربر فعال یا غیر فعال گردد.

برای غیر فعال کردن سرویس ایجاد شده « LocationListener » می توانیم از متدی که خودمان تعریف نموده ایم استفاده نماییم. (شکل 18)

 

 

شکل 18

در اینجا کلاس GPSTracker تمام می شود و می بایست کد های اصلی برنامه را در کلاس MainActivity وارد نماییم.

اولین کدی که می بایست به کلاس MainActivity اضافه نماییم متد onCreate می باشد. این متد یکی از متدهای اصلی برنامه و همین طور چرخه حیات برنامه های اندرویدی می باشد و زمانی که برنامه برای اولین بار اجرا می گردد و یا دستگاه اندرویدی ما از حالت portrait به حالت landscape و یا بر عکس تغییر می کند، این متد فراخوانی می گردد.

یکی از دستورات مهمی که باید به این متد اضافه شود دستور setContentView است. وظیفه این دستور به نمایش در آوردن layout برنامه می باشد.(شکل 19)

شکل 19

مقدار activity_main نام فایل xml مربوط به layout برنامه مان می باشد.

همچنین دستور savedInstanceState حالت جاری layout برنامه را ذخیره می نماید. به این معنا که، فرض نمایید بر روی layout خود یک ابزار EditText قرار داده اید و مقدار نام خودتان را درون آن وارد کرده اید. زمانی که حالت دستگاه اندرویدی خودتون را به landscape و یا portrait تغییر دهید مشاهده می نمایید که مقدار نام شما هنوز در EditText وجود دارد و پاک نشده است. دلیل آن به خاطر استفاده از دستور فوق می باشد.

در مرحله بعد، یک دسترسی به دکمه خود ایجاد می نماییم و شئی از کلاس GPSTracker تعریف می نماییم. (شکل 20)

شکل 20

بعد از ایجاد نمودن دسترسی و تعریف شی لازم، می بایست که از کلاس ایجاد شده استفاده نماییم و موقعیت مکانی خود را پیدا نماییم. (شکل 21)

شکل 21

کدهای بالا را در ادامه کدهای وارد شده قبلی در متد onCreate قرار میدهیم.

در کد بالا، ابتدا با استفاده از خصوصیت setOnClickListener، برای دکمه خود رویداد کلیک را شبیه سازی نموده ایم. در مرحله بعد، شی gps تعریف شده خود را ساختیم. همان طور که در زمان تعریف متد Constructor کلاس GPSTracker تعریف نموده ایم، در زمان ساخت شی از کلاس فوق یک پارامتر ورودی از نوع کلاس Context دریافت می کند. توجه داشته باشید که به علت استفاده از کادر محاوره ای « AlertDialog »، حتما می بایست از دستور MainActivity.this استفاده نماییم.

زمانی که شی ساخته شود، به صورت خودکار سعی در دریافت موقعیت مکانی ما می نماید. بعد از تعریف نمودن شی و با استفاده از متد canGetLocation چک نموده ایم که اگر Wi-Fi و یا ماژول GPS غیر فعال بود، متد showSettingAlert اجرا شود. با اجرا شدن این متد، کادر محاوره ای نمایش داده می شود و کاربر در صورت انتخاب دکمه Settings به قسمت Location برنامه Settings دستگاه اندرویدی منتقل می شود و می تواند ماژول GPS را فعال نماید.

در صورتی که Wi-Fi و یا ماژول GPS فعال باشد و کاربر دکمه Get Location  را انتخاب نماید موقعیت مکانی آن نمایش داده خواهد شد. (شکل 22)

شکل 22

برای تست نمودن برنامه توسط خود برنامه Eclipse می توانید به شکل زیر عمل نمایید.

بعد از اجرا نمودن برنامه در emulator مورد نظرتان، از منوی Window > Open Perspective > DDMS را انتخاب می نمایید. با انجام این عمل محیط جدیدی در برنامه Eclipse ایجاد می گردد. در محیط جدید ایجاد شده،  از پنجره Devices، نام emulator را انتخاب نمایید و از میان زبانه های موجود، زبانه Emulator Control را انتخاب نمایید. سپس در قسمت Location Controls، مختصات طول عرض جغرافیایی فرضی خود را وارد نمایید و بر روی دکمه send کلیک نمایید. بعد از آن به برنامه خود در emulator اجرا شده رفته و برنامه GPS Basic را اجرا نمایید و دکمه Get Location انتخاب نمایید. با انجام ابن عمل مختصات فرضی وارد شده در یک کادر پیغام نمایش داده خواهد شد. (شکل 23)

 

شکل 23

 

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

شاد و پیروز باشید.

 

 

1394/09/04 9502 546
رمز عبور : tahlildadeh.com یا www.tahlildade.com
نظرات شما

نظرات خود را ثبت کنید...