自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release
而非 aosp-main
建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
資源設定
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
每個支援的屬性都會透過 VehiclePropConfig
結構定義的屬性設定指定,並具有下列欄位。
欄位 |
說明 |
---|
prop |
房源 ID。這必須是 VehicleProperty.aidl 中定義的系統屬性之一,或供應商屬性。系統會使用下列欄位的位元或運算來建構資源 ID (從右至左):
- (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 |
Boolean 屬性會使用 車輛屬性值中 int32Values 欄位的第一個元素。0 代表 false ,None 0 代表 true 。 |
INT32 |
0x00400000 |
Integer 屬性會使用 車輛屬性值中 int32Values 欄位的首個元素。 |
INT32_VEC |
0x00410000 |
Integer[] 屬性會使用車輛屬性值中的 int32Values 欄位元素。 |
INT64 |
0x00500000 |
Long 屬性,會使用 Vehicle 屬性值中 int64Values 欄位的第一個元素。 |
INT64_VEC |
0x00510000 |
Long[] 屬性會使用車輛屬性值中的 int64Values 欄位元素。 |
FLOAT |
0x00600000 |
Float 屬性會使用 車輛屬性值中 floatValues 欄位的首個元素。 |
FLOAT_VEC |
0x00610000 |
Float[] 屬性會使用車輛屬性值中的 floatValues 欄位元素。 |
BYTES |
0x00700000 |
byte[] 屬性會使用車輛屬性值中的 byteValues 欄位元素。 |
MIXED |
0x00e00000 |
混合型屬性。純量或向量類型的任意組合。請務必在屬性設定中的 config 陣列中提供確切的格式。 對於供應商 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 ,則顯示此屬性是否指定最小或最大支援值或支援的值清單。
- 這個欄位會控制是否支援下列動態支援值 API:
getMinMaxSupportedValue 、getSupportedValuesLists 、subscribeSupportedValueChange 、unsubscribeSupportedValueChange ,以及是否支援此房源 ID 和區域 ID。
- 如果不是
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。Area ID 包含一或多個相應列舉的標記。舉例來說,使用 VehicleAreaSeat
的資源可能會使用下列區域 ID:
產品 |
說明 |
---|
ROW_1_LEFT | ROW_1_RIGHT |
區域 ID 適用於兩個前座。 |
ROW_2_LEFT |
僅適用於後座左側座椅。 |
ROW_2_RIGHT |
僅適用於後座右側座椅。 |
詳情請參閱「空調」一文。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-06-12 (世界標準時間)。
[[["容易理解","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-06-12 (世界標準時間)。"],[],[]]