Android 8.0 功能與 API

Android 8.0 (API 級別 26) 推出了多種 為使用者和開發人員推出新功能 本文件將重點介紹開發人員適用的新功能,

別忘了查看 Android 8.0 行為變更:瞭解平台變更的部分 可能會影響您的應用程式。

使用者體驗

子母畫面模式

Android 8.0 的子母畫面。

Android 8.0 (API 級別 26) 允許在 子母畫面 (PIP) 模式。子母畫面是一種 特殊類型的多視窗模式 主要用於影片播放。子母畫面模式原本可用於 僅限 Android TV;Android 8.0 提供這項功能 在其他裝置上

當活動處於子母畫面模式時,會處於暫停狀態,但 繼續顯示內容。因此,請務必確認 在其 onPause() 中未暫停播放 處理常式。請改為在 onStop() 中暫停影片,然後在 onStart() 中繼續播放。若需更多資訊,請參閲 多視窗模式 Lifecycle

如要指定活動可以使用子母畫面模式,請設定 資訊清單中的 android:supportsPictureInPicture 為 true。 (從 Android 8.0 開始,子母畫面不需要 android:resizeableActivity 資訊清單屬性。 不過,您必須設定 如果您的活動支援其他android:resizeableActivity 多視窗模式)。

Android 8.0 (API 級別 26) 導入了新物件 PictureInPictureParams。 您傳遞至 PIP 方法,以指定活動行為的方式 也就是在子母畫面模式下執行時這個物件可指定下列屬性: 活動的偏好顯示比例。

如先前所述,現有 PIP 方法,請參閱 新增 現在,子母畫面 在所有 Android 裝置上使用,不僅限於 Android TV。此外, Android 8.0 提供下列支援方法 子母畫面模式:

  • Activity.enterPictureInPictureMode(PictureInPictureParams args): 在子母畫面模式中放置活動。活動的顯示比例 和其他配置設定都是由 args 指定。如果有任何欄位 args 中的值空白,系統會使用您上次設定的值 名為 Activity.setPictureInPictureParams()

    指定活動會放在畫面角落;其餘的 螢幕上會填滿先前畫面上的活動。 進入子母畫面模式的活動會進入暫停狀態,但仍會維持 已開始。使用者輕觸子母畫面活動時,系統會顯示 使用者互動;裝置處於活動狀態時沒有任何觸控事件 放在子母畫面狀態中

  • Activity.setPictureInPictureParams(): 更新活動的子母畫面配置設定。如果活動是 目前處於子母畫面模式,表示設定已更新這種做法相當實用 活動的顯示比例變更。如果活動並非處於子母畫面模式, 無論 您呼叫的 enterPictureInPictureMode() 方法。

通知

在 Android 8.0 (API 級別 26) 中,我們還重新設計了通知 讓您以更輕鬆且一致的方式管理通知行為 和設定這些異動包括:

    Android 8.0 (API 級別 26) 中的長按通知選單。

    使用者長按應用程式啟動器圖示即可查看 Android 8.0 中的通知功能。

  • 通知管道:Android 8.0 推出 可讓您建立可供使用者自訂的通知管道 決定該顯示何種類型的通知使用者介面是指 設為通知類別。如要瞭解操作方式 實作通知管道,請參閱 管理 通知管道
  • 通知圓點:Android 8.0 開始支援顯示 在應用程式啟動器圖示上顯示圓點或徽章。通知圓點代表 出現使用者尚未關閉或回應的通知。 如要瞭解如何使用通知圓點,請參閱 通知 徽章
  • 延後:使用者可以延後通知,導致通知消失 等待一段時間,應用程式才會再次出現通知會重新顯示 和他們第一次採用時一樣重要應用程式可以移除或更新 已延後的通知,但是更新延後的通知不會造成 即可再次出現
  • 通知逾時:您可以在建立 使用通知 setTimeoutAfter()。 您可以使用此方法指定通知多久後傳送通知。 都應取消如有需要,您可以在 指定的逾時時間長度。
  • 通知設定:你可以打電話 setSettingsText() 設定您建立應用程式連結後要顯示的文字 通知設定 Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES 意圖。 系統可能會提供下列額外項目來篩選意圖 應用程式必須向使用者顯示的設定:EXTRA_CHANNEL_IDNOTIFICATION_TAGNOTIFICATION_ID
  • 通知關閉:使用者可以自行關閉通知,以及 應用程式可以透過程式輔助方式移除您可以決定何時收到通知 以及因導入 的 onNotificationRemoved() 方法 NotificationListenerService 類別。
  • 背景顏色:您可以設定和啟用 通知。這項功能只能在下列情況下使用: 持續性工作是讓使用者快速查看的重要工作。適用對象 舉例來說,您可以設定與 規劃行車路線,或是進行中的通話。您也可以設定 所需背景顏色 setColor()。建議做法 可讓您使用 setColorized(),啟用通知的背景顏色。
  • 訊息樣式:在 Android 8.0 中,使用 MessagingStyle 類別顯示 展開的您應該使用 以下課程的 MessagingStyle 類別: 與訊息相關的通知您也可以使用 透過 addHistoricMessage() 方法提供對話的背景資訊: 傳送至訊息相關通知的歷來訊息。

