يشرح هذا الموضوع كيفية إضافة خريطة أساسية إلى تطبيق Android بعد ضبط المشروع لاستخدام حزمة تطوير البرامج (SDK) في "خرائط Google" لنظام التشغيل Android. بعد إضافة الخريطة، يمكنك تغيير نوع الخريطة وميزاتها.
نظرة عامة
توفّر حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" للتطبيقات المتوافقة مع Android العديد من الصفوف التي يمكن لتطبيقك استخدامها لإدارة مراحل نشاط التطبيق ووظائفه وبياناته. تتوافق الصفوف مع تفاعلات المستخدم استنادًا إلى نموذج واجهة مستخدم Android، مثل ضبط الحالة الأولية للخريطة والرد على إدخال الإيماءات من المستخدم في وقت التشغيل.
الواجهة الرئيسية والصفوف المعنية بمعالجة الخرائط:
GoogleMap
— نقطة الدخول لإدارة الميزات والبيانات الأساسية على الخريطة. لا يمكن لتطبيقك الوصول إلى عنصرGoogleMap
إلا بعد استرداده من عنصرSupportMapFragment
أوMapView
.SupportMapFragment
— جزء لإدارة مراحل نشاط عنصرGoogleMap
OnMapReadyCallback
: واجهة رصد طلبات لالتعامل مع الأحداث وتفاعل المستخدم مع العنصرGoogleMap
.
يُجري العنصر GoogleMap
هذه العمليات تلقائيًا:
- جارٍ الاتصال بخدمة "خرائط Google"
- جارٍ تنزيل مربعات الخرائط.
- يتم عرض المربّعات على شاشة الجهاز.
- عرض عناصر التحكّم المختلفة مثل العرض الشامل والتكبير/التصغير.
- الاستجابة لطلبات التحريك والتكبير/التصغير عبر تحريك الخريطة وتكبيرها أو تصغيرها
لاستخدام الكائن 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.
الخطوات الأساسية:
للحصول على حزمة تطوير البرامج (SDK) والحصول على مفتاح لواجهة برمجة التطبيقات وإضافة أُطر العمل المطلوبة، اتّبِع الخطوات التالية:
أضِف عنصر
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
واضبطها على رقم تعريف المورد (@+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
. - تنفيذ معاملة تضيف الجزء إلى النشاط. ولمزيد من المعلومات، يُرجى الاطّلاع على المعاملات المجزأة.
على سبيل المثال:
لغة Java
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); getSupportFragmentManager() .beginTransaction() .add(R.id.my_container, mapFragment) .commit();
Kotlin
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(R.id.my_container, mapFragment) .commit()
تنفيذ واجهة OnMapReadyCallback
عدِّل بيان النشاط على النحو التالي:
لغة Java
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
ضبط طريقة عرض المحتوى
في طريقة onCreate
لنشاطك، اطلب
طريقة setContentView
واضبط ملف التنسيق على أنه عرض المحتوى.
على سبيل المثال، إذا كان ملف التنسيق باسم main.xml
:
لغة Java
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
الحصول على اسم معرِّف للجزء وتسجيل معاودة الاتصال
للحصول على اسم معرِّف للجزء، استدعاء طريقة
FragmentManager.findFragmentById
وتمريره رقم تعريف مورد الجزء الذي يظهر في ملف التنسيق. إذا أضفت الجزء بشكل ديناميكي، يمكنك تخطّي هذه الخطوة لأنّك سبق أن استردّت الاسم المعرِّف.يمكنك استدعاء طريقة
getMapAsync
لضبط معاودة الاتصال على الجزء.
على سبيل المثال، إذا أضفت الجزء بشكل ثابت:
لغة Java
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);
Kotlin
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
الحصول على اسم معرِّف لكائن GoogleMap
استخدِم طريقة معاودة الاتصال onMapReady
للحصول على اسم معرِّف لكائن GoogleMap
. يتم تشغيل معاودة الاتصال عندما تكون الخريطة جاهزة لتلقّي إدخال المستخدم. وتوفّر المثيل مثيلاً فارغًا للفئة GoogleMap
التي يمكنك استخدامها لتعديل الخريطة.
في هذا المثال، تسترد معاودة الاتصال onMapReady
الاسم المعرِّف إلى العنصر GoogleMap
ثم تتم إضافة علامة إلى الخريطة:
لغة Java
@Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); }
Kotlin
override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker") ) }
عند إنشاء وتشغيل التطبيق بنجاح، سيعرض خريطة باستخدام علامة خالية في "جزيرة نول" (خط العرض صفر درجة وخطر صفر درجة).
عرض رمز النشاط الكامل:
الخطوات التالية
بعد إكمال هذه الخطوات، يمكنك ضبط إعدادات الخريطة.