汽車用戶體驗限制

在繼續之前,請先查看駕駛分心指南

本頁介紹汽車使用者體驗 (UX) 限制規則,您可以使用它來建立多個 UX 限制規則配置(例如,歐盟與日本),然後確定在運行時套用哪一組規則。有關更多信息,請參閱CarUxRestrictions

Car UX Restrictions 服務可讓開發人員定義新的 Car UX Restrictions 配置。如果開發者想要修改限制規則(例如遵守當地的安全標準),開發者可以使用API​​來定義新的配置。

用於設定配置的 API 僅保留在新配置中。也就是說,配置不會立即生效。相反,當 UX 限制服務重新啟動汽車處於停車狀態時,會載入新配置。汽車服務確保汽車在重新加載新配置之前處於停車狀態。

除了新的 UX Restrictions 服務方法之外,還提供 API 來建立配置。檔位選擇和速度狀態轉換為三種駕駛狀態之一:

  • 停車。公園裡的齒輪。
  • 空轉。齒輪不在駐車檔且速度為零。
  • 移動。齒輪不在駐車檔且速度不為零。

若要了解應用程式如何使用汽車的駕駛狀態以及相應的 UX 限制,請參閱使用汽車駕駛狀態和 UX 限制

基於驅動器狀態的限製配置

為了防止駕駛分心,Android 將駕駛狀態對應到一組 UX 限制/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • 停車。不受限制。
  • 空轉。沒有視頻,也沒有配置螢幕。
  • 移動。完全限制(所有限制都是必需的)。

上面所示的對應是預先決定的並配置為 XML 資源。這/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java然後將規則儲存在記憶體中。然後,該服務將當前駕駛狀態對應到 UX 限制,並將目前限制廣播到整個系統。

<!-- No restrictions when car is parked -->
<DrivingState car:state="parked">
    <Restrictions car:requiresDistractionOptimization="false"
                  car:uxr="baseline"/>
</DrivingState>

<!-- Restrictions when car is idling -->
<DrivingState car:state="idling">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="no_video|no_config"/>
</DrivingState>

<!-- Restrictions for speed >= 0 m/s -->
<DrivingState car:state="moving" car:minSpeed="0.0">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="fully_restricted"/>
</DrivingState>

多個顯示器的配置

預設情況下,對其他顯示器沒有任何限制。若要為多個顯示器建立限製配置,請在該顯示器的實體連接埠中包含RestrictionMapping標記。適當的限制會自動套用於每個顯示。在以下範例中,實體連接埠 ID 1 和 2 的顯示器具有不同的配置:

<RestrictionMapping car:physicalPort="1">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/>
       </DrivingState>
   </RestrictionMapping>

   <RestrictionMapping car:physicalPort="2">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
       </DrivingState>
  </RestrictionMapping>

限制模式配置

您可以為模式選擇任何名稱,例如teen 。在以下範例中,為預設模式和乘客模式配置了不同的限制(之前僅支援乘客模式):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
您可以使用 API 為模式設定任何字串名稱。例如,CarUxRestrictionsManager 中的setRestrictionMode(@NonNull String mode)方法。 (以前,您可以在 CarUxRestrictionsManager 中使用setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)方法)。

CarUxRestrictionsConfiguration API

CarUxRestrictionsConfiguration 的限制

新類別CarUxRestrictionsConfiguration按 1:1 對應到目前 XML 配置架構。 CarUxRestrictionsConfiguration可以使用CarUxRestrictions. Builder ,它在 build() 時驗證配置。

new CarUxRestrictionsConfiguration.Builder()
        // Explicitly set restrictions for each driving state.
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED,
                /* requiresOptimization= */ false,
                /* restrictions= */ UX_RESTRICTIONS_BASELINE)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING,
                true,
                UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING,
                true,
                UX_RESTRICTIONS_FULLY_RESTRICTED)
        // Set restriction parameters.
        .setMaxStringLength(int max)
        .setMaxCumulativeContentItems(int max)
        .setMaxContentDepth(int max)
        // Build a new CarUxRestrictionsConfiguration.
        .build();

CarUxRestrictionsManager API

使用CarUxRestrictionsManager設定下一個磁碟機的CarUxRestrictionsConfiguration 。此方法需要權限Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

保留新的 UX 限製配置

當傳入新配置時,UX Restrictions 服務會傳回一個布林值來指示新配置是否已成功儲存。這種新配置僅在整合主機 (IHU) 重新啟動且汽車停車時使用。在內部,UX 限制服務包含兩組配置:

  • 生產。雖然是可選的,但這種配置經常存在。 UX 限制服務在啟動時讀取此配置。
  • 上演了。同樣可選的是,此配置對 UX 限制沒有影響,並且在汽車服務啟動和汽車停車時升級為生產。

生產配置

圖 1.生產配置

解決故障

在從 CarPropertyManager 收到駕駛狀態資訊之前(例如,在啟動期間),不會強制執行 UX 限制。系統的運作就像駕駛狀態為「停車」一樣。

如果讀取已儲存的組態失敗(例如,SettingNotFoundException 結果),UX 限制服務將回退到硬編碼的完全限制模式:

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

駕駛狀態和使用者限制

以下內容描述了以下設計圖中顯示的交互作用:

驅動狀態交互

圖 2.駕駛狀態交互

用於導出駕駛狀態的屬性

使用以下三個VehiclePropertyIds來匯出駕駛狀態:

應用程式可用的 API

程式碼位於以下位置:

程式碼地點
CarUxRestrictionsManager
用於註冊 UX 限制更改的公共 API。
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
使用者體驗限制定義。
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
用於註冊驅動狀態變更的系統 API。
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

若要模擬駕駛狀態,請參閱測試