自動填入架構

建立帳戶、登入及信用卡交易都很耗時,而且很容易 發生錯誤。如果應用程式需要這些類型,使用者很容易就會感到不悅 重複性任務

Android 8.0 (API 級別 26) 填寫表單,例如登入 以及信用卡表單和信用卡表單,因為「自動填入架構」引進了更容易。 使用者選擇啟用後,現有和新的應用程式都可與自動填入架構搭配使用 自動填入。

您可以採取幾個步驟,改善應用程式與該架構搭配運作的方式。 如需更多資訊 請參閱「自動填入架構總覽」。

可下載的字型

Android 8.0 (API 級別 26) 和 Android 支援資料庫 26 可讓您要求 ,而不要將字型整合至 APK 或讓 APK 下載字型。這項功能可縮減 APK 大小,進而增加應用程式 ,並讓多個應用程式共用相同字型。

如要進一步瞭解如何下載字型,請參閱 可下載的字型

XML 中的字型

Android 8.0 (API 級別 26) 導入了「XML 中的字型」這項新功能 可讓您將字型做為資源也就是說,您不需要組合字型 視為素材資源字型會編譯於 R 檔案中,並自動 這些資源會以資源的形式顯示在系統中然後,您可以透過 新資源類型 font 的說明。

支援資料庫 26 可在裝置上完整支援這項功能 執行 API 14 以上版本

如要進一步瞭解如何將字型做為資源和擷取系統字型, 請參閱「XML 中的字型」。

自動調整 TextView 大小

Android 8.0 (API 級別 26) 可讓您將文字大小 根據 TextView 的大小自動合約也就是說 方便您針對不同螢幕或動態內容調整文字大小。 如要進一步瞭解如何在 Android 8.0 中自動調整 TextView 大小, 請參閱「Autosizing TextView」一文。

自動調整圖示

Android 8.0 (API 級別 26) 推出了自動調整啟動器圖示。自動調整圖示支援視覺元素 還能在各種裝置型號上顯示各種形狀。如要瞭解 要建立自動調整圖示,請參閱自動調整圖示 指南。

色彩管理

開發圖像應用程式的 Android 開發人員現可善用新裝置。 能夠採用支援廣色域的螢幕顯示廣域 映像檔,應用程式必須在其資訊清單中啟用標記 (按活動) 載入具有內嵌廣色域色彩設定檔 (AdobeRGB、 Pro Photo RGB、DCI-P3 等)。

WebView API

Android 8.0 提供多種 API 在應用程式中顯示網路內容的 WebView 物件。 這些 API 可改善應用程式的穩定性和安全性,包括 包括:

  • 版本 API
  • Google SafeBrowsing API
  • 終止帳號代碼 API
  • 轉譯器重要性 API

如要進一步瞭解如何使用這些 API,請參閱 管理 WebView

WebView 類別現在包含 Safe Browsing API,可用於強化安全性 以及網頁瀏覽。若需更多資訊,請參閲 Google Safe Browsing API

固定捷徑和小工具

Android 8.0 (API 級別 26) 推出了應用程式內捷徑和固定功能。 你可以在應用程式中建立固定的捷徑和小工具, 支援的啟動器 (取決於使用者授權)。

詳情請參閱 固定捷徑和小工具 功能指南

螢幕顯示比例上限

Android 8.0 (API 級別 26) 改變了設定應用程式最大顯示比例的方式。

首先,Android 8.0 推出了 maxAspectRatio 屬性,然後建立 可用來設定應用程式的顯示比例上限。此外,在 Android 8.0 以上版本中, 預設最大顯示比例是指執行應用程式的裝置原生顯示比例。

如要進一步瞭解如何宣告最大顯示比例,請參閱 支援多種螢幕

多螢幕支援功能

從 Android 8.0 (API 級別 26) 開始,這個平台提供了強化 支援多種螢幕如果活動支援多視窗模式,且 在配備多個螢幕的裝置中執行時,使用者可以移動活動 畫面之間顯示應用程式啟動活動時,應用程式 可指定應在哪個螢幕上執行活動。

注意: 如果活動支援 多視窗模式,Android 8.0 會自動啟用 該活動的多螢幕支援功能。您應該測試應用程式 以便在多顯示環境中正常運作。

