مشخصات مقاله
-
3962
-
0.0
-
10459
-
0
-
0
آموزش کار با مکان یابی در اندروید-کار با api مکان یابی در android
رابط برنامه سازی کاربردی مکان یابی اندروید (Android Location API)
فصل پیش رو کاربرد API location اندروید را برای شما تشریح می کند . بر اساس Eclipse 3.7, java 1.6 و Android 4.0 (ice cream sandwich) نوشته شده است .
فهرست محتوا
1. رابط برنامه سازی کاربردی مکان یابی اندروید (android location API
- کشف موقعیت جغرافیایی جاری
- کلاس LocationManager چه کارایی دارد ؟
- کلاس LocationProvider چه کاربردی دارد ؟
- انتخاب LocationProvider با استفاده از شئ Criteria
- هشدار مجاورت (proximity alert)
- آموزش کلاس Geocoder
- امنیت
- اعلان به کاربر برای فعال سازی GPS
2. بهره گیری از GPS و تعیین مکان فعلی
- فعال سازی GPS بر روی شبیه ساز
- تعیین موقعیت جغرافیایی
3. آموزش : استفاده از رابط برنامه سازی کاربردی مکان یابی اندروید
- ایجاد پروژه
- افزودن مجوزهای لازم
- Activity
- مرحله ی اجرا و تست
رابط برنامه سازی کاربردی مکان یابی اندروید (android location API)
کشف موقعیت جغرافیایی جاری
عمده ی دستگاه های اندروید قابلیت تعیین موقعیت جغرافیایی فعلی را دارند . این امر را می توان از طریق شبکه های wi-fi, ماژول GPS (global positioning system = سامانه ی موقعیت یابی جهانی) و تکنولوژی مثلث بندی برج های مخابراتی (cell tower triangulation) امکان پذیر ساخت . اندروید حاوی پکیج android.location می باشد که رابط برنامه سازی کاربردی لازم را برای تعیین موقعیت جغرافیایی فعلی فراهم می کند .
کلاس LocationManager چه کارایی دارد ؟
کلاس LocationManager دسترسی به سرویس مکان یابی اندروید (Android location service) را فراهم می سازد . سرویس های مذکور امکان دسترسی به مکان یاب ها (location provider), ثبت گوش فراخوان هایی (listener) ویژه ی بروز رسانی مکان نماها و هشدارهای مجاورت (proximity alert) را فراهم می کند .
کلاس LocationProvider چه کاربردی دارد ؟
کلاس LocationProvider در حقیقت همان کلاس ارشد یا superclass کلاس های location provider گوناگون است که اطلاعاتی در رابطه با مکان کنونی شما ارائه می دهند . اطلاعات بدست آمده سپس در کلاس location ذخیره می گردند .
دستگاه اندروید ممکن است LocationProvider های متعددی در دسترس داشته باشد که برنامه نویس بنا به نیاز خود کلاس یا کلاس های مربوطه را انتخاب می کند . در بیشتر موارد LocationProvider های ذیل برای برنامه نویس قابل استفاده می باشند .
انتخاب LocationProvider با استفاده از شئ Criteria
برای انتخاب بهترین مکان یاب به صورت انعطاف پذیر می توان از شئ Criteria بهره گرفت که به وسیله ی آن می توان تعیین کرد provider مورد نظر چگونه انتخاب شود .
می توانید یک شئ LocationListener با کلاس LocationManager ثبت یا رجیستر کنید تا بدین وسیله موقعیت جغرافیایی را به طور متناوب دریافت کنید .
هشدار مجاورت (proximity alert)
همچنین می توان یک Intent ثبت کرد که امکان تعریف proximity alert را فراهم می کند . هشدار مذکور در صورت قرار گیری دستگاه مورد نظر در طول و عرض جغرافیایی و شعاع تعیین شده فعال می شود .
آموزش کلاس Geocoder
کلاس Geocoder امکان کشف موقعیت و مختصات جغرافیایی یک آدرس معین را برای شما فراهم می کند.
از این فرایند به عنوان forward and reverse geocoding نیز یاد می شود . کلاس مزبور برای انجام عملیات لازمه از سرویس آنلاین گوگل بهره می گیرد .
امنیت
اگر می خواهید به حس گر GPS دسترسی پیدا کنید, در آن صورت به مجوز ACCESS_FINE_LOCATION نیاز پیدا می کنید, در غیر این صورت به مجوز ACCESS_COARSE_LOCATION نیاز دارید .
اعلان به کاربر برای فعال سازی GPS
کاربر می تواند تصمیم بگیرد آیا GPS فعال شود یا خیر .
از طریق متد isProviderEnabled() می توان دریافت آیا LocationManager فعال سازی شده یا خیر . چنانچه LocationManager فعال نشده بود, در آن صورت برنامه نویس می تواند به وسیله ی Intent ی با عملیات Settings.ACTION_LOCATION_SOURCE_SETTINGS برای کلاس android.provider.Settings کاربر را به تنظیمات ارجاع دهد .
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean enabled = service
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// check if enabled and if not send user to the GSP settings
// Better solution would be to display a dialog and suggesting to
// go to the settings
if (!enabled) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
معمولاً برنامه نویس اعلان AlarmDialog را باز می کند تا از این طریق از کاربر بپرسد آیا مایل است GPS را فعال کند یا اینکه برنامه ی مربوطه که به ماژول ذکر شده احتیاج دارد بسته شود .
برنامه نویس این اجازه را ندارد که GPS را در کد فعال کند, بلکه این امکان فقط مختص کاربر می باشد .
بهره گیری از GPS و تعیین مکان فعلی
فعال سازی GPS بر روی شبیه ساز
باید ماژول GPS را بر روی دستگاه آزمایشی خود فعال کنید . در صورت انجام تست بر روی شبیه ساز, چنانچه GPS فعال نشده باشد, و اگر شما از LocationManager استفاده کنید "NULL" برگردانده می شود .
Activity برنامه ی Google Maps طبیعتاً خود باید اتوماتیک وار وسیله ی GPS را در شبیه ساز فعال سازی کند, اما چنانچه تمایل دارید location manager را خود به طور مستقیم بکار ببرید, این کار را نیز باید خود انجام دهید. در حال حاضر به نظر می رسد مشکلی در این زمینه ی بخصوص وجود دارد .
برنامه ی Google Maps را روی شبیه ساز راه اندازی کرده و موقعیت جغرافیایی کنونی را درخواست کنید, این کار به شما اجازه می دهد GPS را فعال کنید . حال مختصات جدید GPS را به شبیه ساز اندروید ارسال کنید .
تعیین موقعیت جغرافیایی
شما می توانید "DDMS" Perspective محیط برنامه نویسی Eclipse را جهت ارسال موقعیت جغرافیایی خود به شبیه ساز یا دستگاه متصل مورد استفاده قرار دهید . به منظور باز کردن این Perspective کافی است Window → Open Perspective → Other... → DDMS. را انتخاب کنید
در بخش Emulator Control شما می توانید مختصات جغرافیایی را وارد کرده و دکمه ی Send را فشار دهید .
می توان موقعیت جغرافیایی را در شبیه ساز اندروید از طریق telnet انجام داد . یک پنجره ی فرمان (console) باز کرده و به دستگاه مربوطه متصل شوید . شماره ی پورت دستگاه شما در قسمت فوقانی (نوار عنوان) شبیه ساز نمایان می باشد .
telnet localhost 5554موقعیت را به وسیله ی فرمان ذیل انتخاب و تنظیم کنید .
geo fix 13.24 52.31
آموزش : استفاده از رابط برنامه سازی کاربردی مکان یابی اندروید
ایجاد پروژه
پروژه ی جدیدی به نام de.vogella.android.locationapi.simple با activity ی به نام ShowLocationActivity ایجاد کنید .
این مثال از Google Maps استفاده نکرده و اجرای آن روی یک دستگاه معمولی اندروید نیز ممکن می باشد .
فایل layout خود موجود در پوشه ی res/layout را به کد زیر اصلاح کنید .
افزودن مجوزهای لازم
مجوزهای ذیل را به برنامه ی کاربردی خود موجود در فایل AndroidManifest.xml اضافه کنید .
- INTERNET
- ACCESS_FINE_LOCATION
- ACCESS_COARSE_LOCATION
Activity
ShowLocationActivity را به زیر تغییر دهید. از Location Manager پرس و جو کرده (query گرفته), سپس مقادیر پرس و جو (query values) را در activity مربوطه به نمایش می گذارد .
package de.vogella.android.locationsapi.simple;
import android.app.Activity;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class ShowLocationActivity extends Activity implements LocationListener {
private TextView latituteField;
private TextView longitudeField;
private LocationManager locationManager;
private String provider;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
latituteField = (TextView) findViewById(R.id.TextView02);
longitudeField = (TextView) findViewById(R.id.TextView04);
// Get the location manager
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// Define the criteria how to select the locatioin provider -> use
// default
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
// Initialize the location fields
if (location != null) {
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
} else {
latituteField.setText("Location not available");
longitudeField.setText("Location not available");
}
}
/* Request updates at startup */
@Override
protected void onResume() {
super.onResume();
locationManager.requestLocationUpdates(provider, 400, 1, this);
}
/* Remove the locationlistener updates when Activity is paused */
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
}
@Override
public void onLocationChanged(Location location) {
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
latituteField.setText(String.valueOf(lat));
longitudeField.setText(String.valueOf(lng));
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(this, "Enabled new provider " + provider,
Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(this, "Disabled provider " + provider,
Toast.LENGTH_SHORT).show();
}
}
مرحله ی اجرا و تست
در صورت استفاده از شبیه ساز تعدادی از مختصات جغرافیایی را به دستگاه خود ارسال کنید . مختصات جغرافیایی مزبور باید به مجرد زدن دکمه ی مورد نظر نمایش داده شوند .