การเริ่มต้นใช้งาน Driver SDK สําหรับ Android

คุณสามารถใช้ Driver SDK เพื่อเพิ่มประสิทธิภาพการนำทางและการติดตาม ไปยังแอปพลิเคชัน "การเดินทางและความคืบหน้าในการสั่งซื้อ" ของคุณ Driver SDK มี การอัปเดตตำแหน่งรถและการอัปเดตงานของ Solution Fleet Engine การโดยสารและการนำส่งแบบออนดีมานด์

Driver SDK จะรับรู้ถึงบริการ Fleet Engine และบริการที่กำหนดเองของคุณ ของตำแหน่งและสถานะของรถ เช่น รถยนต์สามารถเป็น ONLINE หรือ OFFLINE และตำแหน่งของรถจะเปลี่ยนไปเมื่อการเดินทางดำเนินไป

ข้อกำหนดขั้นต่ำของระบบ

อุปกรณ์เคลื่อนที่ต้องใช้ Android 6.0 (API ระดับ 23) ขึ้นไป

การกำหนดค่าบิลด์และการขึ้นต่อกัน

Driver SDK เวอร์ชัน 4.99 ขึ้นไปจะพร้อมให้บริการจากที่เก็บของ Google Maven

Gradle

เพิ่มโค้ดต่อไปนี้ในไฟล์ build.gradle

repositories {
    ...
    google()
}

Maven

เพิ่มโค้ดต่อไปนี้ในไฟล์ pom.xml

<project>
  ...
  <repositories>
    <repository>
      <id>google-maven-repository</id>
      <url>https://maven.google.com</url>
    </repository>
  </repositories>
  ...
</project>

การกำหนดค่าโปรเจ็กต์

หากต้องการใช้ Driver SDK แอปของคุณต้องกําหนดเป้าหมาย minSdkVersion 23 ขึ้นไป

หากต้องการเรียกใช้แอปที่สร้างด้วย Driver SDK อุปกรณ์ Android อุปกรณ์ต้องมี บริการ Google Play ติดตั้งไว้แล้ว

ตั้งค่าโปรเจ็กต์การพัฒนา

วิธีตั้งค่าโปรเจ็กต์การพัฒนาและรับคีย์ API สำหรับโปรเจ็กต์ใน Google Cloud Console

  1. สร้างโปรเจ็กต์คอนโซล Google Cloud ใหม่หรือเลือกโปรเจ็กต์ที่มีอยู่เพื่อใช้งาน ด้วย Driver SDK รอสักครู่จนถึง โปรเจ็กต์ใหม่จะปรากฏใน Google Cloud Console

  2. โปรเจ็กต์ต้องมีสิทธิ์เข้าถึง Maps SDK เพื่อเรียกใช้แอปเดโม สำหรับ Android ใน Google Cloud Console ให้เลือก API และ บริการ > จากนั้นค้นหาและเปิดใช้ Maps SDK สำหรับ Android

  3. รับคีย์ API สำหรับโปรเจ็กต์โดยเลือก API และ บริการ > ข้อมูลเข้าสู่ระบบ > สร้างข้อมูลเข้าสู่ระบบ > คีย์ API ดูข้อมูลเพิ่มเติมเกี่ยวกับการรับคีย์ API ได้ที่ รับคีย์ API

เพิ่ม Driver SDK ลงในแอปของคุณ