即使 應用程式有多個螢幕焦點所在的活動會處於重新啟用狀態。 所有其他可見活動都會暫停,但不會停止。如要進一步瞭解 顯示多個活動時 請參閱「多視窗模式」 Lifecycle

當使用者在裝置間移動活動時,系統會 調整活動大小,並視需要發出執行階段變更。你的活動 系統就能自動處理設定變更 請刪除包含活動的程序,並使用新的活動重新建立 維度。若需更多資訊,請參閲 處理設定 變更

ActivityOptions 提供兩種支援的新方法 多個螢幕:

setLaunchDisplayId()
指定在啟動活動時應顯示哪個螢幕。
getLaunchDisplayId()
傳回活動目前的啟動畫面。

ADB 殼層已擴充以支援多個螢幕。 shell start 指令現在可用來啟動活動。 和指定活動的目標顯示畫面:

adb shell start <activity_name> --display <display_id>

統一的版面配置邊界和邊框間距

Android 8.0 (API 級別 26) 可讓您更輕鬆地指定相反方向的情況 View 元素的元素須使用相同的邊界或邊框間距。 具體來說,您現在可以在版面配置 XML 中使用下列屬性 檔案:

注意:如果您自訂應用程式邏輯 支援不同的 語言和文化 (包括文字方向) 請特別留意 屬性值不會影響 layout_marginStart layout_marginEnd敬上 paddingStart,或 paddingEnd。除了設定這些值外,您也可以自行設定 全新的垂直和水平版面配置屬性,建立版面配置行為 這取決於文字方向

指標擷取

在某些應用程式 (例如遊戲、遠端桌面和虛擬化用戶端) 上, 可以更全面地控制滑鼠遊標全新的遊標拍攝功能 Android 8.0 (API 級別 26) 中的功能,藉由傳送所有滑鼠事件,提供此控制項 將焦點移至應用程式中的聚焦檢視畫面

從 Android 8.0 開始,應用程式中的 View 可以要求 指標擷取並定義事件監聽器,用於處理擷取的指標事件。 在這個模式中,系統會隱藏滑鼠遊標。檢視畫面可以釋出指標擷取作業 不再需要滑鼠資訊時系統也可能會 當檢視畫面失去焦點 (例如使用者開啟) 時,系統會擷取指標 其他應用程式。

如要瞭解如何在應用程式中使用這項功能,請參閱 指標擷取

應用程式類別

Android 8.0 (API 級別 26) 可讓每個應用程式宣告適合自己的類別 適時提供相關內容這些類別會用來將相似類型的應用程式彙整在一起 例如資料使用方式、電池用量或 儲存空間用量:您可以定義應用程式所屬的類別,方法是設定 <application> 中的 android:appCategory 屬性 資訊清單標記。

Android TV 啟動器

Android 8.0 (API 級別 26) 包含以內容為中心的新。 Android TV 主畫面體驗, 適用於 Android 8.0 的 Android TV 模擬器和 Nexus Player 裝置映像檔。新版主畫面 頻道對應資料列中的影片內容,每個資料列都會由應用程式填入節目 以及系統應用程式可以發布多個頻道,使用者則可設定要透過哪些管道 從主畫面顯示的資訊Android TV 主畫面也提供「接下來請看」列, 能根據使用者的觀看習慣,顯示應用程式提供的程式。應用程式也能提供 影片預覽,會在使用者專注觀看節目時自動播放。API 填入管道和程式屬於 TvProvider API 的一部分,並以 Android 的形式發布 支援資料庫模組 (搭載 Android 8.0)。

動畫組

從 Android 8.0 (API 級別 26) 開始,AnimatorSet API 現在支援在 反向播放。跳轉功能可讓你將動畫位置設為 最終點子如果應用程式含有動畫,反向播放功能就相當實用 列出可復原的動作而不是定義兩個獨立的動畫 可以反過來依序播放相同的

輸入與瀏覽

鍵盤導覽叢集

如果應用程式中的活動使用複雜的檢視區塊階層,例如 圖 2:考慮將多組 UI 元素歸入叢集,以便更方便 使用鍵盤瀏覽功能使用者可以按下 Meta + Tab 鍵或搜尋鍵 + Tab 鍵開啟 Chromebook 裝置,可切換叢集。優良範例 包括側邊面板、導覽列、主要內容區域和元素 可能包含許多子元素

包含五個導覽叢集的範例活動
  可以使用鍵盤瀏覽叢集快速鍵進行瀏覽叢集
  會以下列排列方式顯示:頂端面板、左側面板、主要內容
  區域、底部面板和懸浮動作按鈕
