車輛使用者體驗限制

繼續操作之前,請先參閱「駕駛時的注意事項指南」。

本頁面說明汽車使用者體驗 (UX) 限制規則,可用於建立多個 UX 限制規則設定 (例如歐盟和日本),然後決定在執行階段套用哪一組規則。詳情請參閱 CarUxRestrictions

開發人員可透過 Car UX Restrictions 服務,定義新的 Car UX Restrictions 設定。如果開發人員想要修改限制規則 (例如為了遵守當地安全標準),可以使用 API 定義新的設定。

設定設定的 API 只會保留在新設定中。換句話說,設定「不會」立即生效。相反地,系統會在 UX 限制服務重新啟動車輛處於停車狀態時,載入新設定。車輛服務會在重新載入新設定前,確認車輛處於停車狀態。

除了新的 UX 限制服務方法,我們也提供 API 來建構設定。變速箱選用和速度狀態會轉換為下列三種駕駛狀態之一:

  • 已存放。公園中的裝備。
  • 空轉。變速箱未處於 P 檔,且車速為零。
  • 移動。變速箱未處於 P 檔,且車速不為零。

如要瞭解應用程式如何使用車輛的行駛狀態和相應的使用者體驗限制,請參閱「使用車輛行駛狀態和使用者體驗限制」。

根據行駛狀態限制設定

為避免駕駛人分心,Android 會將行車狀態對應至一組使用者體驗限制 /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>

多螢幕設定

根據預設,系統不會對其他螢幕套用任何限制。如要為多個螢幕建立限制設定,請在該螢幕的 physicalPort 中加入 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 限制服務會傳回布林值,指出新設定是否已成功儲存。這項新設定只會在整合式車用運算主機 (IHU) 重新啟動且車輛已停妥時使用。在內部,使用者體驗限制服務包含兩組設定:

  • 正式版。雖然這不是必要的設定,但通常會出現。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

如要模擬行車狀態,請參閱「測試」。