Driver SDK พร้อมให้ใช้งานจากที่เก็บของ Google Maven มีไฟล์ Project Object Model (.pom) และ Javadocs ของ SDK วิธีเพิ่ม Driver SDK ลงในแอป

  1. เพิ่มทรัพยากร Dependency ต่อไปนี้ในการกำหนดค่า Gradle หรือ Maven โดยแทนที่ ตัวยึดตำแหน่ง VERSION_NUMBER สำหรับเวอร์ชัน Driver SDK ที่ต้องการ

    Gradle

    เพิ่มสิ่งต่อไปนี้ใน build.gradle

    dependencies {
      ...
      implementation 'com.google.android.libraries.mapsplatform.transportation:transportation-driver:VERSION_NUMBER'
    }
    

    Maven

    เพิ่มสิ่งต่อไปนี้ใน pom.xml

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.mapsplatform.transportation</groupId>
        <artifactId>transportation-driver</artifactId>
        <version>VERSION_NUMBER</version>
      </dependency>
    </dependencies>
    
  2. Driver SDK จะขึ้นอยู่กับ Navigation SDK ทรัพยากร Dependency นี้ได้รับการกำหนดค่าใน หากจำเป็นต้องใช้ Navigation SDK เวอร์ชันใดเวอร์ชันหนึ่ง อย่างชัดแจ้งในไฟล์การกำหนดค่าบิลด์ดังต่อไปนี้ การละเว้นโค้ดบล็อกที่ระบุจะทำให้โปรเจ็กต์ดาวน์โหลดได้เสมอ Navigation SDK เวอร์ชันล่าสุดภายในเวอร์ชันหลักที่เผยแพร่ โปรดทราบว่าลักษณะการทำงานแบบรวมของ Driver SDK เวอร์ชันล่าสุดและ Navigation SDK ได้รับการทดสอบอย่างเคร่งครัดก่อนเผยแพร่

    จัดการการกำหนดค่าทรัพยากร Dependency ของการพัฒนาและรุ่น สภาพแวดล้อมที่สอดคล้องกัน

    Gradle

    เพิ่มสิ่งต่อไปนี้ใน build.gradle

    dependencies {
      ...
      implementation 'com.google.android.libraries.navigation:navigation:5.0.0'
    }
    

    Maven

    เพิ่มสิ่งต่อไปนี้ใน pom.xml

    <dependencies>
      ...
      <dependency>
        <groupId>com.google.android.libraries.navigation</groupId>
        <artifactId>navigation</artifactId>
        <version>5.0.0</version>
      </dependency>
    </dependencies>
    

เพิ่มคีย์ API ลงในแอป

เมื่อเพิ่ม Driver SDK ลงในแอปแล้ว ให้เพิ่มคีย์ API ลงในแอป คุณ ต้องใช้คีย์ API ของโปรเจ็กต์ที่คุณได้รับเมื่อ สร้างโปรเจ็กต์การพัฒนาของคุณ

ส่วนนี้จะอธิบายวิธีจัดเก็บคีย์ API เพื่อให้ปลอดภัยยิ่งขึ้น ที่แอปของคุณอ้างอิง คุณไม่ควรตรวจสอบคีย์ API ในเวอร์ชันของคุณ ระบบควบคุม ซึ่งควรจัดเก็บไว้ในไฟล์ local.properties อยู่ในไดเรกทอรีรากของโปรเจ็กต์ของคุณ ดูข้อมูลเพิ่มเติมเกี่ยวกับ local.properties ไฟล์ โปรดดู ไฟล์คุณสมบัติ Gradle

หากต้องการเพิ่มประสิทธิภาพงานนี้ คุณสามารถใช้ ปลั๊กอินข้อมูลลับ Gradle สำหรับ Android

วิธีติดตั้งปลั๊กอินและจัดเก็บคีย์ API

  1. เปิดไฟล์ build.gradle ระดับรากและเพิ่มโค้ดต่อไปนี้ลงในส่วน dependencies องค์ประกอบภายใต้ buildscript

    ดึงดูด

    buildscript {
        dependencies {
            // ...
            classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0"
        }
    }
    

    Kotlin

    buildscript {
        dependencies {
            // ...
            classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0")
        }
    }
    
  2. เปิดไฟล์ build.gradle ระดับแอปและเพิ่มโค้ดต่อไปนี้ลงใน องค์ประกอบ plugins

    ดึงดูด

    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    

    Kotlin

    id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
    
  3. หากใช้ Android Studio ซิงค์โปรเจ็กต์กับ Gradle

  4. เปิด local.properties ในไดเรกทอรีระดับโปรเจ็กต์ แล้วเพิ่ม โค้ดต่อไปนี้ แทนที่ YOUR_API_KEY ด้วยคีย์ API

    MAPS_API_KEY=YOUR_API_KEY
    
  5. ในไฟล์ AndroidManifest.xml ให้ไปที่ com.google.android.geo.API_KEY และอัปเดตแอตทริบิวต์ android:value ดังนี้

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
    