圖 2. 包含 5 項導覽的活動 叢集

如何建立 ViewViewGroup 元素 將叢集設為 android:keyboardNavigationCluster 屬性設為 在元素的版面配置 XML 檔案中,使用 true,或傳遞 true 在應用程式 UI 邏輯中嵌入 setKeyboardNavigationCluster()

注意:叢集不能建立巢狀結構,但非巢狀叢集 叢集可能會顯示在階層的不同層級。如果您嘗試 但此架構只會處理 ViewGroup 元素做為叢集。

在配備觸控螢幕的裝置中,您可以設定叢集 ViewGroup 個物件的 將 android:touchscreenBlocksFocus 個元素設為「true」 允許僅叢集內進出該叢集如果您套用這個 使用者無法使用 Tab 鍵或方向鍵 可前往或退出叢集必須按下叢集導覽按鈕 鍵盤組合。

查看預設焦點

在 Android 8.0 (API 級別 26) 中,您可以指派 View 使用者按一下 (重新建立) 活動,並按下 使用鍵盤瀏覽鍵,例如 Tab 鍵。如何套用「預設為聚焦」 設定 View 元素的 android:focusedByDefault 屬性設為 true 包含 UI 元素的版面配置 XML 檔案,或將 true 傳入 setFocusedByDefault()在您的 應用程式的 UI 邏輯。

語音輸出

活動和服務可使用以下項目的例項: TextToSpeech即可語音輸入內容。截至 Android 8.0 (API 級別 26),應用程式可以取得更精確的時間資訊 文字轉語音引擎開始朗讀個別合成字詞時, 前提是引擎提供了這些資訊您可以使用這項功能 讓文字轉語音引擎朗讀特定字詞 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件

如要在應用程式中使用這些文字轉語音引擎改善功能,請註冊 UtteranceProgressListener 的執行個體。一部分 並在註冊過程中加入處理常式 onRangeStart() 方法。

文字轉語音引擎呼叫 rangeStart()即可錄音 系統預期音訊播放特定文字範圍的時間點 即可開始。當該文字範圍的音訊開始播放時,您的應用程式 onRangeStart() 方法的執行。這樣一來,您的應用程式就能回應此回呼,例如: 醒目顯示與語音內容相關聯的文字範圍。

進一步瞭解如何追蹤文字轉語音的播放進度 引擎,請參閱 UtteranceProgressListener 類別 參照。

系統

全新的 StrictMode 偵測工具

Android 8.0 (API 級別 26) 新增了三個 StrictMode 偵測工具,以協助識別 應用程式中的潛在錯誤:

快取資料

Android 8.0 (API 級別 26) 可針對快取資料提供更完善的指引和行為。每項 快取資料的磁碟空間配額,由應用程式傳回 getCacheQuotaBytes(UUID)

當系統需要釋出磁碟空間時,系統會先從應用程式刪除快取檔案 將超過分配配額最大化因此,只要將快取資料存放在 配額,快取檔案 將是系統中最後清除的部分 無從得知系統決定從應用程式中刪除哪些快取檔案時, (依修改時間判定) 優先考慮最舊檔案。

另外,您也可以為個別目錄啟用兩項新行為 系統釋出快取資料的方式:

  • StorageManager.setCacheBehaviorAtomic() 可用來表示 目錄和其中所有內容都應刪除為不可拆分的單一單位。
  • setCacheBehaviorTombstone(File, boolean) 可用來表示 不應刪除目錄內的檔案,而是將其截斷為 空白檔案則完整保留。

最後,如果您需要為大型檔案分配磁碟空間,請考慮使用新的 allocateBytes(FileDescriptor, long) API (會自動清除) 快取檔案 (視需要) 來回應要求。在決定 裝置的磁碟空間足以存放新資料,請撥打 使用 getAllocatableBytes(UUID),而非 getUsableSpace(),因為前者會考量任何快取 系統願意代表您清除的資料

內容供應器分頁

我們更新了內容供應器,支援載入大型 例如包含數千個 圖片可以查詢網頁內容的子集。每一頁 內容供應器傳回的結果以單一遊標表示 物件。客戶和供應商都必須實作分頁功能,才能使用 這項功能

如要進一步瞭解內容供應器異動的相關資訊,請參閱 「ContentProvider」和 ContentProviderClient

內容重新整理要求

ContentProviderContentResolver 類別現在皆包含 refresh() 方法,方便用戶端判斷 使用者索取的資訊時就會有現況

若要新增自訂內容重新整理邏輯,您可以擴充 ContentProvider。請務必覆寫 要傳回 refresh() 種方法 true:用於向供應商的客戶說明你已嘗試過的 即可自行重新整理資料

