این مبحث نحوه اضافه کردن یک نقشه اولیه به یک برنامه اندروید را پس از پیکربندی پروژه برای استفاده از Maps SDK برای اندروید شرح میدهد. پس از افزودن نقشه، میتوانید نوع و ویژگیهای نقشه را تغییر دهید.
نمای کلی
کیت توسعه نرمافزار نقشهها برای اندروید (Maps SDK) چندین کلاس ارائه میدهد که برنامه شما میتواند از آنها برای مدیریت چرخه حیات، عملکرد و دادههای یک نقشه استفاده کند. این کلاسها از تعاملات کاربر بر اساس مدل رابط کاربری اندروید، مانند تنظیم وضعیت اولیه نقشه و پاسخ به ورودی ژست از کاربر در زمان اجرا، پشتیبانی میکنند.
رابط اصلی و کلاسها برای مدیریت نقشهها:
GoogleMap- نقطه ورود برای مدیریت ویژگیها و دادههای زیربنایی نقشه. برنامه شما فقط میتواند به یک شیءGoogleMapپس از بازیابی آن از یک شیءSupportMapFragmentیاMapViewدسترسی داشته باشد.SupportMapFragment— قطعهای برای مدیریت چرخه حیات یک شیءGoogleMap.OnMapReadyCallback— یک رابط فراخوانی که رویدادها و تعامل کاربر را برای شیءGoogleMapمدیریت میکند.
یک شیء GoogleMap به طور خودکار این عملیات را انجام میدهد:
- اتصال به سرویس نقشه گوگل
- دانلود کاشیهای نقشه.
- نمایش کاشیها روی صفحه دستگاه.
- نمایش کنترلهای مختلف مانند حرکت افقی و عمودی و بزرگنمایی.
- با حرکت دادن نقشه و بزرگنمایی یا کوچکنمایی، به حرکات حرکت افقی و عمودی پاسخ میدهد.
برای استفاده از یک شیء GoogleMap در برنامه خود، باید از یک شیء SupportMapFragment یا MapView به عنوان یک شیء کانتینر برای نقشه استفاده کنید و سپس شیء GoogleMap را از کانتینر بازیابی کنید. از آنجا که کلاسهای کانتینر از یک fragment یا view اندروید مشتق میشوند، مدیریت چرخه حیات و قابلیتهای رابط کاربری کلاسهای پایه اندروید خود را به نقشه ارائه میدهند. کلاس SupportMapFragment کانتینر مدرنتر و رایجتری برای یک شیء GoogleMap است.
کد را مشاهده کنید
کد زیر از اکتیویتی کامل جاوا که در این مبحث هنگام اضافه کردن یک فرگمنت به صورت استاتیک استفاده شده است، گرفته شده است. پروژه اندروید از الگوی پروژه Empty ایجاد شده و سپس بر اساس راهنمای پیکربندی پروژه بهروزرسانی شده است. پس از انجام مراحل این مبحث، کد شما ممکن است بر اساس الگوی پروژه متفاوت باشد.
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")); } }
برای اضافه کردن نقشه
این بخش نحوهی افزودن یک نقشهی پایه با استفاده از یک فرگمنت به عنوان ظرف نقشه را شرح میدهد؛ با این حال، میتوانید به جای آن از یک نما (view) استفاده کنید. برای مثال، به RawMapViewDemoActivity در Github مراجعه کنید.
مراحل اساسی:
برای دریافت SDK، دریافت کلید API و افزودن فریمورکهای مورد نیاز، مراحل زیر را دنبال کنید:
یک شیء
SupportMapFragmentبه اکتیویتی که نقشه را مدیریت میکند اضافه کنید. میتوانید این قطعه را به صورت ایستا یا پویا اضافه کنید.رابط
OnMapReadyCallbackرا پیادهسازی کنید.فایل طرحبندی را به عنوان نمای محتوا تنظیم کنید.
اگر قطعه را به صورت ایستا اضافه کردهاید، یک هندل (دسته) برای قطعه دریافت کنید.
تماس برگشتی را ثبت کنید.
یک هندل (دسته) برای شیء
GoogleMapدریافت کنید.
یک شیء SupportMapFragment اضافه کنید
شما میتوانید یک شیء SupportMapFragment به صورت ایستا یا پویا به برنامه خود اضافه کنید. سادهترین راه، اضافه کردن آن به صورت ایستا است. اگر فرگمنت را به صورت پویا اضافه کنید، میتوانید اقدامات اضافی روی فرگمنت انجام دهید، مانند حذف و جایگزینی آن در زمان اجرا.
برای اضافه کردن یک قطعه به صورت استاتیک
در فایل طرحبندیِ فعالیتی که نقشه را مدیریت خواهد کرد:
- یک عنصر
fragmentاضافه کنید. - اعلان نام را با استفاده
xmlns:map="http://schemas.android.com/apk/res-auto"اضافه کنید. این کار امکان استفاده از ویژگیهای XML سفارشیmapsرا فراهم میکند. - در عنصر
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ایجاد کنید. - یک تراکنش را انجام دهید که فرگمنت را به اکتیویتی اضافه کند. برای اطلاعات بیشتر، به بخش تراکنشهای فرگمنت مراجعه کنید.
برای مثال:
کاتلین
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(R.id.my_container, mapFragment) .commit()
جاوا
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); getSupportFragmentManager() .beginTransaction() .add(R.id.my_container, mapFragment) .commit();
رابط OnMapReadyCallback را پیادهسازی کنید
اعلان فعالیت را به صورت زیر بهروزرسانی کنید:
کاتلین
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
جاوا
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
تنظیم نمای محتوا
در متد onCreate مربوط به activity خود، متد setContentView را فراخوانی کنید و فایل layout را به عنوان content view تنظیم کنید.
برای مثال، اگر فایل طرحبندی main.xml نام داشته باشد:
کاتلین
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); }
یک هندل برای قطعه دریافت کنید و callback را ثبت کنید
برای دریافت یک هندل به فرگمنت، متد
FragmentManager.findFragmentByIdرا فراخوانی کنید و شناسه منبع فرگمنت را در فایل layout خود به آن ارسال کنید. اگر فرگمنت را به صورت پویا اضافه کردهاید ، از این مرحله صرف نظر کنید زیرا قبلاً هندل را بازیابی کردهاید.برای تنظیم فراخوانی برگشتی روی فرگمنت، متد
getMapAsyncرا فراخوانی کنید.
برای مثال، اگر قطعه را به صورت ایستا اضافه کرده باشید:
کاتلین
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 استفاده کنید. این فراخوانی زمانی فعال میشود که نقشه آماده دریافت ورودی کاربر باشد. این متد یک نمونه غیر تهی (non-null) از کلاس GoogleMap را فراهم میکند که میتوانید از آن برای بهروزرسانی نقشه استفاده کنید.
در این مثال، تابع فراخوانی onMapReady یک هندل به شیء GoogleMap بازیابی میکند و سپس یک نشانگر به نقشه اضافه میشود:
کاتلین
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")); }
وقتی برنامه را با موفقیت بسازید و اجرا کنید ، نقشهای با نشانگر روی جزیره پوچ (صفر درجه عرض جغرافیایی و صفر درجه طول جغرافیایی) نمایش داده میشود.
کد مربوط به کل فعالیت را مشاهده کنید:
قدم بعدی چیست؟
پس از انجام این مراحل، میتوانید تنظیمات نقشه را پیکربندی کنید .