หน้านี้จะอธิบายรายละเอียดฟีเจอร์ต่างๆ ของ Car App Library ที่คุณใช้ เพื่อใช้ฟังก์ชันการทำงานของแอปนำทางแบบเลี้ยวต่อเลี้ยวได้
ประกาศการรองรับการนำทางในไฟล์ Manifest
แอปการนำทางของคุณต้องประกาศandroidx.car.app.category.NAVIGATION
หมวดหมู่แอปในรถยนต์ในตัวกรอง Intent
ของ 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>
รองรับเจตนาในการนำทาง
รูปแบบ Intent ที่หลากหลายช่วยให้แอปนำทางทำงานร่วมกับแอปอื่นๆ ได้ เช่น แอปจุดที่น่าสนใจและผู้ช่วยเสียง
หากต้องการรองรับรูปแบบ Intent เหล่านี้ ให้ประกาศการรองรับโดยการเพิ่มตัวกรอง Intent ในไฟล์ Manifest ของแอปก่อน ตำแหน่งของตัวกรองความตั้งใจเหล่านี้จะขึ้นอยู่กับแพลตฟอร์ม ดังนี้
- Android Auto: ภายใน
<activity>องค์ประกอบไฟล์ Manifest สำหรับActivityที่ใช้จัดการ Intent เมื่อผู้ใช้ไม่ได้ใช้ Android Auto - Android Automotive OS: ภายในองค์ประกอบไฟล์ Manifest
<activity>สำหรับCarAppActivity
จากนั้นอ่านและจัดการ Intent ในทั้งแฮนเดิลเลอร์ onCreateScreen() และ
onNewIntent() ในการติดตั้งใช้งาน Session ของแอป
รูปแบบความตั้งใจที่จำเป็น
แอปต้องจัดการIntent การนำทางเพื่อให้เป็นไปตามข้อกำหนดด้านคุณภาพของ NF-6
รูปแบบความตั้งใจที่ไม่บังคับ
นอกจากนี้ คุณยังรองรับรูปแบบ Intent ต่อไปนี้เพื่อเพิ่มความสามารถในการทำงานร่วมกันของแอปได้อีกด้วย
เข้าถึงเทมเพลตการนำทาง
แอปการนำทางสามารถเข้าถึงเทมเพลตต่อไปนี้ ซึ่งจะแสดงพื้นผิวใน เบื้องหลังพร้อมแผนที่ และระหว่างการนำทางที่ใช้งานอยู่ จะแสดงเส้นทางแบบเลี้ยวต่อเลี้ยว
NavigationTemplate: เทมเพลตที่แสดงข้อความข้อมูลและเวลาเดินทางโดยประมาณ (ไม่บังคับ) ขณะนำทางMapWithContentTemplate: เทมเพลตที่อนุญาตให้แอปแสดงผลแผนที่แบบไทล์พร้อมเนื้อหาบางอย่าง (เช่น รายการ) โดยปกติแล้ว เนื้อหาจะแสดงเป็นการซ้อนทับบน ไทล์แผนที่ โดยที่แผนที่จะมองเห็นได้และพื้นที่ที่เสถียรจะปรับให้เข้ากับเนื้อหา
ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีออกแบบอินเทอร์เฟซผู้ใช้ของแอปนำทางโดยใช้เทมเพลตเหล่านี้ได้ที่แอปนำทาง
หากต้องการเข้าถึงเทมเพลตการนำทาง แอปของคุณต้องประกาศสิทธิ์
androidx.car.app.NAVIGATION_TEMPLATES ในไฟล์
AndroidManifest.xml ดังนี้
<manifest ...>
...
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
...
</manifest>
ต้องมีสิทธิ์เพิ่มเติมเพื่อวาดแผนที่
ย้ายข้อมูลไปยัง MapWithContentTemplate
ตั้งแต่ Car App API ระดับ 7 เป็นต้นไป เราจะเลิกใช้งาน
MapTemplate
PlaceListNavigationTemplate
และ RoutePreviewNavigationTemplate
ระบบจะยังคงรองรับเทมเพลตที่เลิกใช้งานแล้ว แต่เราขอแนะนำเป็นอย่างยิ่งให้ย้ายข้อมูลไปยัง MapWithContentTemplate
คุณสามารถใช้ฟังก์ชันการทำงานที่เทมเพลตเหล่านี้มีให้ได้
โดยใช้ MapWithContentTemplate ดูตัวอย่างได้จากข้อมูลโค้ดต่อไปนี้
MapTemplate
// MapTemplate (deprecated) val templateDeprecated = 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()
PlaceListNavigationTemplate
// PlaceListNavigationTemplate (deprecated) val templateDeprecated = 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()
RoutePreviewNavigationTemplate
// RoutePreviewNavigationTemplate (deprecated) val templateDeprecated = RoutePreviewNavigationTemplate.Builder() .setItemList( ItemList.Builder() .addItem( Row.Builder() .setTitle(title) .build() ) .build() ) .setHeader(header) .setNavigateAction( Action.Builder() .setTitle(actionTitle) .setOnClickListener { /* onClick */ } .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 { /* onClick */ } .build() ) .build() ) .build() ) .setHeader(header) .build() ) .setActionStrip(actionStrip) .setMapController( MapController.Builder() .setMapActionStrip(mapActionStrip) .build() ) .build()
สื่อสารข้อมูลเมตาการนำทาง
แอปนำทางต้องสื่อสารข้อมูลเมตาการนำทางเพิ่มเติมกับโฮสต์ โฮสต์ใช้ข้อมูลดังกล่าวเพื่อส่งข้อมูลไปยังเครื่องเล่นวิทยุของยานพาหนะและเพื่อป้องกันไม่ให้แอปพลิเคชันการนำทางขัดแย้งกันในทรัพยากรที่ใช้ร่วมกัน
ข้อมูลเมตาการนำทางมีให้ผ่าน
NavigationManager
บริการรถยนต์ที่เข้าถึงได้จาก
CarContext
val navigationManager = carContext.getCarService(NavigationManager::class.java)
เริ่ม สิ้นสุด และหยุดการนำทาง
โฮสต์ต้องทราบสถานะปัจจุบันของการนำทางเพื่อจัดการแอปนำทางหลายแอป การแจ้งเตือนการกำหนดเส้นทาง
และข้อมูลคลัสเตอร์ของยานพาหนะ เมื่อผู้ใช้เริ่มการนำทาง ให้เรียกใช้
NavigationManager.navigationStarted
ในทำนองเดียวกัน เมื่อการนำทางสิ้นสุดลง เช่น เมื่อผู้ใช้ไปถึงจุดหมายหรือผู้ใช้ยกเลิกการนำทาง ให้เรียกใช้ NavigationManager.navigationEnded
เรียกใช้ NavigationManager.navigationEnded
เมื่อผู้ใช้ไปยังส่วนต่างๆ เสร็จแล้วเท่านั้น เช่น หากต้องการคำนวณเส้นทางใหม่
กลางทริป ให้ใช้
Trip.Builder.setLoading(true)
แทน
ในบางครั้ง ผู้จัดจะต้องใช้แอปเพื่อหยุดการนำทางและการโทร
onStopNavigation ในออบเจ็กต์
NavigationManagerCallback
ที่แอปของคุณระบุผ่าน
NavigationManager.setNavigationManagerCallback
จากนั้นแอปต้องหยุดแสดงข้อมูลการเลี้ยวถัดไปในจอแสดงผลคลัสเตอร์
การแจ้งเตือนการนำทาง และการนำทางด้วยเสียง
อัปเดตข้อมูลการเดินทาง
ในระหว่างการนำทางที่ใช้งานอยู่ ให้โทร
NavigationManager.updateTrip
คลัสเตอร์และจอแสดงผลที่กระจกหน้ารถของยานพาหนะสามารถใช้ข้อมูลที่ระบุในการเรียกนี้ได้ ระบบจะไม่แสดงข้อมูลบางอย่างต่อผู้ใช้ ทั้งนี้ขึ้นอยู่กับรถยนต์ที่ขับ
เช่น Desktop Head Unit (DHU) จะแสดง Step ที่เพิ่มลงใน Trip แต่จะไม่แสดงข้อมูล Destination
การวาดภาพไปยังจอแสดงผลคลัสเตอร์
คุณอาจต้องทำมากกว่าการแสดงข้อมูลเมตาพื้นฐานบนจอแสดงผลของคลัสเตอร์ในยานพาหนะ เพื่อมอบประสบการณ์การใช้งานที่สมจริงที่สุด ตั้งแต่ Car App API ระดับ 6 เป็นต้นไป แอปนำทางจะมีตัวเลือกในการแสดงผล เนื้อหาของตนเองบนจอแสดงผลแผงหน้าปัดโดยตรง (ในรถที่รองรับ) โดยมีข้อจำกัดต่อไปนี้
- API การแสดงคลัสเตอร์ไม่รองรับการควบคุมอินพุต
- หลักเกณฑ์ด้านคุณภาพของแอปรถยนต์
NF-9: จอแผงหน้าปัดควรแสดงเฉพาะไทล์แผนที่ คุณเลือกแสดงเส้นทางการนำทางที่ใช้งานอยู่บนไทล์เหล่านี้ได้ - API การแสดงคลัสเตอร์รองรับเฉพาะการใช้
NavigationTemplate- จอแสดงผลคลัสเตอร์อาจไม่แสดง
NavigationTemplateองค์ประกอบ UI ทั้งหมดอย่างสม่ำเสมอ เช่น เส้นทางแบบเลี้ยวต่อเลี้ยว การ์ดเวลาถึงโดยประมาณ และการดำเนินการ ซึ่งแตกต่างจากจอแสดงผลหลัก ไทล์แผนที่เป็นองค์ประกอบ UI เดียวที่แสดงอย่างสม่ำเสมอ
- จอแสดงผลคลัสเตอร์อาจไม่แสดง
ประกาศการรองรับคลัสเตอร์
หากต้องการให้แอปพลิเคชันโฮสต์ทราบว่าแอปของคุณรองรับการแสดงผลบนจอแสดงผลคลัสเตอร์
คุณต้องเพิ่มองค์ประกอบ androidx.car.app.category.FEATURE_CLUSTER
<category> ลงใน CarAppService ของ <intent-filter> ดังที่แสดงใน
ข้อมูลโค้ดต่อไปนี้
<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>
การจัดการวงจรและสถานะ
ตั้งแต่ระดับ API 6 เป็นต้นไป โฟลว์วงจรของแอปในรถยนต์ จะยังคงเหมือนเดิม แต่ตอนนี้ CarAppService::onCreateSession จะใช้พารามิเตอร์ประเภท SessionInfo ซึ่งให้ข้อมูลเพิ่มเติมเกี่ยวกับ Session ที่สร้างขึ้น (ได้แก่ ประเภทการแสดงผลและชุดเทมเพลตที่รองรับ)
แอปมีตัวเลือกในการใช้Sessionคลาสเดียวกันเพื่อจัดการทั้งคลัสเตอร์และจอแสดงผลหลัก หรือสร้างSessionsเฉพาะจอแสดงผลเพื่อปรับแต่งลักษณะการทำงานในจอแสดงผลแต่ละจอ (ดังที่แสดงในข้อมูลโค้ดต่อไปนี้)
override fun onCreateSession(sessionInfo: SessionInfo): Session { return if (sessionInfo.displayType == SessionInfo.DISPLAY_TYPE_CLUSTER) { ClusterSession() } else { MainDisplaySession() } }
ไม่มีการรับประกันว่าเมื่อใดหรือหากมีการแสดงคลัสเตอร์ และ
คลัสเตอร์ Session อาจเป็น Session เดียว (เช่น
ผู้ใช้สลับจอแสดงผลหลักไปใช้แอปอื่นในขณะที่แอปของคุณ
กำลังนำทางอยู่) ข้อตกลง "มาตรฐาน" คือแอปจะควบคุมการแสดงคลัสเตอร์ได้หลังจากมีการเรียกใช้ NavigationManager::navigationStarted แล้วเท่านั้น อย่างไรก็ตาม แอปอาจได้รับการแสดงผลคลัสเตอร์
ในขณะที่ไม่มีการนำทางที่ใช้งานอยู่ หรืออาจไม่ได้รับการแสดงผลคลัสเตอร์เลย
แอปของคุณต้องจัดการสถานการณ์เหล่านี้ด้วยการแสดงผล
สถานะว่างของแผนที่
โฮสต์จะสร้างอินสแตนซ์ของ Binder และ CarContext แยกกันต่อ Session ซึ่งหมายความว่าเมื่อใช้วิธีการต่างๆ เช่น ScreenManager::push หรือ
Screen::invalidate จะมีเพียง Session ที่เรียกใช้เท่านั้นที่ได้รับผลกระทบ
แอปควรสร้างช่องทางการสื่อสารของตนเองระหว่างอินสแตนซ์เหล่านี้หากจำเป็นต้องมีการสื่อสารข้ามSession (เช่น โดยใช้การออกอากาศ, Singleton ที่แชร์ หรืออื่นๆ)
การสนับสนุนคลัสเตอร์ทดสอบ
คุณทดสอบการติดตั้งใช้งานได้ทั้งใน Android Auto และ Android Automotive OS สำหรับ Android Auto คุณสามารถทำได้โดยกำหนดค่าเครื่องเล่นวิทยุบนเดสก์ท็อปให้จำลอง จอแสดงผลคลัสเตอร์รอง สำหรับ Android Automotive OS อิมเมจระบบทั่วไปสำหรับ API ระดับ 30 ขึ้นไปจะจำลองการแสดงผลคลัสเตอร์
ปรับแต่ง TravelEstimate ด้วยข้อความหรือไอคอน
หากต้องการปรับแต่งเวลาเดินทางโดยประมาณด้วยข้อความ ไอคอน หรือทั้ง 2 อย่าง ให้ใช้เมธอด
TravelEstimate.Builder
ของคลาส
setTripIcon
หรือ
setTripText
NavigationTemplate
ใช้
TravelEstimate
เพื่อตั้งค่าข้อความและไอคอนข้างหรือแทนที่เวลาที่คาดว่าจะถึง เวลาที่เหลือ และระยะทางที่เหลือ (ไม่บังคับ)
ข้อมูลโค้ดต่อไปนี้ใช้ setTripIcon และ setTripText เพื่อปรับแต่ง
การประมาณเวลาเดินทาง
TravelEstimate.Builder( Distance.create(350.0, Distance.UNIT_METERS), arrivalTimeAtDestination ) .setTripIcon( CarIcon.Builder( IconCompat.createWithResource(carContext, R.drawable.ic_garage) ).build() ) .setTripText(CarText.create("Custom Text")) .build()
แสดงการแจ้งเตือนแบบเลี้ยวต่อเลี้ยว
ให้คำแนะนำการนำทางแบบเลี้ยวต่อเลี้ยว (TBT) โดยใช้การแจ้งเตือนการนำทางที่อัปเดตบ่อย หากต้องการให้ระบบถือว่าเป็นการแจ้งเตือนการนำทางในหน้าจอรถยนต์ ตัวสร้างการแจ้งเตือนต้องทำสิ่งต่อไปนี้
- ทำเครื่องหมายการแจ้งเตือนว่าต่อเนื่องด้วยเมธอด
NotificationCompat.Builder.setOngoing - ตั้งค่าหมวดหมู่ของการแจ้งเตือนเป็น
Notification.CATEGORY_NAVIGATION - ขยายการแจ้งเตือนด้วย
CarAppExtender
การแจ้งเตือนการนำทางจะแสดงในวิดเจ็ตแถบที่ด้านล่างของ
หน้าจอรถยนต์ หากตั้งค่าระดับความสำคัญของการแจ้งเตือนเป็น
IMPORTANCE_HIGH การแจ้งเตือนจะแสดงเป็นการแจ้งเตือนล่วงหน้า (HUN) ด้วย
หากไม่ได้ตั้งค่าความสำคัญด้วยเมธอด
CarAppExtender.Builder.setImportance
ระบบจะใช้
ความสำคัญของช่องการแจ้งเตือน
แอปสามารถตั้งค่า PendingIntent ใน
CarAppExtender ที่
ส่งไปยังแอปเมื่อผู้ใช้แตะ HUN หรือวิดเจ็ตแถบข้าง
หากมีการเรียกใช้
NotificationCompat.Builder.setOnlyAlertOnce
โดยมีค่าเป็น true การแจ้งเตือนที่มีความสำคัญสูงจะแจ้งเตือนเพียงครั้งเดียวใน HUN
ข้อมูลโค้ดต่อไปนี้แสดงวิธีสร้างการแจ้งเตือนการนำทาง
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) ), PendingIntent.FLAG_IMMUTABLE ) ) .setImportance(NotificationManagerCompat.IMPORTANCE_HIGH) .build() ) .build()
อัปเดตการแจ้งเตือน TBT เป็นประจำสำหรับการเปลี่ยนแปลงระยะทาง
ซึ่งจะอัปเดตวิดเจ็ตการเดินทางด้วยรถไฟ และแสดงการแจ้งเตือนเป็น HUN เท่านั้น
คุณควบคุมลักษณะการทำงานของ HUN ได้โดยตั้งค่าความสำคัญของการแจ้งเตือนด้วย
CarAppExtender.Builder.setImportance การตั้งค่าความสำคัญเป็น
IMPORTANCE_HIGH จะแสดง HUN การตั้งค่าเป็นค่าอื่นจะอัปเดตเฉพาะวิดเจ็ตแถบเท่านั้น
รีเฟรชเนื้อหา PlaceListNavigationTemplate
คุณอนุญาตให้คนขับรีเฟรชเนื้อหาได้ด้วยการแตะปุ่มขณะเรียกดูรายการสถานที่ที่สร้างด้วย PlaceListNavigationTemplate
หากต้องการเปิดใช้การรีเฟรชรายการ ให้ใช้เมธอด
OnContentRefreshListener
ของอินเทอร์เฟซ
onContentRefreshRequested
และใช้
PlaceListNavigationTemplate.Builder.setOnContentRefreshListener
เพื่อตั้งค่า Listener ในเทมเพลต
ข้อมูลโค้ดต่อไปนี้แสดงวิธีตั้งค่า Listener ในเทมเพลต
PlaceListNavigationTemplate.Builder() .setOnContentRefreshListener { // Execute any desired logic // Then call invalidate() so onGetTemplate() is called again screen.invalidate() } .build()
ปุ่มรีเฟรชจะแสดงในส่วนหัวของ PlaceListNavigationTemplate ก็ต่อเมื่อผู้ฟังมีค่า
เมื่อผู้ใช้คลิกปุ่มรีเฟรช ระบบจะเรียกใช้เมธอด onContentRefreshRequested ของการติดตั้งใช้งาน OnContentRefreshListener ภายใน
onContentRefreshRequested ให้เรียกใช้เมธอด
Screen.invalidate
จากนั้นโฮสต์จะเรียกกลับไปยังเมธอด Screen.onGetTemplate ของแอปเพื่อดึงเทมเพลตที่มีเนื้อหาที่รีเฟรชแล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับการรีเฟรชเทมเพลตได้ที่
รีเฟรชเนื้อหาของเทมเพลต
ตราบใดที่เทมเพลตถัดไป
ที่ onGetTemplate ส่งคืนเป็นประเภทเดียวกัน
ระบบจะนับเป็นการรีเฟรชและจะไม่นับรวมใน
โควต้าเทมเพลต
ให้คำแนะนำด้วยเสียง
หากต้องการเล่นคำแนะนำการนำทางผ่านลำโพงรถยนต์ แอปของคุณต้องขอโฟกัสเสียง ในส่วนของ
AudioFocusRequest ให้ตั้งค่า
การใช้งานเป็น AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE นอกจากนี้
ให้ตั้งค่าการเพิ่มโฟกัสเป็น AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
จำลองการนำทาง
หากต้องการยืนยันฟังก์ชันการนำทางของแอปเมื่อส่งไปยัง
Google Play Store แอปของคุณต้องใช้
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 แอปการนำทางเริ่มต้นในรถยนต์จะสอดคล้องกับแอปการนำทางล่าสุดที่ผู้ใช้เปิด แอปเริ่มต้นจะรับ Intent การนำทางเมื่อผู้ใช้ เรียกใช้คำสั่งการนำทางผ่าน Assistant หรือเมื่อแอปอื่นส่ง Intent เพื่อเริ่มการนำทาง
แสดงการแจ้งเตือนการนำทางในบริบท
Alert จะแสดงข้อมูลสำคัญต่อผู้ขับขี่พร้อมการดำเนินการที่ไม่บังคับ โดยไม่ต้องออกจากบริบทของหน้าจอการนำทาง เพื่อให้คนขับได้รับประสบการณ์ที่ดีที่สุด
Alert จะทำงานภายใน
NavigationTemplate
เพื่อหลีกเลี่ยงการบล็อกเส้นทางการนำทางและลดการรบกวนสมาธิของคนขับ
Alert มีให้บริการเฉพาะในNavigationTemplate
หากต้องการแจ้งเตือนผู้ใช้ภายนอก NavigationTemplate ให้พิจารณาใช้การแจ้งเตือนล่วงหน้าตามที่อธิบายไว้ในแสดงการแจ้งเตือน
เช่น ใช้ Alert เพื่อทำสิ่งต่อไปนี้
- แจ้งข้อมูลอัปเดตที่เกี่ยวข้องกับการนำทางปัจจุบันให้คนขับทราบ เช่น การเปลี่ยนแปลงสภาพการจราจร
- สอบถามคนขับเพื่อขอข้อมูลอัปเดตที่เกี่ยวข้องกับการนำทางปัจจุบัน เช่น การมีด่านตรวจจับความเร็ว
- เสนอภารกิจที่กำลังจะมาถึงและถามว่าคนขับยอมรับหรือไม่ เช่น ถามว่าคนขับยินดีรับผู้โดยสารระหว่างทางหรือไม่
ในรูปแบบพื้นฐาน Alertประกอบด้วยชื่อและAlert
ระยะเวลา ระยะเวลาจะแสดงด้วยแถบความคืบหน้า นอกจากนี้ คุณยังเพิ่มคำบรรยายแทนเสียง ไอคอน และออบเจ็กต์ Action ได้สูงสุด 2 รายการ
เมื่อAlertแสดงแล้ว จะไม่ส่งต่อไปยังเทมเพลตอื่นหากการโต้ตอบของคนขับส่งผลให้NavigationTemplateออกไป
โดยจะยังคงอยู่ใน NavigationTemplate เดิมจนกว่าจะAlert หมดเวลา ผู้ใช้
ดำเนินการ หรือแอปปิด Alert
สร้างการแจ้งเตือน
ใช้ Alert.Builder
เพื่อสร้างอินสแตนซ์ Alert
Alert.Builder( 1, // alertId CarText.create("Hello"), // title 5000 // durationMillis ) // The fields below are optional .addAction(firstAction) .addAction(secondAction) .setSubtitle(CarText.create("Subtitle")) .setIcon(CarIcon.APP_ICON) .setCallback(alertCallback) .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 ของแอป
carContext.getCarService(AppManager::class.java).showAlert(alert)
- การเรียก
showAlertด้วยAlertที่มีalertIdซึ่งเหมือนกับรหัสของAlertที่แสดงอยู่แล้วจะไม่มีผลใดๆAlertไม่มีการอัปเดต หากต้องการอัปเดตAlertคุณต้องสร้างAlertใหม่ด้วยalertIdใหม่ - การเรียกใช้
showAlertด้วยAlertที่มีalertIdแตกต่างจากAlertที่แสดงอยู่แล้วจะปิดการแจ้งเตือนAlertที่แสดง
ปิดการแจ้งเตือน
แม้ว่า Alert จะปิดโดยอัตโนมัติ
เนื่องจากหมดเวลาหรือมีการโต้ตอบจากคนขับ แต่คุณก็ปิด Alert ด้วยตนเองได้
เช่น ในกรณีที่ข้อมูลของ Alert ล้าสมัย หากต้องการปิดAlert ให้เรียกใช้เมธอด
dismissAlert
ด้วย
alertId
ของ Alert
carContext.getCarService(AppManager::class.java).dismissAlert(alert.id)
การเรียกใช้ dismissAlert ด้วย alertId ที่ไม่ตรงกับ Alert ที่แสดงอยู่แล้วจะไม่ทําให้เกิดการเปลี่ยนแปลงใดๆ
แต่จะไม่ส่งข้อยกเว้น