ตัวอย่างต่อไปนี้แสดงไฟล์ Manifest ที่สมบูรณ์สำหรับแอปตัวอย่าง

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.driverapidemo">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/_AppTheme">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="${MAPS_API_KEY}" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

ใส่การระบุแหล่งที่มาที่จำเป็นในแอปของคุณ

หากใช้ Driver SDK ในแอป คุณจะต้องใส่ ข้อความระบุแหล่งที่มาและใบอนุญาตโอเพนซอร์สเป็นส่วนหนึ่งของประกาศทางกฎหมายของแอป คุณควรรวมการระบุแหล่งที่มาเป็นรายการเมนูอิสระหรือ ของรายการในเมนูเกี่ยวกับ

คุณดูข้อมูลใบอนุญาตได้ใน "third_party_licenses.txt" ไฟล์ใน ไฟล์ AAR ที่ยกเลิกการเก็บ

โปรดดูที่ https://developers.google.com/android/guides/opensource เกี่ยวกับวิธีรวมประกาศโอเพนซอร์ส

การอ้างอิง

หากคุณใช้ ProGuard เพื่อ เพิ่มประสิทธิภาพบิลด์ของคุณ คุณอาจต้องเพิ่มบรรทัดต่อไปนี้ลงใน ProGuard ไฟล์การกำหนดค่าอยู่ที่ตำแหน่งต่อไปนี้

-dontwarn com.google.**
-dontwarn okio.**

ระดับ API ขั้นต่ำที่รองรับคือ 23

การเริ่มต้น SDK

คุณต้องระบุรหัสผู้ให้บริการ (โดยปกติจะเป็นรหัสโปรเจ็กต์ Google Cloud) เพื่อดําเนินการ เริ่มต้นออบเจ็กต์ DriverContext สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่า โปรดดูโปรเจ็กต์ Google Cloud การตรวจสอบสิทธิ์และการให้สิทธิ์

ก่อนใช้ Driver SDK คุณต้องเริ่มต้น Navigation SDK วิธีเริ่มต้น SDK

  1. รับออบเจ็กต์ Navigator จาก NavigationApi

    Java

    NavigationApi.getNavigator(
        this, // Activity
        new NavigationApi.NavigatorListener() {
          @Override
          public void onNavigatorReady(Navigator navigator) {
            // Keep a reference to the Navigator (used to configure and start nav)
            this.navigator = navigator;
          }
        }
    );
    

    Kotlin

    NavigationApi.getNavigator(
      this, // Activity
      object : NavigatorListener() {
        override fun onNavigatorReady(navigator: Navigator) {
          // Keep a reference to the Navigator (used to configure and start nav)
          this@myActivity.navigator = navigator
        }
      },
    )
    
  2. สร้างออบเจ็กต์ DriverContext โดยเติมข้อมูลในช่องที่ต้องกรอก

    Java

    DriverContext driverContext = DriverContext.builder(application)
        .setProviderId(providerId)
        .setVehicleId(vehicleId)
        .setAuthTokenFactory(authTokenFactory)
        .setNavigator(navigator)
        .setRoadSnappedLocationProvider(
            NavigationApi.getRoadSnappedLocationProvider(application))
        .build();
    

    Kotlin

    val driverContext =
      DriverContext.builder(application)
        .setProviderId(providerId)
        .setVehicleId(vehicleId)
        .setAuthTokenFactory(authTokenFactory)
        .setNavigator(navigator)
        .setRoadSnappedLocationProvider(NavigationApi.getRoadSnappedLocationProvider(application))
        .build()
    
  3. ใช้ออบเจ็กต์ DriverContext เพื่อเริ่มต้น *DriverApi

    Java

    RidesharingDriverApi ridesharingDriverApi = RidesharingDriverApi.createInstance(driverContext);
    

    Kotlin

    val ridesharingDriverApi = RidesharingDriverApi.createInstance(driverContext)
    
  4. รับ RidesharingVehicleReporter จากออบเจ็กต์ API (*VehicleReporter ขยายเวลา NavigationVehicleReporter)

    Java

    RidesharingVehicleReporter vehicleReporter = ridesharingDriverApi.getRidesharingVehicleReporter();
    

    Kotlin

    val vehicleReporter = ridesharingDriverApi.getRidesharingVehicleReporter()
    

