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

توابع کتابخانه ای Google Maps v2 / Google Maps Android API v2

Google Maps

MapsView

شرکت گوگل یک کتابخانه از طریق سرویس Google play در اختیار توسعه دهنده قرار می دهد که امکان استفاده ی آسان از Google Maps و پیاده سازی توابع آن در پروژه ی اندرویدی را به راحتی فراهم می آورد. مبحث حاضر از توابع کتابخانه ای v2 Google Maps استفاده می کند که نسبت به ورژن قبلی آن از قابلیت های بیشتری برخوردار است.

کتابخانه ی مزبور دو کلاس به ترتیب به نام های com.google.android.gms.maps.MapFragment و MapView ارائه می دهد که کامپوننت نقشه را برای کاربر نمایش می دهد.

برای استفاده از Google Maps لازم است اطلاعات اضافی به فایل تنظیمات اپلیکیشن AndroidManifest.xml اضافه نمایید.



    


        





            
        
    

کلاس MapFragment

کلاس MapFragment از کلاس Fragment ارث بری کرده و توابعی جهت مدیریت چرخه ی حیات (life cycle) و سرویس های لازم برای نمایش ویجت (کامپوننت رابط کاربری) GoogleMap را فراهم می آورد. GoogleMap کلاسی است که وظیفه ی نمایش نقشه را بر عهده دارد. MapFragment برای دسترسی به این کلاس متد getMap() را فراخوانی می کند.

کلاس LatLng پل ارتباطی جهت تعامل با کلاس GoogleView خواهد بود.

درج marker (نشانه) بر روی نقشه

می توانید با استفاده از کلاس Marker، بر روی نقشه نشانه درج نمایید. این قابلیت بسیار منعطف بوده و قابل تنظیم می باشد.

کد زیر مثالی عملی را به نمایش می گذارد.

public class MainActivity extends Activity {
        static final LatLng HAMBURG = new LatLng(53.558, 9.927);
        static final LatLng KIEL = new LatLng(53.551, 9.993);
        private GoogleMap map;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                                .getMap();
                if (map!=null){
                        Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
                                        .title("Hamburg"));
                        Marker kiel = map.addMarker(new MarkerOptions()
                                        .position(KIEL)
                                        .title("Kiel")
                                        .snippet("Kiel is cool")
                                        .icon(BitmapDescriptorFactory
                                                        .fromResource(R.drawable.ic_launcher)));
                }
        }

می توانید بر روی نمونه ی ساخته شده از روی کلاس GoogleMap، توابع listener برای گوش دادن به marker های درج شده بر روی نقشه الصاق نمایید. کلاس OnMarkerClickListener یک متد به نام onMarkerClicked(Marker) در اختیار توسعه دهنده قرار می دهد که به مجرد کلیک کاربر بر روی marker فراخوانی می شود.

تنظیم اختصاصی GoogleMap

می توان GoogleMap را مطابق نیاز به صورت اختصاصی تنظیم کرد.

کد زیر از وبسایت اصلی گوگل اقتباس شده است.

static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng KIEL = new LatLng(53.551, 9.993);
private GoogleMap map;
... // Obtain the map from a MapFragment or MapView.
//Move the camera instantly to hamburg with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));
// Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);

نرم افزار شبیه ساز محیط اندروید (emulator) و Google Maps

لازم است یک شبیه ساز مبتنی بر توابع کتابخانه ای Google ایجاد نمایید. با استفاده از این شبیه ساز می توانید بعده ها Google map و دیگر سرویس های ادغام شدنی نظیر Google Play Service را تست نمایید.

نصب Google Play service

دانلود Google Play Service

Android SDK Manager را باز کرده و Google Play Services را نصب نمایید.

دانلود Google Play Service

اکنون می توانید dependency مورد نیاز را به فایل app/build.gradle اضافه نمایید.

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

ساخت و دریافت کلید شناسگر Google Map (key)

کنسول Google

جهت استفاده از Google Maps لازم است یک شناسه گر برنامه ی فراخواننده یا API key معتبر Google ایجاد نمایید. این کلید رایگان بوده و می توان از آن برای تمامی اپلیکیشن هایی که توابع کتابخانه ای Maps را فراخوانی می کنند، استفاده نمایید. در خصوص استفاده از این کلید محدودیتی وجود نداشته و قابلیت پشتیبانی از بی نهایت کاربر را دارد.

برای دریافت این کلید بایستی از طریق Google APIs Console اقدام نمایید. جهت دریافت کلید لازم است اسم پکیج و امضای دیجیتالی (signature key) اپلیکیشن را ارائه نمایید.

منظور از امضای دیجیتالی همان کلیدی است که اپلیکیشن اندروید خود را به هنگام خروجی گرفتن، توزیع و نصب (مرحله ی deployment) با آن امضا و به طور منحصر بفرد نشانه گذاری می کنید. در حین توسعه ی اپلیکیشن، سیستم کامپایل و اجرای پروژه های اندرویدی (build system)، به صورت خودکار یک debug key تولید کرده و از آن جهت اشکال زدایی اپلیکیشن و اینکه کاربر مجبور نباشد هر بار برای ترجمه و اجرای برنامه امضای الکترونیکی را وارد کند، استفاده می نماید.

