يوضّح هذا الموضوع كيفية إضافة خريطة أساسية إلى تطبيق Android بعد ضبط المشروع لاستخدام حزمة تطوير البرامج بالاستناد إلى بيانات خرائط 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". يتيح ذلك استخدام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
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(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")); }

عندما تنجح في إنشاء التطبيق وتشغيله، سيعرض خريطة مع علامة على جزيرة نول (خط عرض صفر درجة وخط طول صفر درجة).
يمكنك الاطّلاع على الرمز البرمجي للنشاط الكامل:
الخطوات التالية
بعد إكمال هذه الخطوات، يمكنك ضبط إعدادات الخريطة.