適用於 Android 消費者 SDK 的模組化作業

Android 專用的 Consumer SDK 可讓你使用以下應用程式建立共乘應用程式: 一種模組架構您可以使用所需的 API 部分 並將其與您的 API 整合。 消費者 SDK 不同功能的 API 會封裝為獨立模組。

如果你的共乘應用程式使用舊版 Consumer SDK, 您需要升級應用程式才能使用這個模組化架構。這個 遷移指南說明如何升級應用程式。

總覽

Consumer SDK 模組架構 保留使用者介面狀態的工作階段物件。在先前版本中 消費者 SDK 的組成、應用程式的狀態取代為 在這個模組架構中 且可以選擇在地圖上顯示該時段如果沒有工作階段 時,地圖空白。「空白」已不存在 或「已初始化」時間。

工作階段物件代表模組的單一生命週期使用執行個體。 工作階段是模組 API 的存取點。例如: 旅程中的分享歷程你互動過 並使用工作階段物件來監控行程

工作階段物件與模組類型相關聯。工作階段物件的 其初始化物件會連結至其生命週期。

假設您建立 TripModel 物件來追蹤 TRIP_A。 如果再次為 TRIP_A 取得 TripModel 物件,您將 取得相同的 TripModel 物件。如要追蹤 TRIP_B,請取得新的 TripModel 物件。

工作階段狀態

工作階段可能處於下列其中一種狀態:

  • 「已建立」工作階段會以工作階段物件表示。由你建立 呼叫 create 方法來建立工作階段。例如:

    JourneySharingSession sessionA = JourneySharingSession.createInstance(TripModelA)
    
  • 系統會註冊一個啟動工作階段,以更新資料和值 所有使用者介面元素如要啟動工作階段,請呼叫 start 方法。例如:

    sessionA.start()
    
  • 已顯示工作階段會自動開始。顯示使用者介面 E 元素 來因應資料更新您顯示一個時段 只要呼叫 showSession 方法即可。例如:

    ConsumerController.showSession(sessionA)
    
  • 已停止的工作階段會停止重新整理資料並停止更新 使用者介面元素您可以透過呼叫 stop 方法停止工作階段。 例如:

    sessionA.stop()
    

使用僅限資料與使用者介面元件

你可以使用純資料元件建立共乘應用程式 或隨選乘車和外送解決方案提供的使用者介面元素 API

使用資料專用元件

如何使用資料專用元件建立共乘應用程式:

  • 初始化 ConsumerApi 物件。
  • ConsumerApi 取得 TripModelManager 物件。
  • 使用 TripModelManager 開始監控行程,接收 TripModel 物件。
  • TripModel 物件上註冊回呼。

以下範例說明如何使用僅限資料元件:

TripModelManager tripManager = ConsumerApi.getTripModelManager();
TripModel tripA = tripManager.getTripModel("trip_A");
tripA.registerTripCallback(new TripModelCallback() {})

使用使用者介面元素 API

使用 ConsumerController 物件即可存取 隨選乘車和外送服務解決方案使用者介面元素 API

透過隨選乘車和外送解決方案使用者介面,建立共乘應用程式 元素 API:

  • ConsumerApi 物件初始化。
  • ConsumerApi 物件取得 TripModelManager 物件。
  • 從追蹤單趟行程的 TripModelManager 取得 TripModel 物件。
  • ConsumerMap[View/Fragment] 新增至應用程式檢視畫面。
  • ConsumerMap[View/Fragment] 取得 ConsumerController 物件。
  • TripModel 物件提供給控制器,以取得 JourneySharingSession 物件。
  • 使用「控制器」顯示 JourneySharingSession

以下範例說明瞭如何使用使用者介面 API:

TripModelManager tripManager = ConsumerApi.getTripModelManager();
TripModel tripA = TripModelManager.getTripModel("trip_A");

// Session is NOT automatically started when created.
JourneySharingSession jsSessionA = JourneySharingSession.createInstance(tripA);
JourneySharingSession jsSessionB = JourneySharingSession.createInstance(tripB);

// But a session is automatically started when shown.
ConsumerController.showSession(jsSessionA);
ConsumerController.showSession(jsSessionB); // hides trip A; shows trip B.
ConsumerController.hideAllSessions(); // don't show any sessions

// Unregister listeners and delete UI elements of jsSessionA.
consumerController.showSession(jsSessionA);
jsSessionA.stop();
// Recreates and shows UI elements of jsSessionA.
jsSessionA.start();

模組架構程式碼變更

如果你的共乘應用程式使用舊版 Consumer SDK, 新版模組架構需要變更程式碼。 本節將說明其中幾項異動。

位置存取權

不再需要 FINE_LOCATION 項權限 也就是 Consumer SDK

行程監控

新版模組架構需要變更 資料層和使用者介面的使用者

在舊版中,資料層使用者可能會處理 使用以下程式碼監控行程:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
manager.setActiveTrip("trip_id")
manager.registerActiveTripCallback(new TripModelCallback() {})

以模組架構來說,資料層使用者會使用 下列程式碼:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
TripModel tripA = TripModelManager.getTrip("trip_A")
tripA.registerTripCallback(new TripModelCallback() {})

在舊版中,使用者介面使用者可處理行程監控事宜 使用下列程式碼:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
manager.setActiveTrip("trip_id")

ConsumerController controller = consumerGoogleMap.getConsumerController();
consumerController.startJourneySharing()

採用模組架構之後,使用者介面 下列程式碼:

ConsumerApi.initialize()
TripModelManager manager = ConsumerApi.getTripManager()
TripModel tripA = TripModelManager.getTripModel("trip_A");

ConsumerController controller = consumerGoogleMap.getConsumerController();
JourneySharingSession jsSessionA = JourneySharingSession.createInstance(tripA);
controller.showSession(jsSessionA);

地圖重新置中

地圖檢視或片段不會再縮放至使用者的位置 會在沒有執行中的工作階段時,執行初始化相關作業並 自動縮放並顯示執行中的「瀏覽歷程分享」工作階段 一律套用自動相機功能自動相機預設為啟用。

在先前的版本中,您會使用以下程式碼將相機置中 目前使用中的工作階段:

consumerController.centerMapForState()

透過模組架構,您將會使用下列程式碼:

CameraUpdate cameraUpdate = consumerController.getCameraUpdate()
if (cameraUpdate != null) {
   googleMap.animateCamera(cameraUpdate);
   // OR googleMap.moveCamera(cameraUpdate);
}

如要在舊版中停用自動相機功能,應使用下列程式碼:

consumerController.disableAutoCamera(true);

透過模組架構,您將會使用下列程式碼:

consumerController.setAutoCameraEnabled(false);

自訂

「隨選乘車和運送服務」解決方案自訂 FAB 已從地圖中移除。

自訂懸浮動作按鈕 (FAB)

我們也一併移除了 FAB 的關聯方法:

ConsumerController.isMyLocationFabEnabled()
ConsumerController.setMyLocationFabEnabled()