自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release
而非 aosp-main
建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
資源設定
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
每個支援的屬性都是由透過 VehiclePropConfig
結構定義的屬性設定指定,並具有下列欄位。
欄位 |
說明 |
---|
prop |
這是物業 ID,這必須是 VehicleProperty.aidl 中定義的其中一個系統屬性,或是供應商屬性。資源 ID 是透過下列欄位的位元 OR 運算建構而成 (從右到左):
- (0x00000000) 16 位元:範圍介於 0x0100 至 0xffff 的專屬 ID。
- (0x00000000) 8 位元:屬性類型,用於定義屬性的類型。
- (0x00000000) 4 位元:區域類型。
- (0x00000000) 4 位元:
VehiclePropertyGroup 這是 SYSTEM (0x10000000) 或 VENDOR (0x20000000)。如要瞭解可自訂的屬性,請參閱「供應商屬性」。
例如:
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)
|
access |
- 資源的存取模式。必須是
READ 、WRITE 或 READ_WRITE 。
- 如果是系統屬性,這必須是
VehicleProperty.aidl 中記錄的其中一種已定義存取模式。
- 如果屬性具有每個區域的存取權,這就是每個區域存取權的最大子集。舉例來說,如果屬性有兩個區域,存取權分別為
READ 和 READ_WRITE ,則應將此屬性設為 READ 。
|
changeMode |
- 變更屬性的模式。必須是
STATIC 、ON_CHANGE 或 CONTINUOUS 。STATIC 表示系統啟動後,屬性值不會再變更。ON_CHANGE 表示 VHAL 必須在值變更時回報。CONTINUOUS 表示屬性值會持續變更,且 VHAL 必須根據訂閱取樣率回報。
- 如果是系統屬性,這個值必須等於
VehicleProperty.aidl 中記錄的變更模式。
|
configArray |
選用陣列,可包含特定屬性的設定。可以留空。對於某些系統屬性 (例如 GEAR_SELECTION ),設定陣列具有特殊意義,且必須指定。
|
configString |
(選用) 包含資源專屬設定的字串。可以留空。 |
minSampleRate 和 maxSampleRate |
連續屬性支援的最小和最大取樣率 (以赫茲為單位)。如果房源並非連續出租,則不適用。VHAL 實作項目必須能夠達成 minSampleRate 和 maxSampleRate 。不一定要支援介於最小值和最大值之間的所有取樣率。 |
物業類型
在 VehiclePropertyType.aidl
中定義為列舉。下表列出支援的屬性類型。
資源類型 |
值 |
說明 |
---|
STRING |
0x00100000 |
字串屬性,使用「車輛屬性值」中的 stringValue 欄位。 |
BOOLEAN |
0x00200000 |
屬性,並使用「車輛屬性值」中「int32Values 」欄位的第一個元素。Boolean 0 代表 false ,None 0 代表 true 。 |
INT32 |
0x00400000 |
屬性,並使用「車輛屬性值」中「int32Values 」欄位的第一個元素。Integer |
INT32_VEC |
0x00410000 |
Integer[] 屬性,並使用「車輛屬性值」中的 int32Values 欄位元素。 |
INT64 |
0x00500000 |
長屬性,使用「車輛屬性值」中 int64Values 欄位的第一個元素。 |
INT64_VEC |
0x00510000 |
Long[] 屬性,並使用「車輛屬性值」中的 int64Values 欄位元素。 |
FLOAT |
0x00600000 |
屬性,並使用「車輛屬性值」中「floatValues 」欄位的第一個元素。Float |
FLOAT_VEC |
0x00610000 |
Float[] 屬性,並使用「車輛屬性值」中的 floatValues 欄位元素。 |
BYTES |
0x00700000 |
byte[] 屬性,並使用「車輛屬性值」中的 byteValues 欄位元素。 |
MIXED |
0x00e00000 |
混合類型屬性。純量或向量類型的任意組合。確切格式必須在屬性設定的設定陣列中提供。 如果是供應商 MIXED 類型屬性,configArray 的格式必須符合以下結構:
configArray[0] ,1 表示屬性具有 String 值
configArray[1] ,1 表示屬性具有 Boolean 值
configArray[2] ,1 表示屬性具有 Integer 值
configArray[3] ,這個數字表示屬性中 Integer[] 的大小
configArray[4] ,1 表示屬性具有 Long 值
configArray[5] ,這個數字表示屬性中 Long[] 的大小
configArray[6] ,1 表示屬性具有 Float 值
configArray[7] ,這個數字表示屬性中 Float[] 的大小
configArray[8] ,這個數字表示屬性中 byte[] 的大小。
舉例來說,configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} 表示屬性具有 String 值、Boolean 值、Integer 值,以及包含三個整數的陣列。
|
設定區域 ID
每個屬性設定也可能包含區域 ID 設定清單。全球資源可選擇是否提供這份清單,但區域資源 (支援多個區域的資源) 則必須提供。每個區域 ID 設定都有下列欄位。
欄位 |
說明 |
---|
areaId |
這個區域的 ID。請參閱「區域 ID」一文。 |
minInt32Value 和 maxInt32Value |
- 開機時 INT32 型別屬性的選填最小值和最大值。其他所有類型必須為 0
。如果兩者皆為 0,則會遭到忽略。
- 如果是全域屬性,如需定義最小值和最大值,請使用區域 ID 為 0 的區域設定。
- 這個值是靜態的,即使最小值或最大值在執行階段有所變更,這個值也不會變動。導入
IVehicle#getMinMaxSupportedValue ,設定動態最小值或最大值。
|
minInt64Value 和 maxInt64Value |
- 開機時 INT64 型別屬性的選用最小值和最大值。其他所有類型必須為 0
。如果兩者皆為 0,則會遭到忽略。
- 如果是全域屬性,如需定義最小值和最大值,請使用區域 ID 為 0 的區域設定。
- 這個值是靜態的,即使最小值或最大值在執行階段有所變更,這個值也不會變動。導入
IVehicle#getMinMaxSupportedValue ,設定動態最小值或最大值。
|
minFloatValue 和 maxFloatValue |
- 啟動時,浮點數型別屬性的選用最小值和最大值。其他所有類型必須為 0
。如果兩者皆為 0.0,則會遭到忽略。
- 如果是全域屬性,如需定義最小值和最大值,請使用區域 ID 為 0 的區域設定。
- 這個值是靜態的,即使最小值或最大值在執行階段有所變更,這個值也不會變動。導入
IVehicle#getMinMaxSupportedValue ,設定動態最小值或最大值。
|
(Android 14 新功能)
supportedEnumValues |
- 如果屬性定義為列舉類型屬性,則為開機時支援的值清單 (選用)。如果未指定 (空白) 或在 Android 14 之前,系統會假設支援所有列舉值。
- 如果是全域屬性,如需定義支援的列舉值,則必須使用區域 ID 為 0 的區域設定。
- 這個值是靜態值,即使支援的值在執行階段有所變更,這個值也不會變動。導入
IVehicle#getSupportedValuesLists ,支援動態值。
- 這項功能僅適用於列舉類型屬性。如果是其他類型,這個欄位必須留空。
如要公開其他非列舉型別的支援值,請使用
IVehicle#getSupportedValuesLists 。
|
(Android 15 的新功能)
supportVariableUpdateRate |
- 是否支援可變更新率。這項功能僅適用於連續型屬性。
- 如果是
true ,應用程式可以為訂閱項目啟用變數更新率,只在屬性值變更時接收屬性更新事件 (也就是將連續屬性視為變更屬性)。
- 如果屬性的所有訂閱者都啟用變數更新率,則對 VHAL 的訂閱要求會為屬性啟用變數更新率,且 VHAL 必須只在屬性值變更時傳送屬性更新事件。
- 如有任何訂閱者要求固定更新率,對 VHAL 的訂閱要求會停用屬性的可變更新率,且 AAOS 會為要求可變更新率的用戶端篩除重複事件。
- 強烈建議支援所有非心跳連續屬性的變數更新率,以提升效能,除非屬性資料量很大 (例如大小為 1k 的位元組陣列),可能會佔用大量記憶體來快取。
|
(Android 16 的新功能)
hasSupportedValueInfo |
- 如果不是
null ,則會顯示這個屬性是否指定支援的最小值或最大值,或是支援的值清單。
- 這個欄位會控管這個資源 ID 和區域 ID 是否支援動態支援值 API:
getMinMaxSupportedValue 、getSupportedValuesLists 、
subscribeSupportedValueChange 、unsubscribeSupportedValueChange
- 如果不是
null ,VHAL 必須為這個資源 ID 和區域 ID 實作這些 API。
- 如果
null 或 Android 15 以下版本不支援這項屬性 ID 和區域 ID 的動態支援值,用戶端必須使用車輛屬性設定中提供的靜態支援值資訊。
|
區域類型
在 VehicleArea.aidl
中定義為列舉。支援的區域類型如下。
區域類型 |
值 |
說明 |
---|
全球 |
0x01000000 |
這項資源是全域資源,沒有多個區域。 |
WINDOW |
0x03000000 |
以視窗為準的區域,使用 VehicleAreaWindow 列舉。 |
《Mirror》 |
0x04000000 |
根據鏡像的區域,使用 VehicleAreaMirror 列舉。 |
SEAT |
0x05000000 |
根據座位區分的區域,使用 VehicleAreaSeat 列舉。 |
車門 |
0x06000000 |
根據門的區域,使用 VehicleAreaDoor 列舉。 |
WHEEL |
0x07000000 |
根據輪子計算面積,使用 VehicleAreaWheel 列舉。 |
每個劃分區域的房地產都必須使用預先定義的區域類型。每個區域類型都有一組位元旗標,這些旗標是在區域類型的列舉中定義。舉例來說,SEAT 區域會定義 VehicleAreaSeat
列舉:
ROW_1_LEFT = 0x0001
ROW_1_CENTER = 0x0002
ROW_1_RIGHT = 0x0004
ROW_2_LEFT = 0x0010
ROW_2_CENTER = 0x0020
ROW_2_RIGHT = 0x0040
ROW_3_LEFT = 0x0100
...
區域 ID
分區屬性是透過區域 ID 處理。每個劃分區域的資源可能支援一或多個區域 ID。區域 ID 由其各自列舉中的一或多個旗標組成。舉例來說,使用 VehicleAreaSeat
的屬性可能會使用下列區域 ID:
產品 |
說明 |
---|
ROW_1_LEFT | ROW_1_RIGHT |
區域 ID 適用於前座。 |
ROW_2_LEFT |
僅適用於左後座。 |
ROW_2_RIGHT |
僅適用於後座右側座位。 |
詳情請參閱「HVAC」。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-10-10 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-10-10 (世界標準時間)。"],[],[]]