इस पेज पर, कार ऐप्लिकेशन लाइब्रेरी की उन अलग-अलग सुविधाओं के बारे में बताया गया है जिनका इस्तेमाल किया जा सकता है आपके हर मोड़ पर चलने वाले नेविगेशन ऐप्लिकेशन की सुविधाओं को लागू करना.
अपनी मेनिफ़ेस्ट फ़ाइल में जाकर, नेविगेशन की सुविधा इस्तेमाल करने का एलान करें
नेविगेशन ऐप्लिकेशन को androidx.car.app.category.NAVIGATION
का एलान करना होगा
इंटेंट में कार ऐप्लिकेशन की कैटगरी
इसके CarAppService
का फ़िल्टर:
<application>
...
<service
...
android:name=".MyNavigationCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.NAVIGATION"/>
</intent-filter>
</service>
...
</application>
नेविगेशन इंटेंट का इस्तेमाल करें
अपने ऐप्लिकेशन के लिए नेविगेशन इंटेंट के साथ काम करने के लिए, जिसमें इनसे आने वाले इंटेंट भी शामिल हैं
Google Assistant को बोलकर निर्देश देने की सुविधा देता है, तो आपके ऐप्लिकेशन को
CarContext.ACTION_NAVIGATE
इंटेंट
Session.onCreateScreen
और
Session.onNewIntent
.
इसके बारे में दस्तावेज़ देखें
CarContext.startCarApp
देखें.
नेविगेशन टेंप्लेट ऐक्सेस करना
नेविगेशन ऐप्लिकेशन, नीचे दिए गए टेंप्लेट को ऐक्सेस कर सकते हैं. ये टेंप्लेट मैप के साथ बैकग्राउंड और चालू नेविगेशन के दौरान, मोड़-दर-मोड़ निर्देश.
NavigationTemplate
: ऐक्टिव नेविगेशन के दौरान, जानकारी देने वाला वैकल्पिक मैसेज और यात्रा के अनुमान दिखाता है.MapWithContentTemplate
: ऐसा टेम्प्लेट जो किसी ऐप्लिकेशन को किसी तरह की सामग्री वाली मैप टाइल को रेंडर करने की अनुमति देता है ( उदाहरण के लिए, सूची). कॉन्टेंट को आम तौर पर, पेज के सबसे ऊपर के ऊपर एक ओवरले के रूप में रेंडर किया जाता है जिसमें मैप की टाइलें दिख रही हों और स्थिर इलाके कॉन्टेंट के हिसाब से अडजस्ट हो जाएं.
नेविगेशन ऐप्लिकेशन का यूज़र इंटरफ़ेस डिज़ाइन करने के बारे में ज़्यादा जानकारी इन टेंप्लेट के लिए, नेविगेशन ऐप्लिकेशन देखें.
नेविगेशन टेंप्लेट का ऐक्सेस पाने के लिए, आपके ऐप्लिकेशन को यह एलान करना होगा
androidx.car.app.NAVIGATION_TEMPLATES
की अनुमति
AndroidManifest.xml
फ़ाइल:
<manifest ...>
...
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
...
</manifest>
मैप बनाने के लिए, अतिरिक्त अनुमति की ज़रूरत होती है.
MapWithContentTemplate पर माइग्रेट करें
कार ऐप्लिकेशन एपीआई लेवल 7 से शुरू करते हुए,
MapTemplate
PlaceListNavigationTemplate
,
और RoutePreviewNavigationTemplate
के इस्तेमाल पर रोक लगा दी गई है. रोके गए टेंप्लेट काम करते रहेंगे, लेकिन
हमारा सुझाव है कि आप MapWithContentTemplate
पर माइग्रेट करें.
इन टेंप्लेट से मिलने वाली सुविधाओं को लागू किया जा सकता है
MapWithContentTemplate
का इस्तेमाल करके. उदाहरणों के लिए यहां दिए गए स्निपेट देखें:
मैप टेंप्लेट
Kotlin
// MapTemplate (deprecated) val template = MapTemplate.Builder() .setPane(paneBuilder.build()) .setActionStrip(actionStrip) .setHeader(header) .setMapController(mapController) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( PaneTemplate.Builder(paneBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(mapController) .build()
Java
// MapTemplate (deprecated) MapTemplate template = new MapTemplate.Builder() .setPane(paneBuilder.build()) .setActionStrip(actionStrip) .setHeader(header) .setMapController(mapController) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new PaneTemplate.Builder(paneBuilder.build()) .setHeader(header) build()) .setActionStrip(actionStrip) .setMapController(mapController) .build();
जगह सूची नेविगेशन टेंप्लेट
Kotlin
// PlaceListNavigationTemplate (deprecated) val template = PlaceListNavigationTemplate.Builder() .setItemList(itemListBuilder.build()) .setHeader(header) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( ListTemplate.Builder() .setSingleList(itemListBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build()
Java
// PlaceListNavigationTemplate (deprecated) PlaceListNavigationTemplate template = new PlaceListNavigationTemplate.Builder() .setItemList(itemListBuilder.build()) .setHeader(header) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new ListTemplate.Builder() .setSingleList(itemListBuilder.build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(new MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build();
राऊटर के ब्यौरे का टेंप्लेट
Kotlin
// RoutePreviewNavigationTemplate (deprecated) val template = RoutePreviewNavigationTemplate.Builder() .setItemList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .build()) .build()) .setHeader(header) .setNavigateAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { ... } .build()) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build() // MapWithContentTemplate val template = MapWithContentTemplate.Builder() .setContentTemplate( ListTemplate.Builder() .setSingleList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .addAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { ... } .build()) .build()) .build()) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build()
Java
// RoutePreviewNavigationTemplate (deprecated) RoutePreviewNavigationTemplate template = new RoutePreviewNavigationTemplate.Builder() .setItemList(new ItemList.Builder() .addItem(new Row.Builder() .setTitle(title)) .build()) .build()) .setHeader(header) .setNavigateAction(new Action.Builder() .setTitle(actionTitle) .setOnClickListener(() -> { ... }) .build()) .setActionStrip(actionStrip) .setMapActionStrip(mapActionStrip) .build(); // MapWithContentTemplate MapWithContentTemplate template = new MapWithContentTemplate.Builder() .setContentTemplate(new ListTemplate.Builder() .setSingleList(new ItemList.Builder() .addItem(new Row.Builder() .setTitle(title)) .addAction(new Action.Builder() .setTitle(actionTitle) .setOnClickListener(() -> { ... }) .build()) .build()) .build())) .setHeader(header) .build()) .setActionStrip(actionStrip) .setMapController(new MapController.Builder() .setMapActionStrip(mapActionStrip) .build()) .build();
नेविगेशन मेटाडेटा के बारे में जानकारी देना
नेविगेशन ऐप्लिकेशन को एक से ज़्यादा नेविगेशन मेटाडेटा को होस्ट. होस्ट इस जानकारी का इस्तेमाल, वाहन की मुख्य यूनिट और नेविगेशन ऐप्लिकेशन को एक-दूसरे से टकराने से रोकने के लिए शेयर किए गए संसाधन.
नेविगेशन मेटाडेटा इसके ज़रिए दिया जाता है:
NavigationManager
कार सेवा यहां से ऐक्सेस की जा सकती है:
CarContext
:
Kotlin
val navigationManager = carContext.getCarService(NavigationManager::class.java)
Java
NavigationManager navigationManager = carContext.getCarService(NavigationManager.class);
नेविगेशन चालू, बंद, और बंद करें
होस्ट की ओर से एक से ज़्यादा नेविगेशन ऐप्लिकेशन मैनेज करने, सूचनाओं को रूट करने के लिए,
और व्हीकल क्लस्टर डेटा के लिए, इसे स्थिति की मौजूदा स्थिति की जानकारी होनी चाहिए
नेविगेशन. जब कोई उपयोगकर्ता नेविगेशन शुरू करता है, तो उसे कॉल करें
NavigationManager.navigationStarted
.
इसी तरह, नेविगेशन के खत्म होने पर—उदाहरण के लिए, जब उपयोगकर्ता अपने
डेस्टिनेशन या उपयोगकर्ता नेविगेशन रद्द कर देता है—कॉल
NavigationManager.navigationEnded
.
केवल NavigationManager.navigationEnded
को कॉल करें
जब उपयोगकर्ता नेविगेट करना खत्म कर लेता है. उदाहरण के लिए, अगर आपको इसकी फिर से गिनती करनी हो,
यात्रा के दौरान मार्ग में, इसका उपयोग करें
Trip.Builder.setLoading(true)
आज़माएं.
कभी-कभी, होस्ट को नेविगेशन और कॉल रोकने के लिए, ऐप्लिकेशन की ज़रूरत पड़ती है
onStopNavigation
NavigationManagerCallback
आपके ऐप्लिकेशन ने इसके ज़रिए ऑब्जेक्ट दिया
NavigationManager.setNavigationManagerCallback
.
इसके बाद, ऐप्लिकेशन को क्लस्टर डिसप्ले में अगली बारी की जानकारी देना बंद करना होगा,
और आवाज़ से रास्ता बताने की सुविधा इस्तेमाल करें.
यात्रा की जानकारी अपडेट करें
सक्रिय नेविगेशन के दौरान, कॉल करें
NavigationManager.updateTrip
.
इस कॉल में दी गई जानकारी का इस्तेमाल, वाहन के क्लस्टर और
हेड्स-अप डिसप्ले. जिस वाहन को चलाया जा रहा है उसके आधार पर, सभी नहीं
उपयोगकर्ता को यह जानकारी दिखाई जाती है.
उदाहरण के लिए, डेस्कटॉप हेड यूनिट (DHU)
Step
को
Trip
, लेकिन यह नहीं दिखता है
Destination
जानकारी.
क्लस्टर डिसप्ले की मदद से ड्रॉइंग करना
उपयोगकर्ताओं को सबसे अच्छा अनुभव देने के लिए, गाड़ी के क्लस्टर डिसप्ले पर बेसिक मेटाडेटा दिखा रहा है. कार ऐप्लिकेशन के एपीआई लेवल 6 में, नेविगेशन ऐप्लिकेशन में रेंडरिंग का विकल्प मौजूद है अपना कॉन्टेंट सीधे क्लस्टर डिसप्ले पर दिखा सकता है (सुविधा देने वाली गाड़ियों में), और निम्न सीमाएं:
- क्लस्टर डिसप्ले एपीआई, इनपुट कंट्रोल के साथ काम नहीं करता
- क्लस्टर डिसप्ले में सिर्फ़ मैप की टाइल दिखनी चाहिए. एक सक्रिय रास्ता नेविगेशन ये कर सकता है वैकल्पिक रूप से इन टाइल पर दिखाया जाएगा.
- क्लस्टर Display API सिर्फ़ इनके इस्तेमाल पर काम करता है:
NavigationTemplate
- ऐसा हो सकता है कि मुख्य डिसप्ले के उलट, क्लस्टर डिसप्ले में सभी डिसप्ले लगातार न दिखें
NavigationTemplate
यूज़र इंटरफ़ेस (यूआई) एलिमेंट, जैसे कि मोड़-दर-मोड़ निर्देश, ETA कार्ड और कार्रवाइयां. सिर्फ़ मैप टाइल ही लगातार दिखने वाले यूज़र इंटरफ़ेस (यूआई) हैं एलिमेंट.
- ऐसा हो सकता है कि मुख्य डिसप्ले के उलट, क्लस्टर डिसप्ले में सभी डिसप्ले लगातार न दिखें
क्लस्टर के लिए सहायता का एलान करें
होस्ट ऐप्लिकेशन को यह बताने के लिए कि आपके ऐप्लिकेशन में क्लस्टर पर रेंडरिंग की सुविधा काम करती है
दिखाता है, तो आपको किसी androidx.car.app.category.FEATURE_CLUSTER
को जोड़ना होगा
आपके CarAppService
के <intent-filter>
के लिए <category>
एलिमेंट, जैसा कि
स्निपेट:
<application> ... <service ... android:name=".MyNavigationCarAppService" android:exported="true"> <intent-filter> <action android:name="androidx.car.app.CarAppService" /> <category android:name="androidx.car.app.category.NAVIGATION"/> <category android:name="androidx.car.app.category.FEATURE_CLUSTER"/> </intent-filter> </service> ... </application>
लाइफ़साइकल ऐंड स्टेट मैनेजमेंट
एपीआई लेवल 6 में, कार ऐप्लिकेशन के लिए
लाइफ़साइकल फ़्लो
वही रहता है, लेकिन अब CarAppService::onCreateSession
SessionInfo
टाइप करें, जो
बनाए जा रहे Session
के बारे में अतिरिक्त जानकारी (जैसे, डिसप्ले
और उसका इस्तेमाल किया जा सकता है.
ऐप्लिकेशन के पास ये दोनों कार्रवाइयां करने के लिए, एक ही Session
क्लास का इस्तेमाल करने का विकल्प होता है
क्लस्टर और मेन डिसप्ले चुनें या पसंद के मुताबिक बनाने के लिए, डिसप्ले के हिसाब से खास Sessions
बनाएं
व्यवहार (जैसा कि नीचे दिए गए स्निपेट में दिखाया गया है).
Kotlin
override fun onCreateSession(sessionInfo: SessionInfo): Session { return if (sessionInfo.displayType == SessionInfo.DISPLAY_TYPE_CLUSTER) { ClusterSession() } else { MainDisplaySession() } }
Java
@Override @NonNull public Session onCreateSession(@NonNull SessionInfo sessionInfo) { if (sessionInfo.getDisplayType() == SessionInfo.DISPLAY_TYPE_CLUSTER) { return new ClusterSession(); } else { return new MainDisplaySession(); } }
इस बात की कोई गारंटी नहीं है कि क्लस्टर डिसप्ले कब दिया गया है और कब उपलब्ध कराया गया है.
यह भी हो सकता है कि क्लस्टर Session
सिर्फ़ Session
हो (इसके लिए
उदाहरण के लिए, जब आपका ऐप्लिकेशन
नेविगेट करने में मदद मिलती है). "मानक" कानूनी समझौता यह है कि ऐप्लिकेशन
सिर्फ़ NavigationManager::navigationStarted
के होने के बाद ही क्लस्टर डिसप्ले
कॉल किया गया. हालांकि, ऐप्लिकेशन में क्लस्टर का डिसप्ले उपलब्ध कराया जा सकता है
जब कोई नेविगेशन चालू न हो या क्लस्टर कभी न मिले
डिसप्ले. इन स्थितियों को मैनेज करने की ज़िम्मेदारी आपके ऐप्लिकेशन की होती है. इसके लिए, अपने ऐप्लिकेशन के
मैप टाइल की निष्क्रिय स्थिति.
होस्ट, हर Session
के लिए अलग बाइंडर और CarContext
इंस्टेंस बनाता है. यह
इसका मतलब है कि ScreenManager::push
या
Screen::invalidate
, सिर्फ़ वह Session
है जिससे इन्हें कॉल किया जाता है
प्रभावित. ऐप्लिकेशन को इन चीज़ों के बीच अपने खुद के संचार चैनल बनाने चाहिए
अगर क्रॉस-Session
कम्यूनिकेशन की ज़रूरत हो. उदाहरण के लिए,
ब्रॉडकास्ट, शेयर किया गया सिंगलटन या कुछ और
.
टेस्टिंग क्लस्टर की सहायता
Android Auto और Android Automotive OS, दोनों पर लागू किए गए कोड की जांच की जा सकती है. Android Auto के लिए, ऐसा करने के लिए डेस्कटॉप हेड यूनिट को एम्युलेट करने के लिए कॉन्फ़िगर किया जाता है सेकंडरी क्लस्टर डिसप्ले. इसके लिए Android Automotive OS, एपीआई के लिए सामान्य सिस्टम इमेज लेवल 30 और उसके बाद के लेवल, क्लस्टर डिसप्ले को एम्युलेट करें.
टेक्स्ट या आइकॉन की मदद से घूमने के अनुमान को पसंद के मुताबिक बनाएं
टेक्स्ट, आइकॉन या दोनों की मदद से, अपनी यात्रा का अनुमान लगाने के लिए,
TravelEstimate.Builder
क्लास का
setTripIcon
या
setTripText
तरीकों का इस्तेमाल करना होगा. कॉन्टेंट बनाने
NavigationTemplate
उपयोग
TravelEstimate
अनुमानित समय के साथ या उसके स्थान पर वैकल्पिक रूप से टेक्स्ट और आइकन सेट करने के लिए
पहुंचने का समय, बचा हुआ समय, और बची हुई दूरी.
![](https://developer.android.com/training/cars/images/eta-custom-IconText.png?authuser=19&hl=hi)
नीचे दिया गया स्निपेट, setTripIcon
और setTripText
का इस्तेमाल करके,
यात्रा का अनुमान:
Kotlin
TravelEstimate.Builder(Distance.create(...), DateTimeWithZone.create(...)) ... .setTripIcon(CarIcon.Builder(...).build()) .setTripText(CarText.create(...)) .build()
Java
new TravelEstimate.Builder(Distance.create(...), DateTimeWithZone.create(...)) ... .setTripIcon(CarIcon.Builder(...).build()) .setTripText(CarText.create(...)) .build();
मोड़-दर-मोड़ सूचनाएं पाएं
बार-बार मोड़-दर-मोड़ (टीबीटी) नेविगेशन के निर्देश दें नेविगेशन की सूचना अपडेट की गई है. नेविगेशन के तौर पर गिने जाने के लिए सूचना नहीं दिखाई है, तो आपके नोटिफ़िकेशन बिल्डर को फ़ॉलो किया जा रहा है:
- इसके साथ, सूचना को 'जारी है' के तौर पर मार्क करें
NotificationCompat.Builder.setOngoing
तरीका. - सूचना की कैटगरी को
Notification.CATEGORY_NAVIGATION
पर सेट करें. - सूचना के लिए,
CarAppExtender
.
सबसे नीचे रेल विजेट में नेविगेशन की सूचना दिखती है
कार की स्क्रीन दिखेगी. अगर सूचना की अहमियत का लेवल इस पर सेट किया गया हो
IMPORTANCE_HIGH
पर है, तो यह हेड-अप नोटिफ़िकेशन (HUN) के तौर पर भी दिखता है.
अगर अहमियत
CarAppExtender.Builder.setImportance
तरीका है, तो
सूचना चैनल की अहमियत
का इस्तेमाल किया जाता है.
ऐप्लिकेशन PendingIntent
को
CarAppExtender
उस
उपयोगकर्ता के HUN या रेल विजेट पर टैप करने पर, ऐप्लिकेशन में यह डेटा भेजा जाता है.
अगर आपने
NotificationCompat.Builder.setOnlyAlertOnce
को true
की वैल्यू के साथ कॉल किया जाता है. यह सिर्फ़ ज़्यादा अहमियत वाली सूचना की सूचना देता है
एक बार हन गए थे.
नीचे दिए गए स्निपेट में, नेविगेशन की सूचना बनाने का तरीका बताया गया है:
Kotlin
NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) ... .setOnlyAlertOnce(true) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_NAVIGATION) .extend( CarAppExtender.Builder() .setContentTitle(carScreenTitle) ... .setContentIntent( PendingIntent.getBroadcast( context, ACTION_OPEN_APP.hashCode(), Intent(ACTION_OPEN_APP).setComponent( ComponentName(context, MyNotificationReceiver::class.java)), 0)) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build()) .build()
Java
new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) ... .setOnlyAlertOnce(true) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_NAVIGATION) .extend( new CarAppExtender.Builder() .setContentTitle(carScreenTitle) ... .setContentIntent( PendingIntent.getBroadcast( context, ACTION_OPEN_APP.hashCode(), new Intent(ACTION_OPEN_APP).setComponent( new ComponentName(context, MyNotificationReceiver.class)), 0)) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build()) .build();
दूरी के लिए, TBT सूचना को नियमित रूप से अपडेट करें
बदलाव होते हैं, जो रेल विजेट को अपडेट करता है और सूचना को सिर्फ़ HUN के तौर पर दिखाता है.
इसकी मदद से, सूचना की अहमियत सेट करके HUN के व्यवहार को कंट्रोल किया जा सकता है
CarAppExtender.Builder.setImportance
. अहमियत को इस पर सेट करना
IMPORTANCE_HIGH
ने एक हुन दिखाया है. सेटिंग
इसे किसी दूसरी वैल्यू पर सेट करने से, सिर्फ़ रेल के विजेट को अपडेट किया जा सकता है.
जगह सूची नेविगेशन टेंप्लेट का कॉन्टेंट रीफ़्रेश करें
ड्राइवर को सिर्फ़ एक बटन पर टैप करके, कॉन्टेंट को रीफ़्रेश करने की सुविधा दी जा सकती है.
इसका इस्तेमाल करके बनाई गई जगहों की सूचियां
PlaceListNavigationTemplate
.
सूची रीफ़्रेश को सक्षम करने के लिए,
OnContentRefreshListener
इंटरफ़ेस का
onContentRefreshRequested
तरीका और इस्तेमाल
PlaceListNavigationTemplate.Builder.setOnContentRefreshListener
लिसनर को टेंप्लेट पर सेट करने के लिए.
नीचे दिए गए स्निपेट में, लिसनर को टेंप्लेट में सेट करने का तरीका बताया गया है:
Kotlin
PlaceListNavigationTemplate.Builder() ... .setOnContentRefreshListener { // Execute any desired logic ... // Then call invalidate() so onGetTemplate() is called again invalidate() } .build()
Java
new PlaceListNavigationTemplate.Builder() ... .setOnContentRefreshListener(() -> { // Execute any desired logic ... // Then call invalidate() so onGetTemplate() is called again invalidate(); }) .build();
रीफ़्रेश करें बटन सिर्फ़ हेडर में दिखता है
अगर लिसनर की कोई वैल्यू है, तो PlaceListNavigationTemplate
.
जब उपयोगकर्ता रीफ़्रेश बटन पर क्लिक करता है, तो
onContentRefreshRequested
तरीका
लागू करने की OnContentRefreshListener
प्रक्रिया को कॉल किया गया. इतने समय में
onContentRefreshRequested
,
Screen.invalidate
तरीका.
इसके बाद, होस्ट आपके ऐप्लिकेशन के
Screen.onGetTemplate
अपडेट की गई सामग्री के साथ टेम्प्लेट को वापस पाने का तरीका. यहां जाएं:
टेंप्लेट का कॉन्टेंट रीफ़्रेश करने के लिए
टेंप्लेट रीफ़्रेश करने के बारे में ज़्यादा जानकारी. अगले टेंप्लेट के लिए अनुमति दें
इन्होंने वापस किया
onGetTemplate
इसका है
ठीक उसी तरह होता है, इसे रीफ़्रेश के रूप में गिना जाता है और
टेंप्लेट कोटा.
आवाज़ से रास्ता बताने की सुविधा दें
कार के स्पीकर पर नेविगेशन के दिशा-निर्देश चलाने के लिए, आपके ऐप्लिकेशन को अनुरोध करना होगा
ऑडियो फ़ोकस. आपके कार्यक्रम के हिस्से के तौर पर
AudioFocusRequest
, सेट
AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
के तौर पर इस्तेमाल किया. साथ ही,
फ़ोकस गेन को AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
पर सेट करें.
नेविगेशन को सिम्युलेट करें
अपने ऐप्लिकेशन के नेविगेशन फ़ंक्शन को सबमिट करने पर, उसकी पुष्टि की जा सकेगी
तो आपके ऐप्लिकेशन को
NavigationManagerCallback.onAutoDriveEnabled
कॉलबैक. इस कॉलबैक को कॉल किए जाने पर, आपके ऐप्लिकेशन को
जब उपयोगकर्ता नेविगेशन शुरू करता है, तो चुने गए डेस्टिनेशन. आपका ऐप्लिकेशन इससे बाहर निकल सकता है
मौजूदा Session
की लाइफ़साइकल के दौरान मोड
तक पहुंच जाता है
Lifecycle.Event.ON_DESTROY
राज्य.
यह जांच की जा सकती है कि onAutoDriveEnabled
को लागू करने की वजह से
कमांड लाइन से नीचे दिया गया काम करें:
adb shell dumpsys activity service CAR_APP_SERVICE_NAME AUTO_DRIVE
यह नीचे दिए गए उदाहरण में दिखाया गया है:
adb shell dumpsys activity service androidx.car.app.samples.navigation.car.NavigationCarAppService AUTO_DRIVE
डिफ़ॉल्ट नेविगेशन कार ऐप्लिकेशन
Android Auto में, डिफ़ॉल्ट नेविगेशन कार ऐप्लिकेशन जिसे उपयोगकर्ता ने लॉन्च किया है. डिफ़ॉल्ट ऐप्लिकेशन नेविगेशन इंटेंट हासिल करता है, जब उपयोगकर्ता Assistant की मदद से, नेविगेशन के निर्देश भेजता है. इसके अलावा, जब कोई दूसरा ऐप्लिकेशन का इस्तेमाल, नेविगेशन शुरू करने के लिए किया जा सकता है.
संदर्भ के हिसाब से नेविगेशन की सूचनाएं दिखाएं
Alert
ज़रूरी जानकारी दिखाता है
ड्राइवर को किसी भी
तक स्क्रोल करें. ड्राइवर को बेहतरीन अनुभव देने के लिए,
Alert
इसके अंदर काम करता है:
NavigationTemplate
ताकि नेविगेशन रूट ब्लॉक न हो और ड्राइवर का ध्यान न भटके.
Alert
, सिर्फ़ NavigationTemplate
में उपलब्ध है.
NavigationTemplate
से बाहर के उपयोगकर्ता को सूचित करने के लिए,
तो, हेड-अप नोटिफ़िकेशन (HUN) का इस्तेमाल करें. इसके बारे में यहां बताया गया है
सूचनाएं दिखाएं.
उदाहरण के लिए, Alert
का इस्तेमाल इन कामों के लिए करें:
- मौजूदा नेविगेशन से जुड़े अपडेट के ड्राइवर को जानकारी दें, जैसे कि ट्रैफ़िक की स्थिति में बदलाव.
- ड्राइवर से वर्तमान नेविगेशन से संबंधित अपडेट के लिए कहें, जैसे स्पीड ट्रैप की मौजूदगी.
- आने वाले टास्क के लिए सुझाव दें और पूछें कि ड्राइवर इसे स्वीकार करेगा या नहीं. जैसे कि क्या ड्राइवर अपने रास्ते में किसी को लेने के लिए तैयार है.
Alert
में एक टाइटल और Alert
मौजूद होता है
अवधि की अवधि. समीक्षा की अवधि को प्रोग्रेस बार से दिखाया जाता है. या फिर,
आप एक सबटाइटल, एक आइकॉन, और ज़्यादा से ज़्यादा दो
Action
ऑब्जेक्ट.
![](https://developer.android.com/training/cars/images/CarAppLib-Alert.png?authuser=19&hl=hi)
Alert
को दिखाए जाने पर, वह किसी दूसरे टेंप्लेट पर नहीं ले जाता है, अगर
ड्राइवर इंटरैक्शन के नतीजे में NavigationTemplate
को छोड़ दिया जाता है.
यह मूल NavigationTemplate
में तब तक रहता है, जब तक उपयोगकर्ता खाते को Alert
बार इस्तेमाल नहीं कर लेता
कोई कार्रवाई करता है या ऐप्लिकेशन Alert
को खारिज कर देता है.
अलर्ट बनाएं
Alert.Builder
का इस्तेमाल करें
Alert
इंस्टेंस बनाने के लिए:
Kotlin
Alert.Builder( /*alertId*/ 1, /*title*/ CarText.create("Hello"), /*durationMillis*/ 5000 ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create(...)) .setIcon(CarIcon.APP_ICON) .setCallback(...) .build()
Java
new Alert.Builder( /*alertId*/ 1, /*title*/ CarText.create("Hello"), /*durationMillis*/ 5000 ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create(...)) .setIcon(CarIcon.APP_ICON) .setCallback(...) .build();
अगर आपको Alert
को सुनना है
रद्द या खारिज करने के लिए किया जाता है, तो
AlertCallback
इंटरफ़ेस.
AlertCallback
कॉल पाथ ये हैं:
अगर
Alert
का समय खत्म हो जाता है, तो होस्टAlertCallback.onCancel
तरीका हैAlertCallback.REASON_TIMEOUT
वैल्यू. इसके बाद, यहAlertCallback.onDismiss
तरीका.अगर ड्राइवर किसी ऐक्शन बटन पर क्लिक करता है, तो होस्ट को कॉल
Action.OnClickListener
और फिरAlertCallback.onDismiss
पर कॉल करता है.अगर
Alert
का इस्तेमाल नहीं किया जा सकता है, तो होस्ट को कॉलAlertCallback.onCancel
AlertCallback.REASON_NOT_SUPPORTED
वैल्यू. होस्ट ने कॉल नहीं कियाAlertCallback.onDismiss
क्योंकिAlert
को दिखाया नहीं गया था.
सूचना की अवधि कॉन्फ़िगर करें
ऐसी Alert
अवधि चुनें जो
आपके ऐप्लिकेशन की ज़रूरतों को पूरा करता हो. नेविगेशन के लिए सुझाया गया समय
Alert
की अवधि 10 सेकंड है. नेविगेशन सूचनाएं देखें
हमारा वीडियो देखें.
कोई सूचना दिखाएं
Alert
दिखाने के लिए,
AppManager.showAlert
आपके ऐप्लिकेशन के
CarContext
.
// Show an alert
carContext.getCarService(AppManager.class).showAlert(alert)
showAlert
को ऐसेAlert
के साथ कॉल किया जा रहा है जिसमेंalertId
जो अभी डिसप्ले में मौजूदAlert
के आईडी से मेल खाता है.Alert
अपडेट नहीं होता है.Alert
को अपडेट करने के लिए, आपको फिर से बनाना होगा नएalertId
के साथ.Alert
के साथshowAlert
को कॉल किया जा रहा है, जो डिसप्ले पर मौजूदAlert
की तुलना मेंalertId
इस प्रोसेस को खारिज करता है फ़िलहाल,Alert
दिख रहा है.
किसी सूचना को खारिज करना
जब Alert
अपने-आप खारिज हो जाए
के कारण, टाइम आउट या ड्राइवर इंटरैक्शन के कारण, आप
Alert
, जैसे कि अगर इसकी जानकारी पुरानी हो जाती है. किसी
Alert
,
dismissAlert
तरीका है
alertId
Alert
में से.
// Dismiss the same alert
carContext.getCarService(AppManager.class).dismissAlert(alert.getId())
alertId
के साथ dismissAlert
को कॉल किया जा रहा है, जो मौजूदा
दिखाया गया Alert
कुछ नहीं करता. इससे किसी भी तरह की छूट नहीं मिलती.