Android 5.0 API

API 級別:21

Android 5.0 (LOLLIPOP) 為使用者和應用程式開發人員提供新功能。本文件將介紹最值得注意的新 API。

如果你有已發布的應用程式,請務必查看在應用程式中應考量的 Android 5.0 行為變更。即使你未使用新的 API 或指定新功能,這些行為變更也會對 Android 5.0 裝置上的應用程式造成影響。

如需概略瞭解新的平台功能,請改為參閱 Android Lollipop 重點介紹

立即開發

如要開始建構適用於 Android 5.0 的應用程式,您必須先取得 Android SDK。接著使用 SDK Manager,下載 Android 5.0 SDK 平台和系統映像檔。

更新目標 API 級別

如要針對搭載 Android 5.0 的裝置進一步最佳化應用程式,請將 targetSdkVersion 設為 "21",在 Android 5.0 系統映像檔上安裝應用程式,然後利用這項變更發布更新後的應用程式。

您可以使用 Android 5.0 API 同時支援舊版 API,方法是在程式碼中新增檢查系統 API 級別的條件,再執行 minSdkVersion 不支援的 API。如要進一步瞭解如何維持向下相容性,請參閱「支援不同平台版本」。

如要進一步瞭解 API 級別的運作方式,請參閱「什麼是 API 級別?」。

重要行為異動

如果您先前曾發布 Android 應用程式,請注意,Android 5.0 的異動可能會影響該應用程式。

如需完整資訊,請參閱「Android 5.0 異動」。

使用者介面

Material Design 支援

Android 5.0 開始支援 Android 的全新質感設計樣式。您可以使用 Material Design 建立應用程式,讓應用程式具有動態視覺效果,並提供使用者自然的 UI 元素轉場效果。這項支援服務包括:

  • 材質主題
  • 查看陰影
  • RecyclerView 小工具
  • 可繪動畫和樣式效果
  • Material Design 動畫和活動轉場效果
  • 根據檢視畫面狀態,為檢視畫面屬性提供動畫
  • 使用由您控制的調色盤自訂 UI 小工具和應用程式列
  • 根據 XML 向量圖形建立動畫和非動畫可繪項目

如要進一步瞭解如何在應用程式中加入質感設計功能,請參閱「Material Design」。

在「最近使用」畫面中顯示並行文件和活動

在先前版本中,「最近使用」畫面只能針對使用者最近互動的每個應用程式,顯示單一任務。應用程式現在可以視需要開啟更多並行活動工作,處理文件的其他作業。這項功能可讓使用者從近期畫面快速切換個別活動和文件,並在所有應用程式提供一致的切換體驗,進而實現多工處理。這類並行工作的例子包括網頁瀏覽器應用程式中的開啟分頁、生產力應用程式中的文件、遊戲中的並行比賽,或訊息應用程式中的聊天。應用程式可透過 ActivityManager.AppTask 類別管理其工作。

如要插入邏輯中斷情形,讓系統將活動視為新工作,請在使用 startActivity() 啟動活動時使用 FLAG_ACTIVITY_NEW_DOCUMENT。您也可以在資訊清單中將 <activity> 元素的 documentLaunchMode 屬性設為 "intoExisting""always",藉此取得這類行為。

為避免「最近」的畫面看起來很雜亂,您可以設定應用程式該畫面中可顯示的工作數量上限。如要執行這項操作,請設定 <application> 屬性 android:maxRecents。目前可指定的上限為每位使用者 50 項工作 (低 RAM 裝置則為 25 項)。

您可以設定最近使用畫面中的任務,讓這些任務在重新啟動時持續存在。如要控制持續性行為,請使用 android:persistableMode 屬性。您也可以呼叫 setTaskDescription() 方法,變更最近使用畫面中活動的視覺屬性,例如活動的顏色、標籤和圖示。

WebView 更新

Android 5.0 會將 WebView 實作項目更新為 Chromium M37,不但可提升安全性、穩定性,並修正多項錯誤。在 Android 5.0 上執行的 WebView 預設使用者代理程式字串已更新,並納入 37.0.0.0 做為版本號碼。