กำลังตรวจสอบสิทธิ์กับ AuthTokenFactory

เมื่อ Driver SDK สร้างการอัปเดตตำแหน่ง ก็จะต้องส่งการอัปเดตเหล่านี้ไปยัง เซิร์ฟเวอร์ Fleet Engine ในการตรวจสอบสิทธิ์คำขอเหล่านี้ Driver SDK จะโทรหาผู้โทรที่ระบุไว้ AuthTokenFactory โรงงานมีหน้าที่สร้างโทเค็นการตรวจสอบสิทธิ์ที่สถานที่ตั้ง เวลาที่อัปเดต

วิธีสร้างโทเค็นจะเฉพาะเจาะจงสำหรับแต่ละสถานการณ์ของนักพัฒนาซอฟต์แวร์แต่ละคน อย่างไรก็ตาม การติดตั้งใช้งานอาจต้องดำเนินการต่อไปนี้

  • ดึงโทเค็นการตรวจสอบสิทธิ์ที่อาจอยู่ในรูปแบบ JSON จากเซิร์ฟเวอร์ HTTPS
  • แยกวิเคราะห์และแคชโทเค็น
  • รีเฟรชโทเค็นเมื่อหมดอายุ

โปรดดูรายละเอียดโทเค็นที่เซิร์ฟเวอร์ Fleet Engine คาดหวังที่ การสร้าง JSON Web Token (JWT) สำหรับการให้สิทธิ์

การใช้โครงสร้างของ AuthTokenFactory มีดังนี้

Java

class JsonAuthTokenFactory implements AuthTokenFactory {
  private String token;  // initially null
  private long expiryTimeMs = 0;

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  @Override
  public String getToken(AuthTokenContext authTokenContext) {
    if (System.currentTimeMillis() > expiryTimeMs) {
      // The token has expired, go get a new one.
      fetchNewToken(authTokenContext.getVehicleId());
    }
    return token;
  }

  private void fetchNewToken(String vehicleId) {
    String url =
        new Uri.Builder()
            .scheme("https")
            .authority("yourauthserver.example")
            .appendPath("token")
            .appendQueryParameter("vehicleId", vehicleId)
            .build()
            .toString();

    try (Reader r = new InputStreamReader(new URL(url).openStream())) {
      com.google.gson.JsonObject obj
          = com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
      token = obj.get("Token").getAsString();
      expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();

      // The expiry time could be an hour from now, but just to try and avoid
      // passing expired tokens, we subtract 10 minutes from that time.
      expiryTimeMs -= 10 * 60 * 1000;
    } catch (IOException e) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw new RuntimeException("Could not get auth token", e);
    }
  }
}

Kotlin

class JsonAuthTokenFactory : AuthTokenFactory() {

  private var token: String = ""
  private var expiryTimeMs: Long = 0

  // This method is called on a thread whose only responsibility is to send
  // location updates. Blocking is OK, but just know that no location updates
  // can occur until this method returns.
  override fun getToken(context: AuthTokenContext): String {
    if (System.currentTimeMillis() > expiryTimeMs) {
      // The token has expired, go get a new one.
      fetchNewToken(authTokenContext.getVehicleId())
    }
     return token
  }

  fun fetchNewToken(vehicleId: String) {
    val url =
      Uri.Builder()
        .scheme("https")
        .authority("yourauthserver.example")
        .appendPath("token")
        .appendQueryParameter("vehicleId", vehicleId)
        .build()
        .toString()

    try {
      val reader = InputStreamReader(URL(url).openStream())

      reader.use {
        val obj = com.google.gson.JsonParser.parseReader(r).getAsJsonObject()

        token = obj.get("ServiceToken").getAsString()
        expiryTimeMs = obj.get("TokenExpiryMs").getAsLong()

        // The expiry time could be an hour from now, but just to try and avoid
        // passing expired tokens, we subtract 10 minutes from that time.
        expiryTimeMs -= 10 * 60 * 1000
      }
    } catch (e: IOException) {
      // It's OK to throw exceptions here. The StatusListener you passed to
      // create the DriverContext class will be notified and passed along the failed
      // update warning.
      throw RuntimeException("Could not get auth token", e)
    }
  }
}

