این مبحث نحوه افزودن یک نقشه اولیه به برنامه اندروید را پس از پیکربندی پروژه برای استفاده از Maps SDK برای Android شرح میدهد. پس از افزودن نقشه، میتوانید نوع نقشه و ویژگیهای آن را تغییر دهید.
نمای کلی
Maps SDK برای Android چندین کلاس را ارائه می دهد که برنامه شما می تواند از آنها برای مدیریت چرخه عمر، عملکرد و داده های یک نقشه استفاده کند. کلاسها از تعاملات کاربر بر اساس مدل رابط کاربری اندروید پشتیبانی میکنند، مانند تنظیم وضعیت اولیه نقشه، و پاسخ دادن به ورودی حرکتی از کاربر در زمان اجرا.
رابط اصلی و کلاس ها برای مدیریت نقشه ها:
GoogleMap
- نقطه ورودی برای مدیریت ویژگی ها و داده های نقشه اساسی. برنامه شما فقط پس از بازیابی شیGoogleMap
از یک شیءSupportMapFragment
یاMapView
می تواند به آن دسترسی داشته باشد.SupportMapFragment
- قطعه ای برای مدیریت چرخه حیات یک شیGoogleMap
.OnMapReadyCallback
- یک رابط پاسخ به تماس که رویدادها و تعامل کاربر را برای شیGoogleMap
مدیریت می کند.
یک شی GoogleMap
به طور خودکار این عملیات را انجام می دهد:
- اتصال به سرویس نقشه گوگل
- دانلود کاشی های نقشه.
- نمایش کاشی ها بر روی صفحه نمایش دستگاه
- نمایش کنترل های مختلف مانند حرکت و زوم.
- پاسخ دادن به حرکات حرکتی و بزرگنمایی با حرکت دادن نقشه و بزرگنمایی یا کوچکنمایی.
برای استفاده از یک شی GoogleMap
در برنامه خود، باید از یک شیء SupportMapFragment
یا MapView
به عنوان یک شی ظرف برای نقشه استفاده کنید و سپس شیء GoogleMap
را از ظرف بازیابی کنید. از آنجایی که کلاسهای کانتینر از یک قطعه یا نمای Android مشتق میشوند، نقشه را با مدیریت چرخه حیات و قابلیتهای رابط کاربری کلاسهای پایه اندروید خود ارائه میکنند. کلاس 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
به صورت ایستا یا پویا به برنامه خود اضافه کنید. ساده ترین راه اضافه کردن آن به صورت ایستا است. اگر قطعه را به صورت پویا اضافه کنید، می توانید اقدامات اضافی را روی قطعه انجام دهید، مانند حذف و جایگزینی آن در زمان اجرا.
برای افزودن یک قطعه به صورت Statically
در فایل طرحبندی فعالیتی که نقشه را مدیریت میکند:
- یک عنصر
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
فعالیت خود، متد setContentView
را فراخوانی کنید و فایل طرح بندی را به عنوان نمای محتوا تنظیم کنید.
به عنوان مثال، اگر نام فایل layout 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); }
یک دسته برای قطعه دریافت کنید و پاسخ تماس را ثبت کنید
برای بدست آوردن دسته ای از قطعه، متد
FragmentManager.findFragmentById
را فراخوانی کنید و شناسه منبع قطعه را در فایل طرح بندی خود ارسال کنید. اگر قطعه را به صورت پویا اضافه کردید ، از این مرحله بگذرید زیرا قبلاً دسته را بازیابی کرده اید.متد
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
استفاده کنید. زمانی که نقشه برای دریافت ورودی کاربر آماده باشد، تماس برگشتی فعال می شود. این یک نمونه غیر تهی از کلاس GoogleMap
را ارائه می دهد که می توانید برای به روز رسانی نقشه از آن استفاده کنید.
در این مثال، callback 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")); }
وقتی برنامه را با موفقیت بسازید و اجرا کنید ، نقشه ای با نشانگر در جزیره نول (صفر درجه عرض جغرافیایی و صفر درجه طول جغرافیایی) نمایش داده می شود.
مشاهده کد فعالیت کامل:
بعدش چی
پس از تکمیل این مراحل، میتوانید تنظیمات نقشه را پیکربندی کنید .