میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

توابع کتابخانه ای مکان یابی / Location API اندروید

امروزه اغلب دستگاه های مبتنی بر سیستم عامل اندروید این امکان را برای کاربران فراهم می کنند تا مکان جغرافیایی جاری دستگاه را بدست بیاورند. این امر از طریق ماژول GPS، wifi یا تکنیک مثلث سازی برج های مخابراتی امکان پذیر می باشد.

Google Play با استفاده از fused location provider آخرین مکان جغرافیایی دستگاه جاری را بازیابی می کند.

 


نصب

به منظور استفاده از location manager، سرویس Google play را در قالب dependency به فایل build.gradle اضافه نمایید.

 

dependencies {
compile 'com.google.android.gms:play-services:9.2.0'
compile 'com.google.android.gms:play-services-location:9.2.0'
}

همچنین بایستی مجوز مورد نیاز را در فایل تنظمیات اپلیکیشن اندرویدی، manifest، اعلان نمایید.

 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


استفاده از LocationManager

اکنون می توانید به آخرین مکان جغرافیایی دستگاه دسترسی داشته باشید. fuse location provider توابع کتابخانه ای نوین و کارایی در اختیار توسعه دهنده قرار می دهد که کار مکان یابی را انجام می دهد. در زیر مثالی را مشاهده می کنید که از این توابع برای واکشی اطلاعات مکان جاری دستگاه استفاده می کند.

 


بدست آوردن مختصات جغرافیایی به صورت دو طرفه (forward and reverse geocoding)

کلاس Geocoder به شما این امکان را می دهد تا مختصات جغرافیایی (عرض و طول جغرافیایی) یک مکان را بر اساس آدرس ارائه شده بدست آورده و بالعکس (بر اساس عرض و طول جغرافیایی ارائه شده، آدرس دقیق مثل اسم خیابان محل قرارگیری دستگاه را بدست آورید). از این پروسه تحت عنوان reverse geocoding یاد می شود. کلاس نام برده از یک سرویس آنلاین Google استفاده می کند.

 


امنیت

اگر می خواهید به حسگر GPS دسترسی داشته باشید، در آن صورت لازم است مجوز ACCESS_FINE_LOCATION را نیز اعلان نمایید. در غیر این صورت باید ACCESS_COARSE_LOCATION را در فایل تنظیمات اعلان کنید.

 


درخواست از کاربر برای فعال سازی حسگر GPS (امکان سخت افزاری GPS یا مکان یاب)

کاربر باید تصمیم بگیرد که امکان سخت افزاری GPS فعال شود یا خیر.

می توانید با فراخوانی متدisProviderEnabled() مطمئن شوید آیا LocationManager فعال و پیاده سازی شده است یا خیر (LocationManager کلاسی است که امکان دسترسی به سرویس های مکان یابی سیستم را فراهم می کند). در صورتی که فعال نشده باشد، می توانید به واسطه ی ارسال یک آبجکت Intent که مقدار خاصیت name از المان action آن (اسم action) در فایل xml، بر روی 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 فعال نشده باشد، کلاس LocationManager مقدار null را برمی گرداند.

activity یا صفحه ی Google Map، بایستی به صورت خودکار امکان سخت افزاری GPS را در شبیه ساز فعال کند. اما چنانچه می خواهید از location manager به طور مسقیم استفاده نمایید، بایستی این کار را خود انجام دهید. در حال حاضر مشکلاتی برای استفاده ی مستقیم از location manager وجود دارد.

Google Maps را در محیط شبیه ساز اجرا کرده و درخواست اطلاعات موقعیت جغرافیایی جاری را بدهید. این کار به شما اجازه می دهد تا GPS را فعال نمایید. مختصات جدید GPS را به شبیه ساز اندروید ارسال نمایید.

 


تنظیم موقعیت جغرافیایی

می توانید با استفاده از “DDMS” Perspective محیط کاری Eclipse، موقعیت جغرافیایی خود را به شبیه ساز یا دستگاه متصل ارسال نمایید. برای این منظور، ابتدا Perspective را باز کرده و سپس مسیر رو به رو را طی نمایید: Window ▸ Open Perspective ▸ Other… ▸ DDMS.

(perspective اسمی که به مجموعه ای از view ها و ناحیه ی ویرایشگر اشاره محیط کاری Eclipse اشاره دارد)

(DDMS که سرنام واژگان Dalvik debug monitor service است کاراترین ابزار اشکال زدایی برای پروژه های اندرویدی بوده و از قابلیت های آن می توان به گزارش گیری و نمایش اطلاعات file manager اشاره کرد. این ابزار قادر است به عنوان یک برنامه ی جدا راه اندازی شده و بر دستگاه میزبان نظارت داشته باشد.)

می توانید در Emulator Control، مختصات جغرافیایی را وارد کرده و دکمه ی Send را فشار دهید

 

توابع کتابخانه ای مکان یابی / Location API اندروید
توابع کتابخانه ای مکان یابی / Location API اندروید

 

همچنین می توانید مختصات جغرافیایی را در شبیه ساز Android از طریق telnet تنظیم نمایید. پنجره ی فرمان یا کنسول را باز کرده و به دستگاه دلخواه متصل شوید. شماره ی port دستگاه شما در نوار عنوان (title area) شبیه ساز قابل مشاهده می باشد.

telnet localhost 5554

حال از طریق دستور زیر موقعیت جغرافیایی را مقداردهی و تنظیم نمایید.

geo fix 13.24 52.31

ساخت پروژه

یک پروژه ی و activity جدید به ترتیب به نام de.vogella.android.locationapi.simple و ShowLocationActivity ایجاد نمایید.

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

فایل layout خود را از res/layout_ به کد زیر ویرایش نمایید.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dip"
android:orientation="horizontal" >
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginRight="5dip"
android:text="Latitude: "
android:textSize="20dip" >
</TextView>
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="unknown"
android:textSize="20dip" >
</TextView>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:layout_marginRight="5dip"
android:text="Longitute: "
android:textSize="20dip" >
</TextView>
<TextView
android:id="@+id/TextView04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="unknown"
android:textSize="20dip" >
</TextView>
</LinearLayout>
</LinearLayout>

 


افزودن مجوزهای لازم

مجوزهای زیر را در فایل تنظیمات اپلیکیشن (AndroidManifest.xml) اعلان نمایید.

  •  INTERNET
  •  ACCESS_FINE_LOCATION
  •  ACCESS_COARSE_LOCATION

ویرایش کلاس Activity

محتوای کلاس ShowLocationActivity را به صورت زیر ویرایش نمایید. با اعمال تغییرات زیر از location manger کوئری گرفته شده و مقادیر مورد درخواست (خروجی) در 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();
}
}

 


اجرا و تست

اگر از شبیه ساز استفاده می کنید، مختصات جغرافیایی مورد نظر را به دستگاه ارسال کنید. با کلیک بر روی دکمه، مختصات جغرافیایی به نمایش گذاشته می شود.

 

 


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

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

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