آموزش GPS در برنامه نویسی اندروید – مکان یابی در برنامه نویسی اندروید

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

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

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

اکثر دستگاه های اندرویدی اجازه می­دهند تعیین موقعیت جغرافیاییِ حال آنها انجام شود. این کار با استفاده از یک ماژول GPS (سیستم موقعیت یابی جهانی)، یا از طریق مثلث سازی برج های مخابراتی و یا به وسیله ی شبکه ی Wi-Fi انجام می­شود. گوگل پلی با استفاده از قابلیتِ fused location provider (به معنی ارائه دهنده­ی موقعیت واحد) می­تواند آخرین موقعیت شناخته شده ی کاربر را به دست آورد.مراحل آموزش 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” برخورد می کنید. اکتیویتیِ 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 مربوط به مکان یابی در برنامه نویسی اندروید

ایجاد پروژه ( آموزش GPS در برنامه نویسی اندروید)

یک پروژه با نام 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 در برنامه نویسی اندروید

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

 

مکان یابی در برنامه نویسی اندروید

ورکشاپ رایگان دوره های تخصصی برنامه نویسی

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

درباره‌ی برنامه نویسان

همچنین ببینید

گزارش دوره اندروید

گزارش دوره آموزش اندروید – جلسه هشتم

جسله هشتم از دوره آموزش اندروید برگزار گردید . مهندس آذرنیوا مدرس دوره به معرفی …

2 نظر

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

  2. باسلام
    لطفا درصورت امکان فایل اموزش پایتون را هم بگذارید
    باتشکر

دیدگاهتان را بنویسید

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