這個版本引入 PermissionRequest 類別,可讓應用程式透過網頁 API (例如 getUserMedia()) 授予 WebView 權限,存取相機和麥克風等受保護的資源。您的應用程式必須具有針對這些資源適當的 Android 權限,才能向 WebView 授予權限。

有了新的 onShowFileChooser() 方法,您現在可以在 WebView 中使用輸入表單欄位,並啟動檔案選擇器,從 Android 裝置中選取圖片和檔案。

此外,這個版本還支援 WebAudioWebGLWebRTC 開放標準。如要進一步瞭解這個版本中的新功能,請參閱 Android 版 WebView

螢幕畫面擷取與分享

您可以使用 Android 5.0 中的新 android.media.projection API,為應用程式新增螢幕擷取和螢幕分享功能。此功能非常實用,例如當您想要在視訊會議應用程式中啟用分享螢幕畫面功能時。

新的 createVirtualDisplay() 方法可讓應用程式將主畫面的內容 (預設顯示畫面) 擷取到 Surface 物件中,然後應用程式可以透過網路傳送該物件。這個 API 只能擷取不安全的畫面內容,無法擷取系統音訊。如要開始擷取螢幕畫面,應用程式必須先使用透過 createScreenCaptureIntent() 方法取得的 Intent,啟動螢幕擷取對話方塊,要求使用者授予權限。

如需如何使用新 API 的範例,請參閱範例專案中的 MediaProjectionDemo 類別。

通知

螢幕鎖定通知

Android 5.0 的螢幕鎖定畫面可顯示通知。使用者可以透過「設定」選擇是否允許在安全螢幕鎖定畫面上顯示機密通知內容。

應用程式可以控制在安全螢幕鎖定畫面顯示通知時所需的資料詳細程度。如要控制瀏覽權限層級,請呼叫 setVisibility() 並指定下列其中一個值:

如果瀏覽權限層級為 VISIBILITY_PRIVATE,您也可以提供經過刪除個人詳細資料的通知內容。舉例來說,簡訊應用程式可能會顯示顯示「您有 3 則新簡訊」的通知,但隱藏了訊息內容和發送者。如要提供這類替代通知,請先使用 Notification.Builder 建立替代通知。建立私人通知物件時,請透過 setPublicVersion() 方法將替代通知附加到該物件。

通知中繼資料

Android 5.0 會使用與應用程式通知相關聯的中繼資料,以更聰明的方式排序通知。如要設定中繼資料,請在建構通知時在 Notification.Builder 中呼叫下列方法:

  • setCategory():指示系統如何在裝置處於優先模式時處理應用程式通知 (例如通知表示來電、即時訊息或鬧鐘)。
  • setPriority():將通知標示為比一般通知更重要或更不重要。如果通知的「優先順序」欄位設為 PRIORITY_MAXPRIORITY_HIGH,且通知同時有音效或震動,則通知會顯示在小型浮動視窗中。
  • addPerson():可讓您新增一或多位與通知相關的使用者。您的應用程式可以使用此功能告知系統應將指定使用者的通知歸為一組,或將這些使用者的通知依重要性排序。

圖形

支援 OpenGL ES 3.1

Android 5.0 新增了 Java 介面,並原生支援 OpenGL ES 3.1。OpenGL ES 3.1 提供的主要新功能包括:

  • 運算著色器
  • 個別著色器物件
  • 間接繪圖指令
  • 多重取樣和模板紋理
  • 陰影語言改善
  • 適用於進階混合模式和偵錯的擴充功能
  • 與 OpenGL ES 2.0 和 3.0 的回溯相容性

GLES31 可為 Android 上的 OpenGL ES 3.1 提供 Java 介面。使用 OpenGL ES 3.1 時,請務必使用 <uses-feature> 標記和 android:glEsVersion 屬性,在資訊清單檔案中進行宣告。例如:

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

如要進一步瞭解如何使用 OpenGL ES,包括如何在執行階段檢查裝置支援的 OpenGL ES 版本,請參閱 OpenGL ES API 指南

Android 擴充功能套件

