車輛使用者體驗限制

繼續下一步之前,請先詳閱駕駛人分心等級指南

本頁將說明建立車輛時可使用的車輛使用者體驗 (UX) 限制規則 多項使用者體驗限制規則設定 (例如歐盟與日本地區),然後 決定要在執行期間套用哪一組規則。若需更多資訊,請參閲 CarUxRestrictions

車輛使用者體驗限制服務可讓開發人員定義新的車輛使用者體驗限制 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定如果開發人員想修改限制規則 (例如遵循當地法規), 安全標準),開發人員可使用 API 定義新設定。

設定設定的 API 只會保留在新設定中。也就是 設定不會立即生效。新的設定 UX 限制服務重新啟動「並且」車輛位於公園時載入,汽車維修服務 確認車輛已位在公園,再重新載入新設定。

除了新的使用者體驗限制服務方法,還提供 API 可建構 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定設備選擇與速度的狀態會轉換為下列三種駕駛狀態的其中一種:

  • 已停車。穿在公園裡的服飾,
  • 閒置。齒輪不在公園內,且速度為零。
  • 移動齒輪不在公園內,且速度不是零。

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

根據雲端硬碟狀態的限制設定

為避免駕駛人分心,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 然後將規則儲存在記憶體中接著,服務會將目前的駕駛狀態對應至使用者體驗限制 並將目前的限製播送到整個系統。

<!-- 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) 方法。 (在過去,您應該使用 有 setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) 種方法 CarUxRestrictionsManager)。

CarUxRestrictionsConfiguration API

CarUxRestrictionsConfiguration 的限制

新類別 CarUxRestrictionsConfiguration 會 1:1 對應至目前的 XML 設定結構定義CarUxRestrictionsConfiguration 可透過 CarUxRestrictions.Builder 建構,驗證設定 建立命名空間

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 Constraint 服務會傳回布林值來表示 指出新設定是否已成功儲存這項新設定僅適用於 整合車用運算主機 (IHU) 重新啟動,且車輛已停妥。內部使用者體驗限制 服務包含兩組設定:

  • 正式版。這項設定通常為選用項目,使用者體驗 限制服務會在啟動時讀取這項設定。
  • 測試完成。選用,這項設定不會影響使用者體驗限制 並在車輛發動及停車時升級為正式版。

發布版本設定

圖 1. 發布版本設定

地址失效

直到 CarPropertyManager 收到行車狀態資訊為止 (例如, 啟動),因此不會強制執行使用者體驗限制。系統會假設行車狀態是 已停放。

讀取已儲存的設定時 (例如 ConfigurationNotFoundException 結果) 失敗時, 使用者體驗限制服務已改回採用硬式編碼的完全限制模式:

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

行車狀態和使用者限制

下圖說明下方設計圖表中顯示的互動:

駕駛狀態互動

圖 2. 駕駛狀態互動

用來導出行車狀態的屬性

使用以下三個 VehiclePropertyIds 導出行車狀態:

應用程式可用的 API

程式碼位於以下位置:

程式碼 位置
CarUxRestrictionsManager
用於註冊使用者體驗限制變更的公用 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

如要模擬行車狀態,請參閱: 測試