لمتابعة رحلة في تطبيق المستهلك، عليك أولاً تحديد خريطة وإضافة إمكانية استخدام الخرائط المتجهّة، إذا لزم الأمر.
لإعداد خريطة في تطبيقك، اتّبِع الخطوات التالية:
- تحديد جزء من الخريطة لمتابعة رحلة
- إتاحة استخدام طبقة أساسية للخريطة وعنصر التحكّم في العرض
- أضِف ميزة استخدام الرسومات المتجهّة في Android لعرض رسومات المخططات المتجهّة، إذا لزم الأمر.
بعد تحديد خريطة، يمكنك إضافة طرق عرض إضافية وعناصر التحكّم في الكاميرة التي تريدها لتخصيص التجربة المرئية. لمزيد من التفاصيل، اطّلِع على منح الخريطة مظهرًا.
الخطوة 1: تحديد جزء من الخريطة لمتابعة رحلة
يمكنك تحديد خريطة من خلال إضافة جزء خريطة أو عرض لإنشاء الخريطة التي تتم فيها مشاركة رحلة عند الطلب في تطبيق المستهلك. لتحديد خريطتك، اتّبِع إحدى الطريقتَين التاليتَين:
ConsumerMapFragment
: استخدِم هذا الرمز لتحديد خريطتك باستخدامFragment
.ConsumerMapView
: استخدِم هذا العنصر لتحديد خريطة باستخدامView
.
تتطابق الميزات في كلتا الطريقتَين، لذا اختَر الطريقة التي تُناسب تطبيقك بشكل أفضل.
يتم شرح كلتا الطريقتَين بمزيد من التفصيل في القسم التالي.
إضافة جزء من الخريطة أو عرض
لإنشاء خريطة لعرض مستوى تقدّم الرحلة باستخدام إما شريحة Android أو عرض، اتّبِع الخطوات التالية واطّلِع على مثالي الرمز البرمجي.
حدِّد جزءًا أو عرضًا في ملف XML لتصميم تطبيقك والذي يقع في
/res/layout
. حدِّد خريطة الرحلة إما كجزء باستخدامConsumerMapFragment
أو كعرض باستخدامConsumerMapView
.يوفر المقتطف أو طريقة العرض بعد ذلك إمكانية الوصول إلى ملف تضاريس الرحلة الذي يمكن لتطبيقك الوصول إليه وتعديله. توفّر الخريطة أيضًا اسمًا معرِّفًا
ConsumerController
، ما يسمح لتطبيقك بالتحكّم في تجربة المستهلك و تخصيصها.من طريقة
onCreate()
، استخدِمgetConsumerGoogleMapAsync(callback)
، الذي يعرضConsumerGoogleMap
بشكل غير متزامن في دالة الاستدعاء.استخدِم
ConsumerGoogleMap
لعرض مستوى تقدّم الرحلة وتعديله حسب الحاجة.
مثال على كيفية إضافة ConsumerMapFragment
حدِّد المقتطف في ملف XML الخاص بتنسيق تطبيقك، كما هو موضّح في مثال الرمز التالي.
<fragment xmlns:android="http://schemas.android.com/apk/res/android" android:name="com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapFragment" android:id="@+id/consumer_map_fragment" android:layout_width="match_parent" android:layout_height="match_parent" />
أجرِ مكالمة إلى
getConsumerGoogleMapAsync()
منonCreate()
الطريقة.
Java
public class SampleAppActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Find the ConsumerMapFragment.
ConsumerMapFragment consumerMapFragment =
(ConsumerMapFragment) fragmentManager.findFragmentById(R.id.consumer_map_fragment);
// Initiate the callback that returns the map.
if (consumerMapFragment != null) {
consumerMapFragment.getConsumerGoogleMapAsync(
new ConsumerMapReadyCallback() {
// The map returned in the callback is used to access the ConsumerController.
@Override
public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
ConsumerController consumerController = consumerGoogleMap.getConsumerController();
}
});
}
}
}
Kotlin
class SampleAppActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Find the ConsumerMapFragment.
val consumerMapFragment =
fragmentManager.findFragmentById(R.id.consumer_map_fragment) as ConsumerMapFragment
consumerMapFragment.getConsumerGoogleMapAsync(
object : ConsumerMapReadyCallback() {
override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
val consumerController = consumerGoogleMap.getConsumerController()!!
}
}
)
}
}
مثال على كيفية إضافة ConsumerMapView
استخدِم طريقة العرض في جزء أو في نشاط، كما هو محدّد فيملف XML.
<com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/consumer_map_view" android:layout_width="match_parent" android:layout_height="match_parent" />
اتصل بالرقم
getConsumerGoogleMapAsync()
منonCreate()
. بالإضافة إلى مَعلمة callback، أدرِج التفاصيل التالية:النشاط أو المقتطف الذي يحتوي على العنصر يجب أن يكون
FragmentActivity
أوFragment
(على التوالي) هو فئة النشاط أو المقتطف الأساسية، لأنّهما يقدّمان إمكانية الوصول إلى دورة حياته.
GoogleMapOptions
(يمكن أن يكون فارغًا)، الذي يحتوي على سمات الإعدادات لـMapView
Java
public class SampleAppActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
ConsumerMapView mapView = findViewById(R.id.consumer_map_view);
if (mapView != null) {
mapView.getConsumerGoogleMapAsync(
new ConsumerMapReadyCallback() {
// The map returned in the callback is used to access the ConsumerController.
@Override
public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
ConsumerController consumerController = consumerGoogleMap.getConsumerController();
}
}, this, null);
}
}
}
Kotlin
class SampleAppActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val mapView = findViewById(R.id.consumer_map_view) as ConsumerMapView
mapView.getConsumerGoogleMapAsync(
object : ConsumerMapReadyCallback() {
// The map returned in the callback is used to access the ConsumerController.
override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
val consumerController = consumerGoogleMap.getConsumerController()!!
}
},
/* fragmentActivity= */ this,
/* googleMapOptions= */ null,
)
}
}
MapView
في المقتطف هو نفسه المثال السابق لمحاولة استخدام MapView
في نشاط، باستثناء أنّ المقتطف يضخّم التنسيق الذي يحتوي على MapView
في طريقة onCreateView()
للمقتطف.
Java
public class MapViewInFragment extends Fragment {
@Override
public View onCreateView(
@NonNull LayoutInflater layoutInflater,
@Nullable ViewGroup viewGroup,
@Nullable Bundle bundle) {
return layoutInflater.inflate(R.layout.consumer_map_view, viewGroup, false);
}
}
Kotlin
class MapViewInFragment : Fragment() {
override fun onCreateView(
layoutInflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
return layoutInflater.inflate(R.layout.consumer_map_view, viewGroup, false)
}
}
الخطوة 2: إضافة إمكانية استخدام طبقة أساسية للخرائط وعنصر التحكّم في العرض
لمشاركة مستوى تقدُّم الرحلة في تطبيقك، أضِف الklassen التالية إلى تطبيقك: ConsumerGoogleMap
وConsumerController
.
الحصول على
ConsumerGoogleMap
منConsumerMapFragment
أوConsumerMapView
، وكلاهما يعرضان بشكل غير متزامنConsumerGoogleMap
فيConsumerMapReadyCallback
ConsumerGoogleMap
هي فئة ملفوفة لفئةGoogleMap
. ويستخدم واجهة برمجة تطبيقات مماثلة لواجهةGoogleMap
ليتمكّن تطبيقك من التفاعل مع الخريطة. بهذه الطريقة، يمكن لتطبيقك التفاعل بسلاسة مع "خرائط Google" الأساسية نفسها. على سبيل المثال، لا يسمحGoogleMap
إلا بتسجيل مكالمة تلقائية واحدة، ولكنConsumerGoogleMap
يتيح المكالمات المُسجَّلة المزدوجة. تتيح لك هذه وظائف الاستدعاء تسجيل وظائف الاستدعاء التي يتمّ استدعاؤها بشكل تسلسلي.يمكنك الحصول على
ConsumerController
منConsumerGoogleMap
فيgetConsumerController()
.يتيح لك
ConsumerController
الوصول إلى ميزات مشاركة الرحلات، مثل مراقبة الرحلات والتحكّم في حالتها وضبط المواقع الجغرافية.
لمعرفة كيفية إضافة ConsumerGoogleMap
وConsumerController
إلى تطبيقك في
Java وKotlin، اطّلِع على الأمثلة التالية.
Java
private ConsumerGoogleMap consumerGoogleMap;
private ConsumerController consumerController;
private ConsumerMapView consumerMapView;
consumerMapView.getConsumerGoogleMapAsync(
new ConsumerMapReadyCallback() {
@Override
public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerMap) {
consumerGoogleMap = consumerMap;
consumerController = consumerMap.getConsumerController();
}
},
this, null);
Kotlin
var consumerGoogleMap: ConsumerGoogleMap
var consumerController: ConsumerController
val consumerMapView = findViewById(R.id.consumer_map_view) as ConsumerMapView
consumerMapView.getConsumerGoogleMapAsync(
object : ConsumerMapReadyCallback() {
override fun onConsumerMapReady(consumerMap: ConsumerGoogleMap) {
consumerGoogleMap = consumerMap
consumerController = consumerMap.getConsumerController()
},
/* fragmentActivity= */ this,
/* googleMapOptions= */ null,
}
)
الخطوة 3: إضافة رسومات هندسية لنظام التشغيل Android
إذا كان تصميم تطبيقك يتطلّب إتاحة الرسومات المتجهّة، أضِف إتاحة استخدام أجهزة Android والرسومات المتجهّة القابلة للرسم باتّباع الخطوات التالية:
- أضِف الرمز التالي إلى نشاطك. تمتد هذه الرموز
AppCompatActivity
لاستخدام عناصر الرسم المتجه في حزمة Consumer SDK.
Java
// ...
import android.support.v7.app.AppCompatActivity;
// ...
public class ConsumerTestActivity extends AppCompatActivity {
// ...
}
Kotlin
// ...
import android.support.v7.app.AppCompatActivity
// ...
class ConsumerTestActivity : AppCompatActivity() {
// ...
}