การใช้งานนี้ใช้ไคลเอ็นต์ Java HTTP ในตัวเพื่อดึงข้อมูล โทเค็นในรูปแบบ JSON จากเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของนักพัฒนาซอฟต์แวร์ โทเค็นคือ บันทึกไว้เพื่อใช้ซ้ำ ระบบจะดึงข้อมูลโทเค็นอีกครั้งหากโทเค็นเก่ายังอยู่ภายใน 10 นาที ของเวลาหมดอายุ

การใช้งานของคุณอาจดำเนินการต่างออกไป เช่น การใช้ชุดข้อความในเบื้องหลัง เพื่อรีเฟรชโทเค็น

ข้อยกเว้นใน AuthTokenFactory จะถือว่าเป็นชั่วคราว เว้นแต่จะเกิดขึ้น ซ้ำๆ หลังจากพยายามหลายครั้ง Driver SDK จะถือว่า เป็นการดำเนินการถาวรและจะหยุดพยายามส่งการอัปเดต

การรายงานสถานะและข้อผิดพลาดเกี่ยวกับ StatusListener

เนื่องจาก Driver SDK จะดำเนินการใน ให้ใช้ StatusListener เพื่อเรียกใช้การแจ้งเตือนเมื่อ เหตุการณ์ที่เกิดขึ้น เช่น ข้อผิดพลาด คำเตือน หรือข้อความแก้ไขข้อบกพร่อง ข้อผิดพลาดอาจมีดังนี้ เกิดขึ้นชั่วคราว (เช่น BACKEND_CONNECTIVITY_ERROR) หรืออาจกล่าวได้ว่า ทำให้การอัปเดตตำแหน่งหยุดลงอย่างถาวร (เช่น VEHICLE_NOT_FOUND ซึ่งแสดงว่าเกิดข้อผิดพลาดในการกำหนดค่า)

คุณจัดหาการติดตั้งใช้งาน StatusListener ที่ไม่บังคับดังตัวอย่างต่อไปนี้

Java

class MyStatusListener implements StatusListener {
  /** Called when background status is updated, during actions such as location reporting. */
  @Override
  public void updateStatus(
      StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
    // Status handling stuff goes here.
    // StatusLevel may be DEBUG, INFO, WARNING, or ERROR.
    // StatusCode may be DEFAULT, UNKNOWN_ERROR, VEHICLE_NOT_FOUND,
    // BACKEND_CONNECTIVITY_ERROR, or PERMISSION_DENIED.
  }
}

Kotlin

class MyStatusListener : StatusListener() {
  /** Called when background status is updated, during actions such as location reporting. */
  override fun updateStatus(statusLevel: StatusLevel, statusCode: StatusCode, statusMsg: String) {
    // Status handling stuff goes here.
    // StatusLevel may be DEBUG, INFO, WARNING, or ERROR.
    // StatusCode may be DEFAULT, UNKNOWN_ERROR, VEHICLE_NOT_FOUND,
    // BACKEND_CONNECTIVITY_ERROR, or PERMISSION_DENIED.
  }
}

หมายเหตุเกี่ยวกับ SSL/TLS

สำหรับการใช้งานภายใน การใช้ Driver SDK จะใช้ SSL/TLS เพื่อสื่อสารอย่างปลอดภัย กับเซิร์ฟเวอร์ Fleet Engine Android เวอร์ชันเก่า (API เวอร์ชัน 19 หรือ ต่ำกว่า) อาจต้องใช้แพตช์ SecurityProvider เพื่อให้สามารถสื่อสารกับ เซิร์ฟเวอร์ คุณควรจะเห็น บทความ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้งาน SSL ใน Android บทความนี้ยัง มีตัวอย่างโค้ดสำหรับแพตช์ผู้ให้บริการด้านความปลอดภัย

การเปิดใช้การอัปเดตตำแหน่ง

เมื่อคุณมีอินสแตนซ์ *VehicleReporter แล้ว การเปิดใช้การอัปเดตตำแหน่งจะเป็นดังนี้ ตรงไปตรงมา:

