आप अपने यात्रा और ऑर्डर की स्थिति वाले ऐप्लिकेशन में बेहतर नेविगेशन और ट्रैकिंग उपलब्ध कराने के लिए ड्राइवर SDK टूल का इस्तेमाल कर सकते हैं. ड्राइवर SDK टूल, वाहन की जगह की जानकारी और ऑन-डिमांड राइड और डिलीवरी सलूशन फ़्लीट इंजन के टास्क अपडेट देता है.
ड्राइवर SDK टूल, Fleet Engine सेवाओं और आपकी कस्टम सेवाओं को, वाहन की जगह और स्थिति के बारे में जानकारी देता है. उदाहरण के लिए, वाहन ONLINE
या OFFLINE
हो सकता है और यात्रा के साथ-साथ वाहन की जगह बदल जाती है.
सिस्टम के लिए ज़रूरी शर्तें
मोबाइल डिवाइस पर Android 6.0 (एपीआई लेवल 23) या उसके बाद का वर्शन होना ज़रूरी है.
बिल्ड और डिपेंडेंसी कॉन्फ़िगरेशन
ड्राइवर SDK टूल के 4.99 और उसके बाद के वर्शन, Google Maven रिपॉज़िटरी से उपलब्ध होते हैं.
ग्रेडल
अपनी build.gradle
फ़ाइल में ये चीज़ें जोड़ें:
repositories {
...
google()
}
Maven
अपनी pom.xml
फ़ाइल में ये चीज़ें जोड़ें:
<project>
...
<repositories>
<repository>
<id>google-maven-repository</id>
<url>https://maven.google.com</url>
</repository>
</repositories>
...
</project>
प्रोजेक्ट कॉन्फ़िगरेशन
ड्राइवर SDK टूल का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को
minSdkVersion
23 या उसके बाद के वर्शन को टारगेट करना होगा.
ड्राइवर SDK टूल की मदद से बनाए गए किसी ऐप्लिकेशन को चलाने के लिए, Android डिवाइस पर Google Play services इंस्टॉल होनी चाहिए.
अपना डेवलपमेंट प्रोजेक्ट सेट अप करें
अपना डेवलपमेंट प्रोजेक्ट सेट अप करने और Google Cloud Console पर प्रोजेक्ट के लिए एपीआई पासकोड पाने के लिए:
एक नया Google Cloud Console प्रोजेक्ट बनाएं या ड्राइवर SDK टूल के साथ इस्तेमाल करने के लिए, कोई मौजूदा प्रोजेक्ट चुनें. Google Cloud Console पर नया प्रोजेक्ट दिखने तक, थोड़ा इंतज़ार करें.
डेमो ऐप्लिकेशन चलाने के लिए, आपके प्रोजेक्ट के पास Android के लिए Maps SDK का ऐक्सेस होना चाहिए. Google Cloud Console में, एपीआई और सेवाएं > लाइब्रेरी चुनें. इसके बाद, Android के लिए Maps SDK टूल खोजें और उसे चालू करें.
एपीआई और सेवाएं > क्रेडेंशियल > क्रेडेंशियल बनाएं > एपीआई पासकोड चुनकर, प्रोजेक्ट के लिए एपीआई पासकोड पाएं. एपीआई पासकोड पाने के बारे में ज़्यादा जानने के लिए, एपीआई पासकोड पाना देखें.
अपने ऐप्लिकेशन में ड्राइवर SDK टूल जोड़ें
ड्राइवर SDK टूल, Google Maven रिपॉज़िटरी से उपलब्ध है. डेटा स्टोर करने की जगह में, SDK टूल का प्रोजेक्ट ऑब्जेक्ट मॉडल (.pom) फ़ाइलें और Javadocs शामिल होते हैं. अपने ऐप्लिकेशन में ड्राइवर SDK जोड़ने के लिए:
अपने Gradle या Maven कॉन्फ़िगरेशन में यह डिपेंडेंसी जोड़ें. इससे ड्राइवर SDK टूल के अपनी पसंद के वर्शन की जगह,
VERSION_NUMBER
प्लेसहोल्डर दिखेगा.ग्रेडल
अपने
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>
ड्राइवर SDK टूल, नेविगेशन SDK पर निर्भर करता है. यह डिपेंडेंसी इस तरह कॉन्फ़िगर किया जाता है कि अगर नेविगेशन SDK के किसी खास वर्शन की ज़रूरत हो, तो उसे बिल्ड कॉन्फ़िगरेशन फ़ाइल में नीचे बताए गए तरीके से साफ़ तौर पर दिखाया जाना चाहिए. बताए गए कोड ब्लॉक को हटाने से प्रोजेक्ट, नेविगेशन SDK का सबसे नया वर्शन हमेशा डाउनलोड कर पाएगा. ध्यान दें कि ड्राइवर SDK टूल के नए वर्शन और नेविगेशन SDK टूल के रिलीज़ होने से पहले, उनकी कड़ी जांच की गई है.
अपने डेवलपमेंट का डिपेंडेंसी कॉन्फ़िगरेशन व्यवस्थित करें और उसके मुताबिक एनवायरमेंट रिलीज़ करें.
ग्रेडल
अपने
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>
अपने ऐप्लिकेशन में एपीआई पासकोड जोड़ना
अपने ऐप्लिकेशन में ड्राइवर SDK टूल जोड़ने के बाद, अपने ऐप्लिकेशन में एपीआई पासकोड जोड़ें. आपको अपना डेवलपमेंट प्रोजेक्ट सेट अप करते समय मिली प्रोजेक्ट एपीआई कुंजी का इस्तेमाल करना होगा.
इस सेक्शन में, एपीआई पासकोड को सेव करने का तरीका बताया गया है, ताकि आपका ऐप्लिकेशन इसे ज़्यादा सुरक्षित तरीके से इस्तेमाल कर सके. आपको वर्शन कंट्रोल सिस्टम में एपीआई पासकोड की जांच नहीं करनी चाहिए. इसे local.properties
फ़ाइल में सेव करना चाहिए, जो आपके प्रोजेक्ट की रूट डायरेक्ट्री में मौजूद है. local.properties
फ़ाइल के बारे में ज़्यादा जानकारी के लिए, gradle प्रॉपर्टी फ़ाइलें देखें.
इस टास्क को आसान बनाने के लिए, Android के लिए सीक्रेट ग्रेडल प्लगिन का इस्तेमाल किया जा सकता है.
प्लगिन इंस्टॉल करने और अपनी एपीआई कुंजी सेव करने के लिए:
अपनी रूट-लेवल की
build.gradle
फ़ाइल खोलें औरbuildscript
में मौजूदdependencies
एलिमेंट में ये कोड जोड़ें.ग्रूवी
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") } }
ऐप्लिकेशन-लेवल की अपनी
build.gradle
फ़ाइल खोलें औरplugins
एलिमेंट में यह कोड जोड़ें.ग्रूवी
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
Kotlin
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
अगर आप Android Studio का इस्तेमाल करते हैं, तो अपने प्रोजेक्ट को Gradle के साथ सिंक करें.
अपने प्रोजेक्ट लेवल की डायरेक्ट्री में
local.properties
खोलें और इसके बाद, नीचे दिया गया कोड जोड़ें.YOUR_API_KEY
को अपनी एपीआई पासकोड से बदलें.MAPS_API_KEY=YOUR_API_KEY
अपनी
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 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>
अपने ऐप्लिकेशन में ज़रूरी एट्रिब्यूशन शामिल करें
अगर आपके ऐप्लिकेशन में ड्राइवर SDK टूल का इस्तेमाल किया जाता है, तो आपको अपने ऐप्लिकेशन के कानूनी नोटिस वाले सेक्शन में, एट्रिब्यूशन टेक्स्ट और ओपन सोर्स लाइसेंस शामिल करने होंगे. एट्रिब्यूशन को एक स्वतंत्र मेन्यू आइटम या इसके बारे में जानकारी मेन्यू आइटम के हिस्से के रूप में शामिल करना सबसे अच्छा होता है.
लाइसेंस की जानकारी, संग्रह से निकाली गई AAR फ़ाइल में मौजूद " third_party_लाइसेंस.txt" फ़ाइल में देखी जा सकती है.
ओपन सोर्स सूचनाओं को शामिल करने का तरीका जानने के लिए, https://developers.google.com/android/guides/opensource पर जाएं.
डिपेंडेंसी
अगर अपने बिल्ड को ऑप्टिमाइज़ करने के लिए ProGuard का इस्तेमाल किया जाता है, तो आपको अपनी ProGuard कॉन्फ़िगरेशन फ़ाइल में ये लाइनें जोड़नी पड़ सकती हैं:
-dontwarn com.google.**
-dontwarn okio.**
कम से कम 23 एपीआई लेवल काम करते हों.
SDK टूल शुरू किया जा रहा है
DriverContext
ऑब्जेक्ट को शुरू करने के लिए, सेवा देने वाली कंपनी का आईडी (आम तौर पर, Google Cloud प्रोजेक्ट का आईडी) ज़रूरी है. Google Cloud प्रोजेक्ट को सेट अप करने के बारे में ज़्यादा जानकारी के लिए, पुष्टि करना और अनुमति देना देखें.
ड्राइवर SDK टूल इस्तेमाल करने से पहले, आपको नेविगेशन SDK शुरू करना होगा. SDK टूल शुरू करने के लिए:
NavigationApi
सेNavigator
ऑब्जेक्ट पाएं.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 } }, )
ज़रूरी फ़ील्ड भरकर,
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()
*DriverApi
को शुरू करने के लिए,DriverContext
ऑब्जेक्ट का इस्तेमाल करें.Java
RidesharingDriverApi ridesharingDriverApi = RidesharingDriverApi.createInstance(driverContext);
Kotlin
val ridesharingDriverApi = RidesharingDriverApi.createInstance(driverContext)
एपीआई ऑब्जेक्ट से
RidesharingVehicleReporter
पाएं. (*VehicleReporter
मेंNavigationVehicleReporter
भी शामिल होता है.)Java
RidesharingVehicleReporter vehicleReporter = ridesharingDriverApi.getRidesharingVehicleReporter();
Kotlin
val vehicleReporter = ridesharingDriverApi.getRidesharingVehicleReporter()
AuthTokenFactory
से पुष्टि की जा रही है
जब ड्राइवर SDK जगह की जानकारी के अपडेट जनरेट करता है, तब
उसे इन अपडेट को Fleet Engine सर्वर पर भेजना होता है. इन अनुरोधों की पुष्टि करने के लिए,
Driver SDK टूल, कॉलर से मिले AuthTokenFactory
के इंस्टेंस पर कॉल करेगा.
जगह की जानकारी अपडेट करने के समय पर, पुष्टि करने वाले टोकन जनरेट करने की ज़िम्मेदारी फ़ैक्ट्री होती है.
टोकन जनरेट होने का तरीका, हर डेवलपर के हिसाब से तय होगा. हालांकि, लागू करने के लिए शायद इनकी ज़रूरत होगी:
- पुष्टि करने वाला टोकन फ़ेच करें. यह कोड एचटीटीपीएस सर्वर से, JSON फ़ॉर्मैट में हो सकता है
- टोकन को पार्स और कैश मेमोरी में सेव करना
- टोकन की समयसीमा खत्म होने पर उसे रीफ़्रेश करें
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 एचटीटीपी क्लाइंट का इस्तेमाल किया जाता है, ताकि डेवलपर के ऑथेंटिकेशन सर्वर से JSON फ़ॉर्मैट में टोकन फ़ेच किया जा सके. फिर से इस्तेमाल करने के लिए, टोकन को सेव कर लिया जाता है. अगर पुराना टोकन, समयसीमा खत्म होने की तारीख से 10 मिनट के अंदर है, तो टोकन को फिर से फ़ेच किया जाता है.
आपकी लागू की गई प्रोसेस के काम करने का तरीका अलग हो सकता है, जैसे कि टोकन को रीफ़्रेश करने के लिए बैकग्राउंड थ्रेड का इस्तेमाल करना.
AuthTokenFactory
में अपवादों को तब तक अस्थायी माना जाएगा, जब तक कि ऐसा बार-बार न हो. कई बार कोशिश करने के बाद, ड्राइवर SDK
यह मान लेगा कि गड़बड़ी हमेशा के लिए है और वह अपडेट भेजने की कोशिश करना बंद कर देगा.
StatusListener
की मदद से, स्टेटस और गड़बड़ी की रिपोर्ट की जा रही है
ड्राइवर 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 के बारे में नोट
अंदरूनी तौर पर, ड्राइवर SDK टूल लागू करने के लिए SSL/TLS का इस्तेमाल
Fleet Engine सर्वर से सुरक्षित तरीके से करने के लिए किया जाता है. Android के पुराने वर्शन (एपीआई वर्शन 19 या इससे पहले के वर्शन) को सर्वर से कनेक्ट करने के लिए, SecurityProvider
पैच की ज़रूरत हो सकती है. 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
को कॉल करके ऑफ़लाइन मार्क किया जा सकता है.
इस कॉल से, एक फ़ाइनल अपडेट की डिलीवरी तुरंत शेड्यूल हो जाएगी. इससे पता चलेगा कि गाड़ी ऑफ़लाइन है. इस अपडेट में उपयोगकर्ता की जगह की जानकारी शामिल नहीं होगी.
वाहन की स्थिति सेट करना
जगह की जानकारी अपडेट करने की सुविधा चालू होने पर, वाहन की स्थिति को ONLINE
पर सेट करने से वाहन, SearchVehicles
क्वेरी के लिए उपलब्ध हो जाएगा. इसी तरह, वाहन को OFFLINE
के तौर पर मार्क करने पर, वाहन उपलब्ध नहीं है के तौर पर मार्क कर दिया जाएगा.
आपके पास सर्वर साइड पर वाहन की स्थिति सेट करने का विकल्प होता है (वाहन अपडेट करें देखें) या सीधे ड्राइवर 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
तुरंत लौटता है और अपडेट, जगह की जानकारी अपडेट करने वाले थ्रेड पर किए जाते हैं. जगह की जानकारी के अपडेट से जुड़ी गड़बड़ी ठीक करने की तरह ही, वाहन की स्थिति अपडेट करने में होने वाली गड़बड़ियों को DriverContext
में मौजूद StatusListener
सेट का इस्तेमाल करके बढ़ाया जाता है. हालांकि, ऐसा करना ज़रूरी नहीं है.