مشخصات مقاله
-
2049
-
0.0
-
4605
-
0
-
0
توابع کتابخانه ای 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 را نصب نمایید.
اکنون می توانید 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 \ -keystoredebug.keystore \ -storepass android -keypass android
لازم است خروجی SHA-1 را برای استفاده در آینده کپی نمایید.
ثبت نام در Google APIs Console
شما بایستی در Google APIs Console ثبت و اعلان نمایید که می خواهید از توابع Google Maps برای پروژه ی اندرویدی خود استفاده نمایید. از منوی My Project المان Services را انتخاب نمایید.
Google Maps Android API v2 را فعال نمایید.
ساخت کلید و امضای دیجیتالی برای اپلیکیشن
شما بایستی بعده ها اپلیکیشن را از طریق اسم پکیج در کنسول همراه با 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 حرکت کرده و قسمت هایی از آن بزرگ نمایی/کوچک نمایی کنید.