หน้านี้จะอธิบายว่าแอปเปลี่ยนแอปให้เสียสมาธิได้อย่างไร ของอินเทอร์เฟซผู้ใช้ (DO) ที่มีการเพิ่มประสิทธิภาพ ซึ่งอธิบายวิธีการใช้สถานะการขับรถ รวมถึง ที่เกี่ยวข้องกับประสบการณ์ของผู้ใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อจํากัดด้านประสบการณ์ของผู้ใช้รถยนต์ (UX) ได้ที่ ข้อจำกัดเกี่ยวกับประสบการณ์ของผู้ใช้รถยนต์ ซึ่งให้รายละเอียด 3 สถานะการขับรถ ได้แก่ จอดรถ ไม่มีการใช้งาน และเคลื่อนที่
ผู้ชม
เนื้อหานี้มีไว้สำหรับผู้ที่ต้องการออกแบบแอปที่สามารถปรับให้เข้ากับการเปลี่ยนแปลงใน สถานะการขับขี่ของรถและข้อจำกัด UX ที่กำหนดไว้ที่เกี่ยวข้อง
รายละเอียดทางเทคนิค
เครื่องมือจัดการสถานะการขับรถ
สถานะการขับขี่ของรถ (จอด ไม่มีการใช้งาน หรือเคลื่อนที่) มาจากค่าเซ็นเซอร์ที่ระบุโดย Abstraction Layer (VHAL) ของยานพาหนะ ข้อมูลเซ็นเซอร์พื้นฐาน เช่น ความเร็วของรถ และ การเลือกเกียร์ปัจจุบัน จะใช้เพื่อหาสถานะการขับขี่ปัจจุบันของรถ
CarDrivingStateEvent
ซึ่งจะมี @SystemApis ซึ่งหมายความว่าจะมีเฉพาะ Platform Internals, APK แบบแพ็กเกจ (เช่น SysUI หรือ
การตั้งค่า) และ APK ที่ได้รับสิทธิ์ (เช่น) GMSCore จะเข้าถึง API ได้ API ได้รับการปกป้องโดย
สิทธิ์เฉพาะสำหรับสถานะการขับรถ android.car.permission.CAR_DRIVING_STATE
ลูกค้า
ที่ต้องการเข้าถึงข้อมูลสถานะการขับรถต้องขอสิทธิ์นี้
เครื่องมือจัดการข้อจำกัด CarUx
แอปที่แสดงอินเทอร์เฟซผู้ใช้ตามสถานะการขับรถจะต้องฟัง
CarUxRestrictionsManager
,
ซึ่งสรุปการแมปจากสถานะขับเคลื่อนเป็นข้อจำกัด UX แอปจะได้ไม่ต้อง
ปรับให้เข้ากับข้อกำหนดด้านความปลอดภัยของตลาดนั้นๆ
หมายเหตุ: กิจกรรมเหล่านี้ต้องทำเครื่องหมายเป็น เพิ่มประสิทธิภาพสิ่งรบกวนสมาธิ ตามที่อธิบายไว้ ในคำแนะนำเกี่ยวกับการรบกวนผู้ขับขี่ หากไม่มีการทำเครื่องหมายกิจกรรมไว้ ระบบจะบล็อกกิจกรรมนั้น
แต่แอปจะตรวจสอบข้อจำกัดที่ CarUxRestrictionsManager พบและไม่ใช่ สถานะการขับขี่สัมบูรณ์ที่ CarDriveStateManager เปิดเผยสำหรับทุกอย่างที่เกี่ยวข้องกับผู้ใช้ หรือประสบการณ์ของผู้ใช้
ตัวอย่างโค้ด
โค้ดตัวอย่างต่อไปนี้แสดงวิธีที่แอปตรวจสอบข้อจำกัด UX
- นำเข้าแพ็กเกจรถห้องสมุด โดยทำดังนี้
import android.car.Car; /* For CarUxRestrictions */ import android.car.drivingstate.CarUxRestrictions; import android.car.drivingstate.CarUxRestrictionsManager;
- นำ
CarUxRestrictionManager.OnUxRestrictionsChangedListener
ไปใช้ (mUxRChangeListener
) Listener นี้เมื่อลงทะเบียนกับ ระบบจะเรียกใช้ CarUxRestrictionsManager เมื่อมีการเปลี่ยนแปลงข้อจำกัดของ UX เกิดขึ้น จัดการการเปลี่ยนแปลงการจำกัดเพื่อปรับสิ่งรบกวนให้เหมาะสมตามความจำเป็น ดังนี้@Nullable private CarUxRestrictionsManager mCarUxRestrictionsManager; private CarUxRestrictions mCurrentUxRestrictions; /* Implement the onUxRestrictionsChangedListener interface */ private CarUxRestrictionsManager.OnUxRestrictionsChangedListener mUxrChangeListener = new CarUxRestrictionsManager.OnUxRestrictionsChangedListener() { @Override public void onUxRestrictionsChanged(CarUxRestrictions carUxRestrictions) { mCurrentUxRestrictions = carUxRestrictions; /* Handle the new restrictions */ handleUxRestrictionsChanged(carUxRestrictions); } };
- เรียกใช้ API ของรถยนต์เพื่อสร้างอินสแตนซ์รถยนต์ชื่อ mCar และเชื่อมต่อกับบริการรถยนต์ โดยทำดังนี้
mCar = Car.createCar(context); if (mCar == null) { // handle car connection error }
- โทรหา
mCar.getCarManager() - mCarUxRestrictionsManager
เพื่อรับCarUxRestrictionsManager
:CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager) mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
- หากต้องการลงทะเบียน
mUxRChangeListener
ที่นำไปใช้ในขั้นตอนที่ 2 ด้านบนกับCarUxRestrictionsManager
โทรหาmCarUxRestrictionsManager.registerListener()
:mCarUxRestrictionsManager.registerListener(mUxrChangeListener); mUxrChangeListener.onUxRestrictionsChanged( mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
บล็อกโค้ดตัวอย่างที่สมบูรณ์ (สร้างในขั้นตอนที่ 3 ถึงขั้นตอนที่ 5) ส่งผลให้ Listener ได้รับ การรับการเปลี่ยนแปลงการจำกัดเมื่อสถานะของไดรฟ์เปลี่ยนแปลง:
mCar = Car.createCar(context); if (mCar == null) { // handle car connection error } CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager) mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE); mCarUxRestrictionsManager.registerListener(mUxrChangeListener); mUxrChangeListener.onUxRestrictionsChanged( mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
ข้อจำกัด CarUx
ออบเจ็กต์ CarUxRestrictions มีข้อมูล 2 ประเภทดังนี้
- ปัจจุบันมีข้อกำหนดให้เพิ่มประสิทธิภาพสิ่งรบกวนหรือไม่
- หากใช่ ปัจจุบันมีข้อจำกัดใดบ้าง
เมื่อได้รับ CarUxRestrictions จาก
getCurrentUxRestrictions()
หรือ Callback ของผู้ฟัง ตอนนี้แอปใช้งานได้แล้ว
isRequiresDistractionOptimization()
API เพื่อให้ทราบว่าการรบกวนสมาธิหรือไม่
เพิ่มประสิทธิภาพ
ต้องระบุ หากแสดงผล false
ก็ไม่จําเป็นต้องเป็นการรบกวน
ได้รับการเพิ่มประสิทธิภาพและแอปจะสามารถดำเนินกิจกรรมใดๆ ได้อย่างปลอดภัย
หากต้องมีการเพิ่มประสิทธิภาพ ให้ใช้ getActiveRestrictions() API เพื่อให้ได้ชุดข้อจำกัดที่นำมาใช้ ช่วงเวลานี้
API จะแสดงผล int ซึ่งเป็นมาสก์เล็กน้อยของข้อจำกัดทั้งหมดที่มีผลอยู่ในขณะนี้
ชุดของข้อจำกัดที่แจ้งไว้ในขณะนี้อยู่ภายใต้ CarUxRestrictions
หมายเหตุ: คาดว่าจะมีการเปลี่ยนแปลงชุดข้อจำกัดเล็กน้อย จะเกิดขึ้นในอนาคตอันใกล้
ตัวอย่างเช่น หากแอปต้องการพิจารณาว่ามีข้อจำกัดในการเล่นวิดีโอหรือไม่ การรับออบเจ็กต์ CarUxRestrictions แอปต้องตรวจสอบข้อจำกัดด้วย
int activeUxR = mCurrentCarUxRestrictions.getActiveRestrictions(); if ((activeUxR & CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO) != 0) { handleStopPlayingVideo(); }
สถานะการขับรถ
CarDriveStateManager แสดงสถานะการขับขี่ตามจริงของรถ (จอดอยู่ ไม่มีการใช้งาน หรือ กำลังย้าย) สามารถเรียก API ของ Carการควบคุม StateManager ได้ในลักษณะเดียวกับ CarUxRestrictionsManager แอปสามารถลงทะเบียนผู้ฟังหรือดูสถานะการขับรถปัจจุบันได้ ระบบจะแสดงผลสถานะการขับรถ เป็น CarRunningStateEvent
CarDrivingStateEvent
การเปลี่ยนแปลง เมธอด onDrivingStateChanged()
จะถูกเรียกใช้ด้วยฟังก์ชัน
CarDrivingStateEvent
import android.car.Car; /* For CarDrivingState */ import android.car.drivingstate.CarDrivingStateEvent; import android.car.drivingstate.CarDrivingStateManager; mDrivingStateManager = (CarDrivingStateManager) mCar.getCarManager( Car.CAR_DRIVING_STATE_SERVICE); /* Register the listener (implemented below) */ mDrivingStateManager.registerListener(mDrivingStateEventListener); /* While we wait for a change to be notified, query the current state */ mDrivingStateEvent = mDrivingStateManager.getCurrentCarDrivingState(); private final CarDrivingStateManager.CarDrivingStateEventListener mDrivingStateEventListener = new CarDrivingStateManager.CarDrivingStateEventListener() { @Override public void onDrivingStateChanged(CarDrivingStateEvent event) { mDrivingStateEvent = event; /* handle the state change accordingly */ handleDrivingStateChange(); } };
การทดสอบ
คุณสามารถเลียนแบบการเปลี่ยนเกียร์และความเร็วเพื่อเปลี่ยนสถานะการขับขี่ ใช้เชลล์ ADB เพื่อแทรกเหตุการณ์ในยานพาหนะ วิธีนี้อาจเป็นการพัฒนาและการทดสอบที่มีประโยชน์
วิธีจำลองเหตุการณ์การขับรถ
- วิธีตั้งความเร็วเป็น 0
adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 0
- วิธีตั้งค่าเกียร์เป็น "จอดรถ" (เพื่อจำลอง Car driveStateEvent ให้ชี้ไปที่ PARKED)
adb shell dumpsys activity service com.android.car inject-vhal-event 0x11400400 4
- ตั้งค่าเกียร์ไปที่ไดรฟ์โดยให้ความเร็วยังคงเป็น 0 (เพื่อจำลองการชี้ Car driveStateEvent
เป็น IDLING):
adb shell dumpsys activity service com.android.car inject-vhal-event 0x11400400 8
- หากต้องการตั้งค่าความเร็วเป็น 30 เมตรต่อวินาที (เพื่อจำลอง CarHourStateEvent ให้ชี้ไปที่ MOVING)
adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 30