واکنون ایزی گرام 3 | ایزی گرام 3 با کلی امکانات جدید منتشر شد | کلیک کنید

کار با GPS در اندروید استودیو

دسته‌بندی: آموزش
شهریور ۲۷, ۱۳۹۷

کار با GPS در اندروید استودیو

در این آموزش به GPS در اندروید استودیو  یعنی همان مکان یابی در برنامه نویسی اندروید می پردازیم.

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

آموزش GPS در اندروید استودیو :

 

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

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

 

این امکان با استفاده از یک ماژول GPS یا همان سیستم موقعیت یابی جهانی  یا از طریق مثلث سازی برج های مخابراتی و یا به وسیله ی شبکه ی Wi-Fi صورت می گیرد. گوگل پلی با کمک گرفتن از قابلیت fused location provider یعنی ارائه دهنده­ موقعیت واحد قادر است آخرین موقعیت شناخته شده ی کاربر را به دست آورد.

 

مراحل آموزش GPS در اندروید استودیو :

 

نصب و راه انـدازی مکان یابی و

GPS در اندروید استودیو :

 

برای کمک گرفتن از ضابط موقعیت، خدمات گوگل پلی را در فایل build.gradle پروژه ی خود ایجاد نمایید.

 

dependencies {

compile 'com.google.android.gms:play-services:9.2.0'

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

}

 

همچنین، permission  لازم  زیر را به قسمت manifest پروژه ی خود اضافه نمایید

 

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

 

به کار بردن LocationManager (ضابط موقعیت):

اکنون قادر خواهید بود به آخرین موقعیت شناخته شده دسترسی پیدا کنید؛ fuse location provider یک API جدید و ساده را به شما ارائه خواهد داد. آنچه در ادامه می­ آید مثالی از یک اکتیویتی است که از این قابلیت استفاده خواهد کرد.

 

Geocoding مستقیم و معکوس:

کلاس Geocoder این قابلیت را دارد  تا مختصات جغرافیایی یا همان طول و عرض جغرافیایی یک آدرس مشخص را تعیین نماید و یا آدرس های ممکن مربوط به یک مختصات خاص را استخراج نماید. این فرآیند به عنوان Geocoding مستقیم و معکوس نیز شناخته شده است. کلاس Geocoder از یک سرویس آنلاین گوگل استفاده می نماید.

 

امنیـت:

در صورتی که می خواهید به سنسور GPS دسترسی داشته باشید، باید از دسترسی های ACCESS_FINE_LOCATION استفاده نمایید؛ در غیر این صورت نیاز به دسترسی های ACCESS_COARSE_LOCATION خواهید داشت.

 

هشـدار به کاربر برای روشن بودن GPS:

با استفاده از این قابلیت کاربر میتواند مشخص کند که GPS روشن باشد یا خیر.
همچنین شما میتوانید با استفاده از متود ()isProviderEnable متوجه شوید که آیا 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 خواهد داد.

همچنین ببینید :   ایجاد پروژه جدید در اندروید استودیو | Hello World

 

اکتیویتیِ Google Map به صورت خودکار GPS دستگاه را روی شبیه ساز فعال مخواهد کرد اما اگر می خواهید مستقیما از Location Manager استفاده گردد، باید خودتان این کار را انجام دهید که باعث مشکلاتی می شود.

 

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

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

 

تنظیم کردن موقعیت مکانی:

می شود با استفاده از قابلیت “Prespective “DDMS در نرم افزار Eclipse، موقعیت مکانی خود را به شبیه ساز یا دستگاه متصل دیگری ارسال نمایید.

برای باز نمودن Prespective به آدرس Select Window < Open Prespective > Other… > DDMS در نرم افزار بروید.

در قسمت Emulator Control می توانید مختصات جغرافیایی را وارد نموده و گزینه ی Send را بزنید.

 

GPS در اندروید استادیو

 

روش دیگر این است که می توانید از telnet برای تعیین موقعیت جغرافیایی شبیه ساز استفاده نمایید.

برای این کار یک کنسول را باز نمایید و آن را به دستگاه خود وصل کنید. شماره ی پورت دستگاه شما در قسمت تیتر اصلی دیده می شود. مثال:

 

telnet localhost 5554

 

همچنین موقعیت را با دستور زیر تعیین کنید:

 

geo fix 13.24 52.31

روش  عملی استفاده از API مربوط به مکان یابی در اندروید استودیو

 

ایجاد پروژه:

پروژه ای با نام de.acdev.android.locationapi.simple که دارای یک اکتیویتی با نام ShowLocationActivity است، به وجود آورید.

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

فایل layout خود را در  <filename class=”directory”>res/layout_ folder به کد زیر تغییر دهید:

 

<?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>

 

روش اضافه کردن Permission یا همان دسترسی ها :

برای این کار به فایل AndroidManifest.xml رفته و دسترسی های زیر را به آن اضافه کنید:

INTERNET
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION

 

اکتیویتی:

ShowLocationActivity را با روش زیر تغییر دهید. این کار باعث می شود به Location Manager درخواست ارسال شده و مقادیر درخواست ها را در اکتیویتی نمایش دهد.

 

package de.acdev.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();
}
}

 

روش اجرا و تست آموزش GPS در اندروید استودیو :

 

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

 

GPS در اندروید استادیو

پیام بگذارید


تومان