您的用戶端應用程式可以呼叫 不同的方法 (也稱為 refresh()。呼叫此項目時 方法時,請傳入要重新整理的資料 URI。

注意:由於您可能是透過網路要求資料, 請叫用 refresh() 除非有明顯跡象顯示內容已過時,否則用戶端只會在用戶端顯示您的要求。 執行這類內容重新整理的最常見原因,是回應 滑動重新整理 手勢,明確要求目前的 UI 顯示最新內容。

JobScheduler 改善

Android 8.0 (API 級別 26) 為 JobScheduler 推出了許多改善項目。這些改善措施讓您的應用程式變得更加輕鬆 遵守新的背景 執行限制,因為您通常可以使用已排定的工作來替換 受限的背景服務或隱式廣播接收器。

JobScheduler」的更新內容包括:

  • 您現在可以將工作佇列與已排定的工作建立關聯。如何將作業項目新增至 工作的佇列、呼叫 JobScheduler.enqueue()。 工作執行時,系統會將待處理的工作從佇列中移除,並予以處理。 因為這項功能可以處理先前的許多用途 稱為啟動背景服務的特定服務 IntentService
  • Android 支援資料庫 26.0.0 版導入了新的 JobIntentService 類別,提供相同功能 IntentService,但會使用工作 服務。
  • 您現在可以打電話 JobInfo.Builder.setClipData()敬上 將 ClipData 與工作建立關聯。這個選項可啟用 類似於這些 API 權限授予項目與工作 權限可傳播至 Context.startService()。您也可以將 URI 權限授權與意圖搭配使用 處理工作佇列
  • 已排定的工作現在支援幾項新的限制:
    JobInfo.isRequireStorageNotLow()
    如果裝置的可用儲存空間不足,工作就不會執行。
    JobInfo.isRequireBatteryNotLow()
    如果電池電量等於或低於關鍵電量,則工作不會執行 門檻;這是裝置顯示「低電量」的電量 警告系統對話方塊。
    NETWORK_TYPE_METERED
    工作需要使用計量付費網路連線,例如大部分的行動數據 規劃。

自訂資料儲存庫

Android 8.0 (API 級別 26) 可讓您為自己的偏好設定提供自訂資料儲存庫, 能將偏好設定儲存在雲端或本機資料庫。 設定是否適用於特定裝置的偏好設定如要進一步瞭解 有關如何導入資料儲存庫,請參閱 自訂資料儲存庫

媒體強化

VolumeShaper

有一個新的 VolumeShaper 類別。使用 來執行簡短的音量轉場效果,例如淡入、淡出和交叉淡出。 請參閱「使用 VolumeShaper 控制 Amplitude」一文 。

強化音訊焦點

音訊應用程式會要求並放棄音訊焦點,藉此分享裝置上的音訊輸出。 應用程式透過開始/停止播放或降低音量,處理焦點變更。 有一個新的 AudioFocusRequest 類別。使用此類別做為 requestAudioFocus(), 應用程式在處理音訊焦點的變更時,可以使用新功能: 自動降低 延遲專注力

媒體指標

新的 getMetrics() 方法會傳回 PersistableBundle 包含設定的物件 和成效資訊,以屬性和值的對應圖表示。 已為下列媒體類別定義 getMetrics() 方法:

系統會針對每個執行個體分別收集指標,並保留 但在執行個體的生命週期中如果沒有可用的指標,此方法會傳回 空值。實際傳回的指標視類別而定。

媒體播放器

從 Android 8.0 (API 級別 26) 開始,MediaPlayer 可播放內容 受數位版權管理保護 以及 HLS 範例層級加密媒體

Android 8.0 導入了新的超載功能 seekTo() 指令 縮放到特定畫格時其中包含用於指定跳轉模式的第二個參數:

  • SEEK_PREVIOUS_SYNC 會將媒體位置移至同步 (或按鍵) 影格 與資料來源在指定時間之前或時間點的資料來源相關聯。
  • SEEK_NEXT_SYNC 會將媒體位置移至相關聯的同步 (或按鍵) 影格 也就是位於指定時間之後或之後的資料來源。
  • SEEK_CLOSEST_SYNC 會將媒體位置移至同步 (或按鍵) 影格 與最接近或在指定時間的資料來源建立關聯。
  • SEEK_CLOSEST 會將媒體位置移至頁框 (不一定是同步處理作業) 或索引鍵範圍) 相關聯的資料來源,或是最接近或 特定時間點的 Pod

持續跳轉時,應用程式應使用任何 SEEK_ 模式,而非 SEEK_CLOSEST,這類模式的執行速度相對較慢,但準確度更高。