ایجاد SHA-1 برای امضای دیجیتالی (Signature key)

debug key یا کلید اشکال زدایی و کامپایل پروژه تحت آدرس userhome/.android/debug.keystore قابل دسترسی می باشد.

SHA-1 (الگوریتم درهم سازی ایمن): تابع درهم سازی در مبحث رمزنگاری است.

برای ساخت SHA-1 ویژه ی debug keystore (keystore برای اعتبارسنجی شناسه ی برنامه نویس و توسعه دهنده ی اپلیکیشن استفاده می شود.)، می توانید دستور keytool را از JDK نصب شده اجرا کنید.

keytool -list -v -alias androiddebugkey \
-keystore debug.keystore \
-storepass android -keypass android

لازم است خروجی SHA-1 را برای استفاده در آینده کپی نمایید.

ثبت نام در Google APIs Console

شما بایستی در Google APIs Console ثبت و اعلان نمایید که می خواهید از توابع Google Maps برای پروژه ی اندرویدی خود استفاده نمایید. از منوی My Project المان Services را انتخاب نمایید.

ثبت نام در Google APIs Console

Google Maps Android API v2 را فعال نمایید.

ثبت نام در Google APIs Console

ساخت کلید و امضای دیجیتالی برای اپلیکیشن

شما بایستی بعده ها اپلیکیشن را از طریق اسم پکیج در کنسول همراه با fingerprint SHA-1 امضای دیجیتالی (signature key) ثبت نمایید (fingerprint: دنباله‌ای کوتاه از بایت‌ها می‌باشد که برای تایید اعتبار و یا جستجوی کلید عمومی/public key طولانی تر استفاده می‌شود. اثرانگشت‌ها با اعمال یک تابع درهم‌ساز رمزنگارانه/hash function بر روی یک کلید عمومی ایجاد می‌گردند. از آنجا که اثر انگشت‌ها نسبت به کلیدهای مربوطه کوتاه تر هستند، می‌توان از آن‌ها به منظور ساده سازی برخی وظایف مدیریت کلید استفاده نمود . رمزنگاری کلید عمومی یا رمزنگاری نامتقارن روشی از رمزنگاری است که کلید مورد استفاده برای رمزگذاری با کلید مربوط برای رمزگشایی با هم متفاوت است.(. برای این منظور پس از کلیک بر روی المان مربوطه، آیتم API Access را انتخاب نمایید. سپس بر روی المان Create new Android key… کلیک کنید.

ساخت کلید و امضای دیجیتالی برای اپلیکیشن

حال در کادر مربوطه SHA-1 fingerprint و اسم پکیج اپلیکیشن خود را وارد کرده و آن ها را با ویرگول از هم جدا نمایید. برای مثال همان طور که در تصویر زیر مشاهده می کنید، پکیج com.vogella.android.locationapi.maps در کادر مربوطه درج شده است.

ساخت کلید و امضای دیجیتالی برای اپلیکیشن آموزش: استفاده از Google Maps در پروژه

در این آموزش یک اپلیکیشن اندرویدی می نویسید که GoogleMap را از طریق یک fragment برای کاربر نمایش می دهد.

نصب Google Play Service

لازم است Google Play Service را نصب نمایید.

ایجاد پروژه ی اندرویدی

یک پروژه ی اندرویدی به نام com.vogella.android.maps بر اساس قالب آماده ی (template) Google Maps Activity ایجاد نمایید.

بررسی فایل تنظیمات پروژه

محتوای فایل manifest را چک کرده و مطمئن شوید که مجوزهای زیر توسط template نام برده در آن اعلان شده اند.



    


        





            
        
    

template مورد نظر یک فایل به نام google_maps_api.xml ایجاد کرده است. این فایل حاوی دستور العمل هایی در خصوص نحوه ی ایجاد Google Maps API key می باشد.

پس از دریافت API key اپلیکیشن، این کلید را در فایل google_maps_api.xml وارد نمایید.

تنظیم فایل layout

در این مثال از کلاس MapFragment استفاده می کنیم. محتوای فایل layout خود را به صورت زیر ویرایش نمایید.


ویرایش Activity

پیاده سازی کلاس activity خود را به صورت زیر ویرایش نمایید.

package com.vogella.android.maps;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends Activity {
        static final LatLng HAMBURG = new LatLng(53.558, 9.927);
        static final LatLng KIEL = new LatLng(53.551, 9.993);
        private GoogleMap map;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                                .getMap();
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                getMenuInflater().inflate(R.menu.activity_main, menu);
                return true;
        }
}
توجه :

برای اجرای این مثال لازم است قابلیت پشتیبانی از multidex را فعال نمایید.

android {
    compileSdkVersion 25
    buildToolsVersion "24.0.0"
    defaultConfig {
        applicationId "com.vogella.android.maps"
        minSdkVersion 23
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

اجرا و تست اپلیکیشن

اپلیکیشن را اجرا کرده و تست نمایید. باتوجه به منطق برنامه باید بتوانید بر روی Map حرکت کرده و قسمت هایی از آن بزرگ نمایی/کوچک نمایی کنید.

اجرا و تست اپلیکیشن
1396/01/21 4605 2049
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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