הגדרת מפה

בחירת פלטפורמה: Android iOS

כדי לעקוב אחרי נסיעה באפליקציה למשתמשים, קודם צריך להגדיר מפה ולהוסיף תמיכה במפות וקטוריות, אם צריך.

כדי להגדיר מפה באפליקציה, פועלים לפי השלבים הבאים:

  1. הגדרת מקטע במפה למעקב אחרי נסיעה.
  2. הוספת תמיכה בשכבת בסיס של מפות וב-view controller.
  3. מוסיפים תמיכה בגרפיקה וקטורית של Android כדי להציג מפות וקטוריות, אם צריך.

אחרי שמגדירים מפה, אפשר להוסיף עוד תצוגות ופקדי מצלמה כדי להתאים אישית את החוויה החזותית. פרטים נוספים זמינים במאמר עיצוב מפה.

שלב 1: מגדירים מקטע מפה למעקב אחרי נסיעה

כדי להגדיר מפה, מוסיפים קטע או תצוגה של מפה כדי ליצור את המפה שבה משתפים נסיעה מתי שנוח באפליקציה למשתמשים. כדי להגדיר את המפה, פועלים לפי אחת מהשיטות הבאות:

  • ‫ConsumerMapFragment: משמש להגדרת המפה באמצעות Fragment.

  • ‫ConsumerMapView: משמש להגדרת מפה עם View.

התכונות זהות בשתי השיטות, אז אתם יכולים לבחור את השיטה שמתאימה יותר לאפליקציה שלכם.

שתי השיטות מוסברות בפירוט בקטע הבא.

הוספת קטע או תצוגה של מפה

כדי ליצור מפה להצגת התקדמות הנסיעה באמצעות Android Fragment או תצוגה, פועלים לפי השלבים הבאים ונעזרים בדוגמאות הקוד.

  1. מגדירים מקטע או תצוגה בקובץ ה-XML של פריסת האפליקציה שנמצא ב-/res/layout. מגדירים את מפת הנסיעה כקטע באמצעות ConsumerMapFragment או כתצוגה באמצעות ConsumerMapView.

    לאחר מכן, החלק או התצוגה מספקים גישה למפת הנסיעה, שהאפליקציה יכולה לגשת אליה ולשנות אותה. המפה גם מספקת נקודת אחיזה ל-ConsumerController, שמאפשרת לאפליקציה לשלוט בחוויית הצרכן ולהתאים אותה אישית.

  2. מה-method‏ onCreate(), מפעילים את getConsumerGoogleMapAsync(callback), שמחזירה את ConsumerGoogleMap באופן אסינכרוני בקריאה החוזרת (callback).

  3. אפשר להשתמש בConsumerGoogleMap כדי להציג את התקדמות הנסיעה ולעדכן לפי הצורך.

דוגמה להוספת ConsumerMapFragment

  1. מגדירים את ה-fragment בקובץ ה-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" />
    
  2. מבצעים קריאה ל-getConsumerGoogleMapAsync() מה-method‏ 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

  1. משתמשים בתצוגה בפרגמנט או בפעילות, כפי שמוגדר בקובץ ה-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" />
    
  2. מתקשרים אל getConsumerGoogleMapAsync() מהמספר onCreate(). בנוסף לפרמטר של הקריאה החוזרת (callback), צריך לכלול את הפרטים הבאים:

    • הפעילות או המקטע שמכילים את הרכיב. המחלקה הבסיסית של הפעילות או הפרגמנט חייבת להיות FragmentActivity או Fragment (בהתאמה), כי הן מספקות גישה למחזור החיים שלה.

    • ‫GoogleMapOptions (שיכול להיות null), שמכיל מאפייני הגדרה של 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 ב-fragment זהה לדוגמה הקודמת של הוספת MapView בפעילות, מלבד העובדה שה-fragment מנפח את הפריסה שכוללת את ה-MapView ב-method onCreateView() של ה-fragment.

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: מוסיפים תמיכה בשכבת בסיס של מפות וב-view controller

כדי לשתף את ההתקדמות בנסיעה באפליקציה, צריך להוסיף לאפליקציה את המחלקות הבאות: ConsumerGoogleMap ו-ConsumerController.

  • מקבלים את ConsumerGoogleMap מ-ConsumerMapFragment או מ-ConsumerMapView, שניהם מחזירים את ConsumerGoogleMap באופן אסינכרוני ב-ConsumerMapReadyCallback.

    ‫ConsumerGoogleMap היא מחלקת wrapper של המחלקה GoogleMap. הוא משתמש ב-API ששווה ערך ל-GoogleMap כדי שהאפליקציה תוכל לקיים אינטראקציה עם המפה. כך האפליקציה יכולה לקיים אינטראקציה חלקה עם אותה מפה בסיסית של Google. לדוגמה, GoogleMap מאפשר רק רישום אחד של קריאה חוזרת (callback), אבל 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 ובפריטים גרפיים וקטוריים שניתן לשרטוט. כדי לעשות את זה:

  1. מוסיפים את הקוד הבא ל-Activity. הקוד הזה מרחיב את 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() {
  // ...
}

המאמרים הבאים

מעקב אחרי נסיעה ב-Android

עיצוב מפה