除了 OpenGL ES 3.1 之外,這個版本還提供提供 Java 介面的擴充功能包,以及進階圖形功能的原生支援。Android 會將這些擴充功能視為單一套件。(如果有 ANDROID_extension_pack_es31a 擴充功能,應用程式可以假設套件中的所有擴充功能都存在,並透過單一 #extension 陳述式啟用著色語言功能)。

擴充功能包支援:

  • 保證著色器存放區緩衝區、圖片和原子可支援著色器片段 (在 OpenGL ES 3.1 中,可支援著色器片段)。
  • 平鋪和幾何圖形著色器
  • ASTC (LDR) 紋理壓縮格式
  • 逐樣本插補和陰影
  • 框架緩衝區中每種色彩附件的各種混和模式

擴充功能套件的 Java 介面提供 GLES31Ext。您可以在應用程式資訊清單中宣告,應用程式只能安裝在支援擴充功能包的裝置上。例如:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

媒體

用於進階相機功能的相機 API

Android 5.0 推出了新的 android.hardware.camera2 API,可協助精細的相片拍攝和圖像處理作業。現在,您可以使用 getCameraIdList(),以程式輔助方式存取系統可用的相機裝置,並使用 openCamera() 連線至特定裝置。如要開始擷取圖片,請建立 CameraCaptureSession,並指定 Surface 物件以傳送擷取的圖片。您可以設定 CameraCaptureSession,以連拍單張相片或多張圖片。

如要在擷取新圖片時收到通知,請實作 CameraCaptureSession.CaptureCallback 事件監聽器,並在擷取要求中設定該事件監聽器。現在,當系統完成圖片擷取要求時,您的 CameraCaptureSession.CaptureCallback 事件監聽器會收到對 onCaptureCompleted() 的呼叫,並在 CaptureResult 中提供圖片擷取中繼資料。

CameraCharacteristics 類別可讓應用程式偵測裝置上可用的相機功能。物件的 INFO_SUPPORTED_HARDWARE_LEVEL 屬性代表相機的功能層級。

如要瞭解如何使用更新版 Camera API,請參閱本版本的 Camera2BasicCamera2Video 實作範例。

音訊播放

這個版本包含對 AudioTrack 的下列變更:

  • 您的應用程式現在可以提供浮點格式 (ENCODING_PCM_FLOAT) 的音訊資料。這樣可允許更大的動態範圍、更一致的精確度,以及更大的進步空間。浮點運算特別適合用於中間計算。播放端點針對音訊資料採用整數格式,位元深度較低。(在 Android 5.0 中,部分內部管道尚未開始浮點)。
  • 您的應用程式現在可以以 ByteBuffer 形式提供音訊資料,格式與 MediaCodec 提供的格式相同。
  • WRITE_NON_BLOCKING 選項可簡化某些應用程式的緩衝和多執行緒功能。

媒體播放控制

使用新的通知和媒體 API,確保系統 UI 知道您的媒體播放,並可擷取及顯示專輯封面。使用新的 MediaSessionMediaController 類別,現在可更輕鬆地在 UI 和服務中控制媒體播放。

新的 MediaSession 類別會取代已淘汰的 RemoteControlClient 類別,並提供一組回呼方法,用於處理傳輸控制項和媒體按鈕。如果您的應用程式提供媒體播放功能,且在 Android TVWear 平台上執行,請使用 MediaSession 類別,以相同的回呼方法處理運輸控制項。

您現在可以使用新的 MediaController 類別,自行建構媒體控制器應用程式。這個類別提供可透過執行緒安全方式,從應用程式的 UI 程序監控及控制媒體播放。建立控制器時,請指定 MediaSession.Token 物件,讓應用程式能夠與指定的 MediaSession 互動。您可以使用 MediaController.TransportControls 方法,傳送 play()stop()skipToNext()setRating() 等指令,以便控制該工作階段的媒體播放。您也可以使用控制器註冊 MediaController.Callback 物件來監聽工作階段的中繼資料和狀態變更。

此外,您也可以建立互動式通知,讓播放控制項與媒體工作階段連結,並使用新的 Notification.MediaStyle 類別。

媒體瀏覽

Android 5.0 推出了新的 android.media.browse API,讓應用程式能夠透過此 API 瀏覽其他應用程式的媒體內容資料庫。如要公開應用程式中的媒體內容,請擴充 MediaBrowserService 類別。您實作的 MediaBrowserService 應提供對 MediaSession.Token 的存取權,讓應用程式能夠播放透過服務提供的媒體內容。

如要與媒體瀏覽器服務互動,請使用 MediaBrowser 類別。建立 MediaBrowser 執行個體時,請指定 MediaSession 的元件名稱。應用程式可以使用該瀏覽器執行個體,連線至相關服務,並取得 MediaSession.Token 物件,藉此播放透過該服務公開的內容。

儲存空間

目錄選取

Android 5.0 擴充了儲存空間存取架構,可讓使用者選取整個目錄子樹狀結構,讓應用程式讀取/寫入所有內含的文件,而無需使用者確認每個項目。

如要選取目錄子樹狀結構,請建構並傳送 OPEN_DOCUMENT_TREE 意圖。系統會顯示支援子樹狀結構選取功能的所有 DocumentsProvider 執行個體,讓使用者瀏覽並選取目錄。傳回的 URI 代表對所選子樹的存取權。接著,您可以使用 buildChildDocumentsUriUsingTree()buildDocumentUriUsingTree() 以及 query() 來探索子樹狀結構。

新的 createDocument() 方法可讓您在子樹狀結構的任何位置建立新文件或目錄。如要管理現有文件,請使用 renameDocument()deleteDocument()。請先查看 COLUMN_FLAGS,確認供應商支援這些呼叫,再發出呼叫。

如果您要實作 DocumentsProvider 並支援子樹選取,請實作 isChildDocument(),並在 COLUMN_FLAGS 中加入 FLAG_SUPPORTS_IS_CHILD

Android 5.0 也針對共用儲存空間推出新的套件專屬目錄,讓應用程式可將媒體檔案放入 MediaStore。新的 getExternalMediaDirs() 會傳回所有共用儲存空間裝置上的這些目錄路徑。與 getExternalFilesDir() 類似,應用程式不需要其他權限,就能存取傳回的路徑。平台會定期掃描這些目錄中的新媒體,但您也可以使用 MediaScannerConnection 明確掃描新內容。

無線和連線

多個網路連線

Android 5.0 提供新的多網路 API,可讓應用程式動態掃描具有特定功能的可用網路,並建立連線。如果應用程式需要專用網路 (例如 SUPL、MMS 或電信業者帳單網路),或是您想使用特定類型的傳輸通訊協定傳送資料,這項功能就很實用。

如要透過應用程式動態選取並連線至網路,請按照下列步驟操作:

  1. 建立 ConnectivityManager
  2. 使用 NetworkRequest.Builder 類別建立 NetworkRequest 物件,並指定應用程式感興趣的網路功能和傳輸類型。
  3. 如要掃描適合的網路,請呼叫 requestNetwork()registerNetworkCallback(),並傳入 NetworkRequest 物件和 ConnectivityManager.NetworkCallback 的實作。如果您想在偵測到後主動切換至合適的網路,請使用 requestNetwork() 方法。如果只想在未主動切換的情況下接收掃描網路的通知,請改用 registerNetworkCallback() 方法。

系統偵測到合適的網路時,會連線至網路並叫用 onAvailable() 回呼。您可以使用回呼中的 Network 物件,取得網路的其他資訊,或將流量導向所選網路。

藍牙低功耗

Android 4.3 為核心角色推出了藍牙低功耗 (藍牙 LE) 的平台支援。在 Android 5.0 中,Android 裝置現在可以充當藍牙 LE 周邊裝置。應用程式可使用這項功能,向附近裝置宣告自己的存在。舉例來說,您可以建構應用程式,讓裝置可做為計步器或健康監測器,並與其他藍牙低功耗裝置通訊資料。

新的 android.bluetooth.le API 可讓應用程式廣播廣告、掃描回應,以及與附近的藍牙 LE 裝置建立連線。如要使用新的廣告和掃描功能,請在資訊清單中新增 BLUETOOTH_ADMIN 權限。使用者從 Play 商店更新或下載應用程式時,系統會要求使用者為應用程式授予下列權限:「藍牙連線資訊:允許應用程式控制藍牙,包括對附近的藍牙裝置廣播或取得相關資訊」。

如要開始藍牙 LE 廣告,讓其他裝置可探索您的應用程式,請呼叫 startAdvertising(),並傳入 AdvertiseCallback 類別的實作項目。回呼物件會收到廣告作業成功或失敗的報表。

Android 5.0 導入了 ScanFilter 類別,讓應用程式只能掃描感興趣的裝置類型。如要開始掃描藍牙 LE 裝置,請呼叫 startScan() 並傳遞篩選器清單。在方法呼叫中,您也必須提供 ScanCallback 的實作,以在偵測到藍牙 LE 通告時回報。

NFC 強化功能

Android 5.0 新增了下列強化功能,讓 NFC 的使用方式更廣泛且更靈活:

  • 「分享」選單現在可以使用 Android Beam。
  • 應用程式可呼叫 invokeBeam(),在使用者的裝置上叫用 Android Beam 以便共用資料。這樣一來,使用者就不必手動將裝置與其他支援 NFC 的裝置輕觸,才能完成資料傳輸。
  • 您可以使用新的 createTextRecord() 方法,建立包含 UTF-8 文字資料的 NDEF 記錄。
  • 如果您正在開發付款應用程式,現在可以呼叫 registerAidsForService(),以動態方式註冊 NFC 應用程式 ID (AID)。您也可以使用 setPreferredService() 來設定特定活動在前景運作時偏好的卡片模擬服務。

Volta 專案

除了新功能之外,Android 5.0 也強調電池續航力的改善。使用新的 API 和工具,瞭解並改善應用程式的耗電量。

排定工作

Android 5.0 提供新的 JobScheduler API,可讓您定義系統在稍後時間或特定情況下 (例如裝置充電時) 以非同步方式執行的工作,藉此提升電池續航力。工作排程功能適用於下列情況:

  • 應用程式有使用者以外的作業,您可以延後。
  • 應用程式會在裝置接上電源時執行你偏好的作業。
  • 應用程式有需要網路存取權或 Wi-Fi 連線才能執行的工作。
  • 應用程式有許多工作,您希望以定期排程的方式批次執行。

工作單元會由 JobInfo 物件封裝。這個物件會指定排程條件。

請使用 JobInfo.Builder 類別來設定排程工作應以何種方式執行。您可以安排工作在特定條件下執行,例如:

  • 在裝置充電時啟動
  • 在裝置連線至非計量付費網路時啟動
  • 在裝置閒置時啟動
  • 請在指定期限前看完,或至少延遲

舉例來說,您可以新增像這樣的程式碼,在非計量付費網路上執行工作:

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

如果裝置電力穩定 (也就是已插上電源超過 2 分鐘,且電池電量達到健康水準),系統會執行任何已準備就緒的排定工作,即使工作期限尚未到期也一樣。

如要查看 JobScheduler API 的使用範例,請參閱此版本中的 JobSchedulerSample 實作範例。

電池用量的開發人員工具

新的 dumpsys batterystats 指令會根據裝置專屬 ID (UID) 整理裝置電池用量的相關統計資料。統計資料包括:

  • 電池相關事件記錄
  • 裝置的全域統計資料
  • 每個 UID 和系統元件的概略耗電量
  • 每個封包的每個應用程式行動毫秒數
  • 系統 UID 匯總統計資料
  • 應用程式 UID 匯總統計資料

使用 --help 選項瞭解各種可自訂輸出的選項。舉例來說,如要列印自裝置上次充電後,指定應用程式套件的電池用量統計資料,請執行下列指令:

$ adb shell dumpsys batterystats --charged <package-name>

您可以在 dumpsys 指令的輸出內容上使用 Battery Historian 工具,從記錄產生電力相關事件的 HTML 視覺化圖表。這些資訊有助於輕鬆瞭解及診斷任何電池相關問題。

在工作場所和教育環境中使用 Android

受管理的佈建作業

Android 5.0 提供全新功能,可在企業環境中執行應用程式。如果使用者已有個人帳戶,裝置管理員可以啟動受管理的佈建程序,以便在裝置上新增共同的受管理設定檔,與受管理設定檔相關聯的應用程式會在使用者的啟動器、最近使用的畫面和通知中,顯示在未受管理的應用程式旁邊。

如要啟動代管佈建程序,請在 Intent 中傳送 ACTION_PROVISION_MANAGED_PROFILE。如果呼叫成功,系統會觸發 onProfileProvisioningComplete() 回呼。接著,您可以呼叫 setProfileEnabled() 以啟用這個受管理的設定檔。

根據預設,受管理的設定檔只會啟用一小部分的應用程式。您可以呼叫 enableSystemApp(),在受管理的設定檔中安裝其他應用程式。

如果您開發的是啟動器應用程式,可以使用新的 LauncherApps 類別取得目前使用者與任何相關聯的受管理設定檔的可啟動活動清單。啟動器可以將工作徽章附加至圖示可繪項目,讓管理的應用程式在視覺上更醒目。如要擷取徽章圖示,請呼叫 getUserBadgedIcon()

如要瞭解如何使用這項新功能,請參閱本版本中的 BasicManagedProfile 實作範例。

裝置擁有者

Android 5.0 推出了部署裝置擁有者應用程式的功能。「裝置擁有者」是一種特殊的裝置管理員,能夠建立和移除次要使用者,以及在裝置上調整全域設定。裝置擁有者應用程式可以使用 DevicePolicyManager 類別的方法,精細控管受管理裝置上的設定、安全性和應用程式。裝置一次只能有一位有效的裝置擁有者。

如要部署及啟用裝置擁有者,您必須在裝置處於未佈建狀態時,從程式設計應用程式執行 NFC 資料傳輸作業。這項資料移轉作業所傳送的資訊與代管佈建中所述的佈建意圖相同。

螢幕固定

Android 5.0 推出了新的螢幕固定 API,可讓您暫時禁止使用者離開工作或受到通知幹擾。舉例來說,如果您開發的教育應用程式可支援 Android 的高風險評估要求,或是單一用途/資訊站應用程式,就能使用此機制。應用程式啟用螢幕固定功能後,使用者必須等到應用程式退出該模式,才能查看通知、存取其他應用程式或返回主畫面。

啟用螢幕固定功能的方法有兩種:

  • 手動:使用者可以依序前往「設定」>「安全性」>「螢幕固定」啟用螢幕固定功能,並在最近使用畫面中輕觸綠色圖釘圖示,選取要固定的工作。
  • 透過程式輔助方式:如要透過程式輔助方式啟用螢幕固定功能,請從應用程式中呼叫 startLockTask()。如果提出要求的應用程式不是裝置擁有者,系統會提示使用者進行確認。裝置擁有者應用程式可以呼叫 setLockTaskPackages() 方法,讓使用者不需確認步驟即可固定應用程式。

啟用工作鎖定功能後,會發生下列行為:

  • 狀態列為空白,且使用者通知和狀態資訊已隱藏。
  • 隱藏「Home」和「最近使用的應用程式」按鈕。
  • 其他應用程式無法啟動新活動。
  • 目前的應用程式可以啟動新活動,前提是這麼做不會建立新工作。
  • 裝置擁有者叫用螢幕固定時,使用者會保持鎖定狀態,直到應用程式呼叫 stopLockTask() 為止。
  • 如果螢幕固定功能是由非裝置擁有者的其他應用程式啟用,或由使用者直接啟用,使用者可以同時按住「返回」和「近期」按鈕來退出。

列印架構

將 PDF 轉譯為點陣圖

您現在可以使用新的 PdfRenderer 類別,將 PDF 文件頁面轉譯為可供列印的點陣圖。您必須指定可尋找的 ParcelFileDescriptor (也就是可隨機存取的內容),系統會在該 ParcelFileDescriptor 上寫入可列印的內容。應用程式可以使用 openPage() 取得轉譯頁面,然後呼叫 render(),將開啟的 PdfRenderer.Page 轉換為點陣圖。如果您只想將文件的部分內容轉換為位圖圖片 (例如實作平鋪算繪以放大文件),也可以設定其他參數。

如需使用新 API 的範例,請參閱 PdfRendererBasic 範例。

系統

應用程式使用統計資料

您現在可以使用新的 android.app.usage API 存取 Android 裝置上的應用程式使用記錄。與已淘汰的 getRecentTasks() 方法相比,這個 API 可提供更詳細的使用資訊。如要使用這個 API,您必須先在資訊清單中宣告 "android.permission.PACKAGE_USAGE_STATS" 權限。使用者也必須透過「設定」>「安全性」>「應用程式」,為此應用程式啟用使用權限。

系統會依應用程式收集使用資料,並匯總每日、每週、每月和每年的資料。系統保留這類資料的時間上限如下:

  • 每日資料:7 天
  • 每週資料:4 週
  • 每月資料:6 個月
  • 每年資料:2 年

系統會記錄每個應用程式的下列資料:

  • 上次使用應用程式的時間
  • 在該時間間隔 (天、週、月或年) 內,應用程式在前景運作的總時間長度
  • 擷取時間戳記,以擷取元件 (透過套件和活動名稱識別) 在一天內移至前景或背景的時間
  • 擷取裝置設定變更時間的時間戳記 (例如裝置螢幕方向因旋轉而變更)

測試與無障礙功能

改善測試和無障礙功能

Android 5.0 新增了以下測試和無障礙功能支援:

  • 新的 getWindowAnimationFrameStats()getWindowContentFrameStats() 方法會擷取視窗動畫和內容的影格統計資料。這些方法可讓您編寫檢測工具測試,評估應用程式是否以足夠的刷新頻率算繪影格,以提供順暢的使用者體驗。
  • 新的 executeShellCommand() 方法可讓您透過檢測設備測試執行殼層指令。指令執行程序與在已連線至裝置的主機中執行 adb shell 類似,可讓您使用 dumpsysamcontentpm 等殼層工具。
  • 使用無障礙 API (例如 UiAutomator) 的無障礙服務和測試工具,現在可以擷取有關螢幕上視障者可互動的視窗屬性的詳細資訊。如要擷取 AccessibilityWindowInfo 物件清單,請呼叫新的 getWindows() 方法。
  • 新的 AccessibilityNodeInfo.AccessibilityAction 類別可讓您定義要在 AccessibilityNodeInfo 中執行的標準或自訂動作。新的 AccessibilityNodeInfo.AccessibilityAction 類別會取代先前在 AccessibilityNodeInfo 中找到的動作相關 API。
  • Android 5.0 可讓您更精細地控管應用程式中的文字轉語音合成功能。新的 Voice 類別可讓應用程式使用與特定語言代碼、品質和延遲評分,以及文字轉語音引擎專屬參數相關聯的語音設定檔。

輸入法編輯器

輕鬆切換輸入語言

從 Android 5.0 開始,使用者可以更輕鬆地切換平台支援的所有輸入法編輯器 (IME)。執行指定的切換動作 (通常是輕觸軟體鍵盤上的地球圖示) 後,系統會循環切換所有這類 IME。這項行為變更是由 shouldOfferSwitchingToNextInputMethod() 方法實作。

此外,架構現在會檢查下一個 IME 是否包含切換機制 (因此,該 IME 是否支援在 IME 後切換至輸入法編輯器)。具有切換機制的 IME 不會循環到沒有切換機制的 IME。這項行為變更是由 switchToNextInputMethod() 方法實作。

如要查看如何使用更新版 IME 切換 API 的範例,請參閱此版本中更新過的螢幕鍵盤實作範例。如要進一步瞭解如何實作 IME 切換機制,請參閱「建立輸入法」。

資訊清單宣告

可宣告的必要功能

<uses-feature> 元素現在支援下列值,因此可確保應用程式只安裝在提供應用程式所需功能的裝置上。

使用者權限

<uses-permission> 元素現在支援下列權限,可宣告應用程式存取特定 API 所需的權限。

  • BIND_DREAM_SERVICE:如果指定 API 級別 21 以上級別,Daydream 服務就會需要這項權限,以確保只有系統可繫結至 API 級別。