Android 5.0 API

API 級別:21

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

如果您有已發布的應用程式,請務必查看應在應用程式中說明的 Android 5.0 行為變更。這些行為變更可能會影響 Android 5.0 裝置上的應用程式,即使您未使用新的 API 或指定新功能也一樣。

如要概略瞭解新平台功能,請改為參閱 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 級別,然後再執行 minSdkVersion 不支援的 API。如要進一步瞭解如何維持回溯相容性,請參閱「支援不同的平台版本」。

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

重要行為異動

如果您先前曾發布過 Android 應用程式,請注意,您的應用程式可能會因為 Android 5.0 的異動而受到影響。

如需完整資訊,請參閱 Android 5.0 變更

使用者介面

Material Design 支援

Android 5.0 開始支援 Android 新的質感設計樣式。您可以建立質感設計、視覺化設計且會讓使用者自然流暢的 UI 元素轉換應用程式。這項支援包括:

  • Material Design 主題
  • 查看陰影
  • 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 類別,可讓應用程式透過 Web 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 版新增支援 OpenGL ES 3.1 的 Java 介面和原生支援。OpenGL ES 3.1 提供的主要新功能包括:

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

Android 上的 OpenGL ES 3.1 適用的 Java 介面提供 GLES31。使用 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 陳述式啟用陰影語言功能)。

擴充功能包支援:

  • 保證對著色器儲存空間緩衝區、圖片和 atomics 的片段著色器支援 (在 OpenGL ES 3.1 中,您可以選擇是否支援 Fragment 著色器)。
  • 球場和幾何著色器
  • ASTC (LDR) 紋理壓縮格式
  • 每取樣一次的內插和陰影
  • 影格緩衝區中每個顏色附件的不同混合模式

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

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

媒體

適用於進階相機功能的 Camera 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 中,部分內部管道並未處於浮點值)。
  • 應用程式現在可以按照 MediaCodec 提供的格式,以 ByteBuffer 的形式提供音訊資料。
  • 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.瀏覽 API,可讓應用程式瀏覽其他應用程式的媒體內容程式庫。如要在應用程式中公開媒體內容,請擴充 MediaBrowserService 類別。實作 MediaBrowserService 應提供 MediaSession.Token 的存取權,讓應用程式可以播放透過您的服務提供的媒體內容。

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

儲存空間

選取目錄

Android 5.0 擴充了 Storage Access Framework,讓使用者能夠選取整個目錄子目錄,授予應用程式所有內含文件的讀取/寫入權限,而不需要使用者確認每個項目。

如要選取目錄子目錄,請建構並傳送 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 週邊裝置使用。應用程式可利用此功能讓鄰近裝置知道其是否存在。例如,您可以建構應用程式,讓裝置可做為計步器或健康監控器使用,並與其他藍牙 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 的使用方式更廣泛、更靈活:

  • 「share」選單現已支援 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>

您可以使用 Battery Historian 工具對 dumpsys 指令的輸出內容,從記錄產生電力相關事件的 HTML 視覺化內容。這些資訊可讓您更容易瞭解和診斷任何電池相關問題。

在 Workplace 和 Education 中使用 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 高風險評估需求的教育應用程式,或是單一用途或資訊站應用程式,就可以使用上述 API。應用程式啟用螢幕固定功能後,除非應用程式退出模式,否則使用者無法查看通知、存取其他應用程式或返回主畫面。

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

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

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

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

列印架構

以點陣圖呈現 PDF

您現在可以使用新的 PdfRenderer 類別,將 PDF 文件頁面算繪為點陣圖圖片進行列印。您必須指定可搜尋的 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 不會循環切換至沒有這種機制的輸入法編輯器。此行為變更是由 switchToNextInputMethod() 方法實作。

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

資訊清單聲明

需要宣告的必要功能

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

使用者權限

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

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