MediaRecorder (媒體錄音工具)

  • MediaRecorder 現在支援 MPEG2_TS 格式, 串流:

    Kotlin

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
    

    Java

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
    

    查看 MediaRecorder.OutputFormat

  • MediaMuxer 現在可以處理任意數量的音訊和影片串流。已不受限制 每個音軌和/或一個視訊音軌。使用「addTrack()」 盡情混音,沒有數量限制
  • MediaMuxer 也可以新增一或多個中繼資料軌跡,其中包含使用者定義的每個影格 可能不準確或不適當中繼資料的格式是由應用程式所定義。 中繼資料音軌僅適用於 MP4 容器。

中繼資料很適合用於離線處理。例如,陀螺儀信號 感應器可用來執行影片防震功能。

新增中繼資料音軌時,曲目的 MIME 格式必須以前置字串開頭 「application/」。寫入中繼資料與寫入影片/音訊資料相同,但 指出資料並非來自 MediaCodec。不過,應用程式會將 將 ByteBufferwriteSampleData() 方法。 時間戳記必須與視訊軌和音軌的時間相符。

產生的 MP4 檔案會使用區段中定義的 TextMetaDataSampleEntry 12.3.3.2 的 ISOBMFF,以指出中繼資料的 MIME 格式。使用 MediaExtractor 擷取含有中繼資料追蹤的檔案時,MIME 中繼資料格式會擷取至 MediaFormat

改善媒體檔案存取權

儲存空間存取架構 (SAF) 可讓應用程式 「DocumentsProvider」,可提供檔案存取權 某個資料來源到其他應用程式中事實上 文件供應程式甚至可將檔案存取權 這類執行個體會使用 媒體傳輸通訊協定 (MTP)

不過,從遠端資料來源存取大型媒體檔案會產生一些影響 挑戰:

  • 媒體播放器需要文件提供者提供的檔案的可搜尋存取權。 如果大型媒體檔案位於遠端資料來源中, 文件提供者必須預先擷取所有資料並建立快照 檔案描述元媒體播放器必須有檔案才能播放檔案 因此必須等到文件供應器完成,才能開始播放 下載檔案。
  • 媒體集合管理員 (例如相片應用程式) 必須掃遍 存取 URI,透過限定範圍存取儲存在外部 SD 卡中的媒體 資料夾。這種存取模式可大規模對媒體執行大規模作業,例如 移動、複製與刪除—速度較慢。
  • 媒體集合管理員無法根據文件位置判斷文件的位置 URI。導致這類應用程式難以讓使用者選擇 媒體檔案的儲存位置

Android 8.0 藉由提升儲存空間存取能力,以解決下列各項挑戰 架構。

自訂文件供應程式

從 Android 8.0 開始,儲存空間存取架構允許 自訂文件 提供者為儲存在 即可產生來自遠端資料來源的叢集SAF 可以開啟檔案來取得原生搜尋檔案。 描述元接著,SAF 會向文件傳送離散位元組要求 。這項功能可讓文件供應器傳回特定的範圍 而不是快取整個 檔案。

若要使用此功能,您需要 StorageManager.openProxyFileDescriptor() 方法。 openProxyFileDescriptor() 方法接受 ProxyFileDescriptorCallback 物件做為回呼。SAF 叫用 每次用戶端應用程式在 檔案描述元。

直接存取文件

從 Android 8.0 (API 級別 26) 開始,您可以使用 將 getDocumentUri() 種方法分配給 取得參照與指定 mediaUri 相同的文件的 URI。 不過,因為傳回的 URI 是由 DocumentsProvider,媒體集合管理員可以存取 而不必掃遍限定範圍目錄的樹狀結構。 因此,媒體管理員可以在文件上執行作業。 大幅加快改善速度

注意:getDocumentUri() 方法只會尋找媒體檔案。不授予應用程式 有權存取這些檔案的權限。進一步瞭解如何取得存取權 請參閱參考說明文件。

文件路徑

在 Android 8.0 (API 級別 26) 中使用儲存空間存取架構時,您可以使用 findDocumentPath() 方法,適用於 DocumentsContractDocumentsProvider 類別,用於針對具有文件的檔案系統,判斷檔案系統的根目錄路徑 編號。此方法會在 DocumentsContract.Path 物件。如果有檔案 系統含有多個定義同一文件的路徑,則這個方法會傳回 最常用於存取具有指定 ID 的文件的路徑。

這項功能在下列情況中特別實用:

  • 應用程式使用「另存新檔」對話方塊,其中顯示 以及特定文件
  • 您的應用程式會在搜尋結果檢視畫面中顯示資料夾,且必須載入子項 將位於特定資料夾中的文件 資料夾。

注意:如果應用程式只能存取部分文件, 在路徑中,findDocumentPath() 傳回的值只包含 應用程式可存取的資料夾和文件

