除了行車期間使用的應用程式外,Android Automotive OS 也支援建構可停車時使用的瀏覽器、遊戲和影片應用程式。您可以略微修改適用於大螢幕裝置的做法,即可為車輛提供同一款應用程式。
在 Android Automotive OS 模擬器上測試現有應用程式
如要開始建構適用於 Android Automotive OS 的應用程式,請先在 Android Automotive OS 模擬器測試現有應用程式。如要設定模擬器,請按照「使用 Android Automotive OS 模擬器進行測試」的步驟操作,然後依據「在模擬器上執行應用程式」說明,執行應用程式。
執行應用程式時請留意相容性問題,例如:
- 資訊娛樂系統的畫面為固定螢幕方向。為符合車用應用程式品質指南規定,應用程式必須同時支援直向和橫向螢幕方向。
- 其他裝置適用的 API 可能不適用於 Android Automotive OS。舉例來說,Android Automotive OS 並不支援某些 Google Play 服務 API。如要進一步瞭解如何處理這些問題,請參閱「停用功能」一節。
設定應用程式的資訊清單檔案
應用程式必須含有特定的資訊清單項目,才能將 Android Automotive OS 設為目標平台。如果您已經滿足這個條件,就能使用獨立的 Automotive OS 版本類型,將指定 Android Automotive OS 的應用程式提交至 Play 商店。這類應用程式會經過人工審查,確保在車上使用安全無虞。詳情請參閱「發布車用的 Android 應用程式」。
必要的 Android Automotive OS 功能
針對 Android Automotive OS 建構的應用程式必須在 AndroidManifest.xml
檔案中加入下列 <uses-feature>
元素,才能在車用 Play 商店上架:
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
</manifest>
如果應用程式提交至非車用測試群組,就無法宣告上述程式碼範例中顯示的 <uses-feature>
元素,因為這些應用程式無法以汽車專用硬體進行測試。因此,如要為車用和非車用裝置提供相同的應用程式,您需要至少產生兩個應用程式變種版本:一個用於車用裝置,另一個則用於行動裝置。如要進一步瞭解如何建立這些獨立的變種版本,請參閱下列說明文件:
應用程式的兩個變種版本可共用相同的套件名稱,但必須使用不同的版本代碼,因為這些變種版本會分別上傳到 Play 商店測試群組。
或者,行動裝置、車輛 APK 或應用程式套件都用不同套件名稱,不用個別變種版本也可以。如要瞭解各種做法的優缺點,請參閱媒體應用程式開發人員指南中的「套件名稱」一節。
除了上述程式碼範例中顯示的元素外,針對 Android Automotive OS 建構的應用程式也必須在根 <manifest>
元素中加入下列 <uses-feature>
元素:
<uses-feature
android:name="android.hardware.wifi"
android:required="false"/>
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false"/>
<uses-feature
android:name="android.hardware.screen.landscape"
android:required="false"/>
如果您將這些功能明確設為非必要功能,就能確保應用程式不會與 Android Automotive OS 裝置中可用的硬體功能衝突。
確認沒有分心因素已排除的活動
為確保您的應用程式只能在車輛停妥後使用,請勿在資訊清單的任何 <activity>
元素中加入下列 <meta-data>
元素:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
如果沒有這項中繼資料,OS 就會在車輛進入行車模式時自動封鎖應用程式活動,以免駕駛分心。這項操作會以 onPause
生命週期回呼的方式進行,期間您必須暫停播放應用程式中的影片和音訊。
特定類別的資訊清單項目
除了上述規定適用於所有停車的應用程式之外, 影片和遊戲類別有其他規定:
- 如果是影片應用程式,請參閱這篇文章,瞭解如何將應用程式標示為影片應用程式。
- 如果是遊戲,請參閱「將應用程式標示為遊戲」。
為 Android Automotive OS 最佳化應用程式
為盡可能提供最佳使用者體驗,建構 Android Automotive OS 應用程式時,請留意下列事項。
為大螢幕進行最佳化調整
Android Automotive OS 車輛配備的螢幕,在大小、解析度和顯示比例方面與平板電腦和摺疊式裝置更相似。因此,針對大螢幕最佳化應用程式,車輛使用者也能同時受益。
具體而言,請參閱「支援不同的螢幕大小」和「將 UI 改為回應式版面配置」指南,進一步瞭解如何充分運用大螢幕尺寸以及媒體庫和遊戲庫,獲得設計靈感和指引。
其他大螢幕最佳化功能 (例如輸入相容性) 並未直接嘉惠 Android Automotive OS 應用程式,但仍可改善使用者體驗。舉例來說,鍵盤導覽功能會使用和旋轉導覽功能相同的 API,因此只要在其中進行最佳化調整,這兩種板型規格都能同時受益。
使用視窗插邊和螢幕凹口
與其他板型規格一樣,Android Automotive OS 也包含系統 UI 元素,例如狀態和導覽列,以及非矩形 螢幕。
根據預設,應用程式繪製的區域不會與系統資訊列重疊 或螢幕凹口不過,您可能希望應用程式隱藏系統資訊列 在背後繪圖,或按照說明以螢幕凹口顯示內容 在視窗插邊內發布應用程式。如果您的應用程式執行上述任一操作,請參閱下列子節,瞭解如何讓應用程式在 Android Automotive OS 裝置生態系統中正常運作。
系統資訊列、沉浸模式和無邊框轉譯功能
車輛系統資訊列的大小和位置可能與其他車輛不同 板型規格舉例來說,導覽列可以放在左側 或螢幕底部即使在某個視窗中 頂端和底部導覽列 (大部分的手機 平板電腦),這些元素在車上的尺寸很可能會高出許多。
此外,Android Automotive OS 可讓原始設備製造商控制應用程式是否可以顯示或隱藏系統資訊列,以進入及退出全螢幕模式。舉例來說,原始設備製造商 (OEM) 可以選擇讓應用程式不隱藏系統資訊列,確保車輛控制項 (例如溫度控制項) 一律會顯示在螢幕上供隨時存取。如果原始設備製造商 (OEM) 禁止應用程式
控制系統資訊列,當應用程式呼叫
WindowInsetsController
(或 WindowInsetsControllerCompat
)
用來顯示或隱藏系統資訊列的 API。請參閱 show
和 hide
的說明文件,進一步瞭解如何偵測應用程式是否能夠修改內嵌項目。
同樣地,原始設備製造商 (OEM) 也可以控制應用程式能否設定顏色和 確保系統資訊列的透明性,以確保長條及其包含的元素 都能清楚顯示出來如果應用程式是從邊到邊繪製,請確認只有非關鍵內容會繪製在系統資訊列後方。如果裝置原始設備製造商 (OEM) 禁止設定資訊列的顏色或半透明度,這項內容可能就不會顯示。
<!-- Depending on OEM configuration, these style declarations
(and the corresponding runtime calls) may be ignored -->
<style name="...">
<item name="android:statusBarColor">...</item>
<item name="android:navigationBarColor">...</item>
<item name="android:windowTranslucentStatus">...</item>
<item name="android:windowTranslucentNavigation">...</status>
</style>
如果應用程式採用無邊框設計,請勿假設應用程式的大小、數字 類型或系統資訊列的位置請改用視窗插邊 API 的版面配置 讓應用程式內容根據系統資訊列顯示詳情請見 在應用程式中以無邊框方式顯示內容 。硬式編碼的邊框間距值雖然不建議使用,但在其他裝置上可能會讓內容保留在安全區,在車輛上則可能不會。
適應不規則形狀的螢幕
除了矩形螢幕,部分車輛可能會使用不規則形狀的螢幕,如圖 1所示:
如果您的應用程式並未採用無邊框設計,則無須採取任何行動 並在安全區域內顯示
如果您的應用程式以邊緣對齊方式顯示,您可以選擇應用程式如何處理螢幕缺口。您可以使用資源完成這項操作
方法是設定
android:windowLayoutInDisplayCutoutMode
針對應用程式的主題或執行階段屬性設定屬性
只要修改視窗的
layoutInDisplayCutoutMode
屬性。
因為 Android Automotive OS 裝置顯示的螢幕凹口類型
與行動裝置不同,那麼請勿使用
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
或 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
,
配合行動裝置的凹口設計進行調整請改用 LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
或 LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
,以便一律避開或一律進入裁剪區。選擇後者時
詳情請參閱「支援螢幕凹口」
與顯示凹口相關的 API 詳細資訊。
如果應用程式顯示在螢幕凹口區域,而您為此 瞭解 Android Automotive OS 和行動裝置的不同行為。詳情請參閱 針對應用程式進行設定的停用功能取得指引 以及使用替代資源 (如果有的話) 應用程式會使用資源檔案設定此行為。
停用功能
如果您打算在 Android Automotive OS 上提供現有的行動應用程式,某些特性和功能可能會不適合或無法使用。舉例來說,汽車通常不會授予相機存取權限。此外,Android Automotive OS 只支援部分 Google Play 服務,詳情請參閱「車用 Google Play 服務」一文。
您可以使用 PackageManager.hasSystemFeature
API,檢查應用程式是否具備 FEATURE_AUTOMOTIVE
功能,偵測應用程式是否在 Android Automotive OS 上執行。如以下範例所示:
Kotlin
val packageManager: PackageManager = ... // Get a PackageManager from a Context val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
Java
PackageManager packageManager = ... // Get a PackageManager from a Context boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
此外,如果您的應用程式也有 Android Auto 元件,則可使用 車輛專用 Android App Library 中的 CarConnection API 偵測應用程式是否在 Android Automotive OS 或 Android Auto 上執行,或是否未與任何車輛連線。
針對子母畫面 (PiP) 功能,請按照既定的最佳做法檢查該功能是否可用,並進行適當回應。
處理離線情況
雖然越來越多車輛都能連上網際網路,但仍建議您確保應用程式即使沒有網路連線也能執行,例如下列情況:
- 使用者可能會選擇停用汽車製造商在訂閱套裝組合中提供的行動數據。
- 部分地區的行動數據存取功能可能會受到限制。
- 配備 Wi-Fi 無線電的車輛可能不在 Wi-Fi 訊號範圍內,或者原始設備製造商 (OEM) 可能停用 Wi-Fi 而改用行動網路。
為因應應用程式中的這些情境,請對需要網際網路連線的功能進行優雅降級,例如提供離線內容。詳情請參閱「最佳化網路的最佳做法」。
使用替代資源
為協助調整車輛應用程式,您可以在搭載 Android Automotive OS 的車輛上使用 car
資源限定詞,來提供替代資源。舉例來說,如果您使用維度資源來儲存邊框間距值,可以針對 car
資源集使用較大的值,讓觸控目標更大。
發布應用程式
根據車用應用程式所屬類別的品質指南測試應用程式、為其建構 Android Automotive OS 版本,並針對所屬類別完成所有必要變更後,接下來就能將應用程式發布至 Play 商店的 Automotive OS 板型規格測試群組。如要進一步瞭解發布程序,請參閱「發布車用的 Android 應用程式」。
針對停車才能用的應用程式提供意見回饋
如果您在開發停車才能用 Android Automotive OS 應用程式,可以使用 Google Issue Tracker 回報遇到的問題或功能要求。請務必在問題範本中填寫所有必要資訊。提交新問題之前,請確認該問題是否已回報至問題清單中。您可以在追蹤程式中按一下該問題的星號,訂閱該問題並投票。詳情請參閱「訂閱問題」一文。