این موضوع نحوه افزودن نقشه پایه به برنامه Android را پساز پیکربندی پروژه برای استفاده از «کیت توسعه نرمافزار Google Maps برای Android» شرح میدهد. پساز افزودن نقشه، میتوانید نوع و ویژگیهای نقشه را تغییر دهید.
نمای کلی
کیت توسعه نرمافزار Google Maps برای Android چندین کلاس ارائه میدهد که برنامهتان میتواند از آنها برای مدیریت چرخه حیات، عملکرد، و دادههای نقشه استفاده کند. این کلاسها از تعاملات کاربر براساس مدل میانای کاربر Android پشتیبانی میکنند، مثلاً تنظیم کردن وضعیت اولیه نقشه و پاسخ دادن به ورودی اشارهای کاربر در زمان اجرا.
میانای اصلی و کلاسها برای مدیریت نقشهها:
GoogleMap— نقطه ورود برای مدیریت ویژگیها و دادههای زیربنایی نقشه. برنامه شما فقط پساز بازیابی شیءGoogleMapاز شیءSupportMapFragmentیاMapViewمیتواند به آن دسترسی پیدا کند.SupportMapFragment— تکهای برای مدیریت چرخه حیات شیءGoogleMap.OnMapReadyCallback— میانای بازخوانی که رویدادها و تعامل کاربر را برای شیءGoogleMapمدیریت میکند.
یک شیء GoogleMap بهطور خودکار این عملیات را انجام میدهد:
- درحال اتصال به سرویس Google Maps.
- درحال بارگیری کاشیهای نقشه.
- درحال نمایش کاشیها در صفحه دستگاه.
- نمایش کنترلهای مختلف مانند حرکت و بزرگنمایی.
- پاسخ دادن به اشارههای حرکت عرضی و بزرگنمایی با حرکت دادن نقشه و بزرگنمایی یا کوچکنمایی.
برای استفاده از شیء GoogleMap در برنامهتان، باید از شیء
SupportMapFragment یا MapView بهعنوان شیء نگهدارنده برای نقشه استفاده کنید و
سپس شیء GoogleMap را از نگهدارنده بازیابی کنید. ازآنجاییکه کلاسهای نگهدارنده از قطعه یا نمای Android مشتق میشوند، مدیریت چرخه حیات و قابلیتهای واسط کاربر کلاسهای پایه Android را برای نقشه فراهم میکنند.
کلاس SupportMapFragment محفظه مدرنتر و رایجتری برای شیء GoogleMap است.
مشاهده کد
کد زیر از فعالیت کامل Java است که در این موضوع هنگام افزودن تکهبرنامه بهصورت پایا استفاده میشود. پروژه Android از الگوی «پروژه خالی» ایجاد شد و سپس براساس راهنمای پیکربندی پروژه بهروزرسانی شد. پساز انجام مراحل این موضوع، کد شما ممکن است براساس الگوی پروژه متفاوت باشد.
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; // Implement OnMapReadyCallback. public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the layout file as the content view. setContentView(R.layout.activity_main); // Get a handle to the fragment and register the callback. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Get a handle to the GoogleMap object and display marker. @Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); } }
برای افزودن نقشه
این بخش نحوه افزودن نقشه پایه بااستفاده از بخشبندی بهعنوان ظرف نقشه را توضیح میدهد؛ بااینحال، میتوانید بهجای آن از نما استفاده کنید. برای مثال، RawMapViewDemoActivity را در Github ببینید.
مراحل اولیه:
برای دریافت کیت توسعه نرمافزار، کلید میانای برنامهسازی کاربردی دریافت کنید، و چارچوبهای موردنیاز را اضافه کنید، مراحل زیر را دنبال کنید:
شیء
SupportMapFragmentرا به فعالیتی که نقشه را مدیریت میکند اضافه کنید. میتوانید قطعه را بهصورت ایستا یا پویا اضافه کنید.میانای
OnMapReadyCallbackرا پیادهسازی کنید.فایل چیدمان را بهعنوان نمای محتوا تنظیم کنید.
اگر قطعه را بهصورت ایستا اضافه کردهاید، دستگیرهای برای قطعه دریافت کنید.
ثبت کردن پاسخ تماس.
دستگیرهای برای شیء
GoogleMapدریافت کنید.
افزودن شیء SupportMapFragment
میتوانید شیء SupportMapFragment را بهصورت ایستا یا پویا به برنامهتان اضافه کنید.
سادهترین راه این است که آن را بهصورت ایستا اضافه کنید. اگر قطعه را بهصورت پویا اضافه کنید،
میتوانید کنشهای بیشتری روی قطعه انجام دهید، مثلاً برداشتن و
جایگزین کردن آن در زمان اجرا.
برای افزودن قطعه بهصورت ایستا
در فایل چیدمان فعالیتی که نقشه را مدیریت میکند:
- عنصر
fragmentرا اضافه کنید. - اظهارنامه نام را اضافه کنید
xmlns:map="http://schemas.android.com/apk/res-auto". این کار استفاده ازmapsمشخصههای XML سفارشی را فعال میکند. - در عنصر
fragment، مشخصهandroid:nameرا رویcom.google.android.gms.maps.SupportMapFragmentتنظیم کنید. - در عنصر
fragment، مشخصهandroid:idرا اضافه کنید و آن را روی شناسه منبع R.id.map (@+id/map) تنظیم کنید.
برای مثال، در اینجا یک فایل چیدمان کامل آورده شده است که شامل عنصر fragment است:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
برای افزودن قطعه بهصورت پویا
در فعالیت:
- نمونه
SupportMapFragmentایجاد کنید. - تراکنشی را انجام دهید که قطعه را به فعالیت اضافه میکند. برای اطلاعات بیشتر، تراکنشهای Fragment را ببینید.
برای مثال:
Kotlin
if (context is FragmentActivity) { val mapFragment = SupportMapFragment.newInstance() context.supportFragmentManager .beginTransaction() .add(com.example.snippets.common.R.id.map_container, mapFragment) .commit() }
جاوا
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.map_container, mapFragment); fragmentTransaction.commit();
پیادهسازی میانای OnMapReadyCallback
اظهارنامه فعالیت را بهصورت زیر بهروز کنید:
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
جاوا
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
تنظیم نمای محتوا
در روش onCreate فعالیتتان، روش
setContentView را فراخوانی کنید و فایل چیدمان را بهعنوان نمای محتوا تنظیم کنید.
برای مثال، اگر نام فایل چیدمان main.xml باشد:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
جاوا
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
نام کاربری را برای قطعه دریافت کنید و پاسخگویی را ثبت کنید
برای دریافت یک دستگیره برای قطعه، متد
FragmentManager.findFragmentByIdرا فراخوانی کنید و شناسه منبع قطعه را در فایل چیدمانتان به آن ارسال کنید. اگر قطعه را بهصورت پویا اضافه کردهاید، این مرحله را رد کنید زیرا قبلاً دستگیره را بازیابی کردهاید.روش
getMapAsyncرا فراخوانی کنید تا فراخوانی را روی قطعه تنظیم کنید.
برای مثال، اگر قطعه را بهصورت ایستا اضافه کردهاید:
Kotlin
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
جاوا
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);
دسترسی به شیء GoogleMap
از روش بازخوانی onMapReady برای دریافت دستگیره برای
شیء GoogleMap استفاده کنید. وقتی نقشه برای دریافت ورودی کاربر آماده باشد،
بازخوانی راهاندازی میشود. این روش نمونهای غیرتهی از کلاس GoogleMap ارائه میدهد که میتوانید از آن برای بهروزرسانی نقشه استفاده کنید.
در این مثال، برگشتتماس onMapReady دستهای را به شیء GoogleMap
بازیابی میکند و سپس نشانگری به نقشه اضافه میشود:
Kotlin
override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker") ) }
جاوا
@Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); }

وقتی برنامه را باموفقیت ساختید و اجرا کردید، نقشهای با نشانگر روی «جزیره نول» (صفر درجه عرض جغرافیایی و صفر درجه طول جغرافیایی) نمایش داده میشود.
کد فعالیت کامل را مشاهده کنید:
قدم بعدی چیست
پساز تکمیل این مراحل، میتوانید تنظیمات نقشه را پیکربندی کنید.