監控音訊播放

AudioManager 系統服務負責維護 有效的 AudioPlaybackConfiguration 物件,而每個物件 包含特定音訊播放工作階段的資訊。應用程式可以 呼叫 getActivePlaybackConfigurations()

從 Android 8.0 (API 級別 26) 開始,您可以註冊回呼以接收通知 您的應用程式 AudioPlaybackConfiguration 個物件已變更。方法如下 並呼叫 registerAudioPlaybackCallback() 傳入 AudioManager.AudioPlaybackCallbackAudioManager.AudioPlaybackCallback 類別包含 onPlaybackConfigChanged() 方法,系統會在音訊音訊發生時呼叫這個方法 播放設定變更。

連線能力

Wi-Fi 偵測

Android 8.0 (API 級別 26) 新增對 Wi-Fi Aware 的支援 (以鄰近地區為基礎) 感知網路 (NAN) 規格。採用適當的裝置 Wi-Fi 感知硬體、應用程式和鄰近裝置都能探索及通訊 沒有網際網路存取點也能透過 Wi-Fi 網路下載。我們正在開發硬體 合作夥伴,盡快在裝置上提供 Wi-Fi Aware 技術。適用對象 想瞭解如何將 Wi-Fi Aware 整合至您的應用程式,請參閱 Wi-Fi Aware

藍牙

Android 8.0 (API 級別 26) 新增了下列項目,可豐富平台的藍牙支援功能 功能:

  • 支援 AVRCP 1.4 標準,可讓使用者在音樂庫中瀏覽歌曲。
  • 支援藍牙低功耗 (BLE) 5.0 標準。
  • 將 Sony LDAC 轉碼器整合至藍牙堆疊。

配對裝置配對連線

Android 8.0 (API 級別 26) 提供的 API 可讓您自訂 配對要求對話方塊,指出嘗試與隨附裝置配對時 藍牙、BLE 和 Wi-Fi。若需更多資訊,請參閲 配對裝置 配對中

如要進一步瞭解如何在 Android 上使用藍牙,請參閱 藍牙指南。適用對象 對 Android 8.0 (API 級別 26) 專屬的藍牙變更,請參閱 Android 8.0 行為變更頁面。

分享

智慧共享

Android 8.0 (API 級別 26) 可讓您瞭解使用者的個人化分享 並進一步瞭解各種符合情境的內容 分享對象舉例來說,如果使用者拍攝收據的相片 8.0 可以建議應用程式費用追蹤。當使用者自拍時 更能妥善處理圖片。Android 8.0 會自動學習上述所有 能根據使用者的個人化偏好設定

智慧分享功能適用於 image 以外的內容類型,例如 audiovideotextURL、 依此類推

如要啟用智慧分享功能,請新增ArrayList (最多三個) 字串註解加入共用內容的意圖。註解應該 描述內容的主要元素或主題以下程式碼範例 說明如何將註解新增至意圖:

Kotlin

val annotations: ArrayList<String> = arrayListOf(
        "topic1",
        "topic2",
        "topic3"
)

intent.putStringArrayListExtra(
        Intent.EXTRA_CONTENT_ANNOTATIONS,
        annotations
)

Java

ArrayList<String> annotations = new ArrayList<>();

annotations.add("topic1");
annotations.add("topic2");
annotations.add("topic3");

intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS,
    annotations
);

如要進一步瞭解智慧分享註解,請參閱 EXTRA_CONTENT_ANNOTATIONS

文字分類工具

在相容裝置上,應用程式可以使用新的文字分類器,檢查 字串符合已知的分類器實體類型,並取得建議選取項目 替代解決方案系統可識別的實體包括位址、網址 電話號碼和電子郵件地址若需更多資訊,請參閲 TextClassifier

無障礙設定

Android 8.0 (API 級別 26) 支援多項新的 開發人員是自行設計無障礙服務的平台,包括:

,瞭解如何調查及移除這項存取權。 如要進一步瞭解如何打造更符合無障礙需求的應用程式, 請參閱「無障礙功能」。

安全性和隱私權

權限

Android 8.0 (API 級別 26) 推出了幾項與電話相關的新權限:

這些權限會同時歸類為 危險的 而且都屬於 PHONE敬上 權限群組。

新的帳戶存取權和探索 API

Android 8.0 (API 級別 26) 導入了幾項改善措施, 應用程式取得使用者帳戶的存取權限。對於他們管理的帳戶 驗證者可以根據自己的政策 決定是否要隱藏帳戶 或向應用程式提供帳戶Android 系統會追蹤 存取特定帳戶