Java

RidesharingVehicleReporter reporter = ...;

reporter.enableLocationTracking();

Kotlin

val reporter = ...

reporter.enableLocationTracking()

ระบบจะส่งข้อมูลอัปเดตตำแหน่งเป็นระยะๆ เมื่อสถานะของยานพาหนะคือ ONLINE โปรดทราบว่าการโทรหา reporter.enableLocationTracking() จะไม่ ตั้งค่าสถานะยานพาหนะเป็น ONLINE โดยอัตโนมัติ คุณต้อง ตั้งค่าสถานะยานพาหนะอย่างชัดเจน

ช่วงเวลาการรายงานโดยค่าเริ่มต้นคือ 10 วินาที ช่วงการรายงานสามารถ เปลี่ยนแปลงได้ด้วย reporter.setLocationReportingInterval(long, TimeUnit) ช่วงเวลาการอัปเดตขั้นต่ำที่รองรับคือ 5 วินาที การอัปเดตบ่อยขึ้นอาจ จะทำให้ส่งคำขอและข้อผิดพลาดได้ช้าลง

การปิดใช้งานการอัปเดตตำแหน่ง

เมื่อพ้นกะคนขับรถแล้ว จะสามารถหยุดการอัปเดตตำแหน่งและ รถยนต์ทำเครื่องหมายว่าออฟไลน์ด้วยการโทร DeliveryVehicleReporter.disableLocationTracking หรือ RidesharingVehicleReporter.disableLocationTracking

การโทรนี้จะทําให้ต้องกำหนดเวลาอัปเดตครั้งสุดท้าย 1 รายการทันที ซึ่งแสดงว่าพาหนะออฟไลน์อยู่ การอัปเดตนี้จะไม่รวม ตำแหน่งนั้น

การตั้งค่าสถานะของพาหนะ

เมื่อเปิดใช้การอัปเดตตำแหน่ง การตั้งค่าสถานะของรถยนต์เป็น ONLINE จะ ทำให้รถยนต์พร้อมใช้งานสำหรับการค้นหา SearchVehicles ในทำนองเดียวกัน การทำเครื่องหมาย ยานพาหนะเป็น OFFLINE จะทำเครื่องหมายยานพาหนะว่าไม่พร้อมให้บริการ

คุณสามารถเลือกตั้งค่าสถานะรถยนต์ทางฝั่งเซิร์ฟเวอร์ได้ (โปรดดูการอัปเดต ยานพาหนะ) หรือโดยตรงใน Driver SDK

Java

RidesharingVehicleReporter reporter = ...;

reporter.enableLocationTracking();
reporter.setVehicleState(VehicleState.ONLINE);

Kotlin

val reporter = ...

reporter.enableLocationTracking()
reporter.setVehicleState(VehicleState.ONLINE)

เมื่อเปิดใช้การอัปเดตตำแหน่ง การโทรไปยัง setVehicleState จะมีผลในเวลา การอัปเดตตำแหน่งครั้งต่อไป

การทำเครื่องหมายยานพาหนะเป็น ONLINE เมื่อไม่ได้เปิดใช้การติดตามตำแหน่งจะทำให้เกิดผล ใน IllegalStateException ระบบจะทําเครื่องหมายยานพาหนะเป็น OFFLINE ได้ในกรณีต่อไปนี้ ยังไม่ได้เปิดใช้งานหรือปิดใช้งานการติดตามตำแหน่งอย่างชัดแจ้ง การดำเนินการนี้จะส่งผล ในการอัปเดตโดยทันที การโทรถึง RidesharingVehicleReporter.disableLocationTracking() จะ ตั้งค่าสถานะยานพาหนะเป็น OFFLINE

โปรดทราบว่า setVehicleState จะส่งคืนทันที และการอัปเดตจะดำเนินการใน ชุดข้อความการอัปเดตตำแหน่ง คล้ายกับการจัดการข้อผิดพลาดในการอัปเดตสถานที่ ข้อผิดพลาด ระบบจะเผยแพร่การอัปเดตสถานะของพาหนะโดยใช้ตัวเลือกที่มีให้ StatusListener ที่ตั้งไว้ในDriverContext