在舊版 Android 中,應用程式需要追蹤 使用者帳戶必須收到所有帳戶的最新資訊,包括 不相關的類型Android 8.0 新增了 addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]) 方法,讓應用程式指定帳戶類型清單。 應接收哪些帳戶變更

API 變更

AccountManager 提供六種新方法,讓驗證者 應用程式可以查看帳戶:

Android 8.0 (API 級別 26) 推出了兩個特殊套件名稱值,用於指定瀏覽權限 為尚未使用 setAccountVisibility(android.accounts.Account, java.lang.String, int) 方法。 PACKAGE_NAME_KEY_LEGACY_VISIBLE 擁有瀏覽權限的應用程式 GET_ACCOUNTS 權限和目標版本 Android 8.0 以下版本,或是 加上用於指定任何 Android 版本的驗證器 PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE 提供了預設顯示值 先前未設定,以及 PACKAGE_NAME_KEY_LEGACY_VISIBLE 不是

如要進一步瞭解新的帳戶存取權和探索 API,請參閱 參考資料 「AccountManager」和 OnAccountsUpdateListener

測試

檢測設備測試

Android 8.0 (API 級別 26) 為應用程式的 檢測設備測試

對非預設應用程式程序執行

您現在可以指定執行特定檢測設備測試時 應用程式預設程序以外的處理程序。這項設定非常實用 應用程式含有在不同程序中執行的多項活動。

如要定義非預設程序檢測,請前往資訊清單 檔案,然後瀏覽至 <instrumentation> 元素。將 android:targetProcess 屬性,並將值設為 包括:

  • 特定程序的名稱。
  • 程序名稱清單 (以半形逗號分隔)。
  • 萬用字元 ("*"),可執行檢測作業 針對執行 Pod 中指定套件中程式碼的啟動程序 android:targetPackage 屬性。

在檢測設備測試執行期間,您可以查看 呼叫 getProcessName() 進行測試

在測試期間回報結果

您現在可以在檢測設備測試執行期間報告結果。 而不是之後呼叫 addResults()

模擬測試意圖

為了方便您的應用程式,建立獨立的獨立 UI 測試 在活動中,Android 8.0 (API 級別 26) 加入了 onStartActivity() 方法。您可在 Instrumentation.ActivityMonitor 類別來處理特定 意圖。

當測試類別叫用意圖時,這個方法會傳回虛設常式 Instrumentation.ActivityResult 物件,而不是執行 意圖本身在測試中使用這個模擬意圖邏輯,您就能專注於 瞭解活動如何準備及處理您傳遞到 來自不同活動或完全不同的應用程式

執行階段與工具

平台最佳化

Android 8.0 (API 級別 26) 為 不僅效能大幅提升 這些最佳化功能包括並行壓縮垃圾收集 更有效率地使用記憶體,以及程式碼位置

這些最佳化功能可縮短啟動時間,同時提高 作業系統和應用程式

更新 Java 語言支援

Android 8.0 (API 級別 26) 新增了對幾個其他 OpenJDK Java API 的支援:

如要進一步瞭解這些新增項目中的類別和方法 套件相關說明,請參閱 API 參考說明文件。

如果您要 會在 Android Studio 中使用 Java 8 語言功能 下載最新的預先發布版

已更新 ICU4J Android 架構 API

Android 8.0 (API 級別 26) 擴充了 ICU4J Android 架構 API 是 ICU4J API 的子集,可讓應用程式開發人員 使用在 android.icu 套件下。這些 API 會使用本地化資料 ,因此您不必編譯 APK 中的 ICU4J 程式庫。

表 1. 使用的 ICU、CLDR 和 Unicode 版本 。

Android API 級別 ICU 版本 CLDR 版本 萬國碼 (Unicode) 版本
Android 7.0 (API 級別 24)、Android 7.1 (API 級別 25) 56 28 8.0
Android 8.0 (API 級別 26) 58.2 30.0.3 9.0

如要進一步瞭解 Android 如何國際化 (包括 ICU4J 支援,請參閱 在 Android 上國際化

Android Enterprise

已為搭載 Android 作業系統的裝置推出全新企業功能和 API Android 8.0 (API 級別 26)。重點摘要包括:

  • 全代管裝置上的工作資料夾可讓企業將工作與 同時管理兩者
  • API 委派可讓裝置擁有者和設定檔擁有者指派應用程式 管理其他應用程式
  • 改善佈建流程中的使用者體驗 (包括新的 自訂選項),縮短設定時間。
  • 全新藍牙、Wi-Fi、備份和安全性控制選項讓企業 以便管理更多裝置網路活動記錄可協助企業追蹤 通常也會發生相同問題

如要進一步瞭解上述及其他新的 Android 企業 API 與功能, 請參閱「Android Enterprise 企業版」。