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,同時支援舊版,方法是在程式碼中加入條件,在執行 minSdkVersion 不支援的 API 之前,先檢查系統 API 級別。如要進一步瞭解如何維持回溯相容性,請參閱「支援不同的平台版本」。
如要進一步瞭解 API 級別的運作方式,請參閱「什麼是 API 級別?」一文。
重要行為變更
如果您先前曾發布 Android 應用程式,請注意,您的應用程式可能會受到 Android 5.0 變更的影響。
如需完整資訊,請參閱「Android 5.0 異動」。
使用者介面
Material Design 支援
Android 5.0 新增對 Android 全新 Material Design 樣式的支援。您可以使用 Material Design 建立應用程式,讓應用程式具有動態視覺效果,以及讓使用者感到自然的 UI 元素轉換。這項支援包括:
- Material 主題
- 查看陰影
RecyclerView小工具- 可繪項目動畫和樣式效果
- Material Design 動畫和活動轉場效果
- 根據檢視畫面狀態,為檢視畫面屬性建立動畫
- 可自訂的 UI 小工具和應用程式列,並可控制調色盤
- 以 XML 向量圖形為基礎的動畫和非動畫可繪項目
如要進一步瞭解如何為應用程式新增 Material Design 功能,請參閱「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 類別,可讓應用程式透過 getUserMedia() 等 Web API 授予 WebView 權限,以存取相機和麥克風等受保護的資源。應用程式必須具備這些資源的適當 Android 權限,才能將權限授予 WebView。
有了新的 onShowFileChooser() 方法,您現在可以在 WebView 中使用輸入表單欄位,並啟動檔案選擇器,從 Android 裝置選取圖片和檔案。
此外,這個版本也支援 WebAudio、WebGL 和 WebRTC 開放標準。如要進一步瞭解這個版本的新功能,請參閱「Android 適用的 WebView」。
螢幕畫面擷取與共享功能
Android 5.0 可讓您使用新的 android.media.projection API,在應用程式中加入螢幕畫面擷取和分享螢幕畫面功能。舉例來說,如果您想在視訊會議應用程式中啟用分享螢幕畫面功能,這項功能就非常實用。
新的 createVirtualDisplay() 方法可讓應用程式將主畫面 (預設螢幕) 的內容擷取到 Surface 物件中,然後透過網路傳送。這個 API 只能擷取非安全螢幕內容,無法擷取系統音訊。如要開始螢幕畫面擷取,應用程式必須先使用透過 createScreenCaptureIntent() 方法取得的 Intent 啟動螢幕畫面擷取對話方塊,要求使用者授予權限。
如需新 API 的使用範例,請參閱範例專案中的 MediaProjectionDemo 類別。
通知
螢幕鎖定通知
Android 5.0 的螢幕鎖定畫面可以顯示通知。使用者可以透過「設定」選擇是否允許在安全螢幕鎖定畫面上顯示敏感通知內容。
應用程式可以控制在安全螢幕鎖定畫面上顯示通知時,要顯示的詳細程度。如要控制顯示層級,請呼叫 setVisibility() 並指定下列其中一個值:
VISIBILITY_PRIVATE:顯示基本資訊 (例如通知圖示),但隱藏通知的完整內容。VISIBILITY_PUBLIC:顯示通知的完整內容。VISIBILITY_SECRET:不顯示任何內容,甚至不顯示通知圖示。
當顯示層級為 VISIBILITY_PRIVATE 時,您也可以提供經過修訂的通知內容版本,隱藏個人詳細資料。舉例來說,訊息應用程式可能會顯示「您有 3 則新簡訊」的通知,但隱藏訊息內容和寄件者。如要提供這項替代通知,請先使用 Notification.Builder 建立替代通知。建立私人通知物件時,請透過 setPublicVersion() 方法附加替代通知。
通知中繼資料
Android 5.0 會使用與應用程式通知相關聯的中繼資料,以更聰明的方式排序通知。如要設定中繼資料,請在建構通知時呼叫 Notification.Builder 中的下列方法:
setCategory():告知系統當裝置處於優先模式時,如何處理應用程式通知 (例如,通知代表來電、即時訊息或鬧鐘)。setPriority():將通知標示為比一般通知更重要或更不重要。如果通知的優先順序欄位設為PRIORITY_MAX或PRIORITY_HIGH,且通知同時有音效或震動,則會顯示在小型浮動視窗中。addPerson():可新增一或多位與通知相關的使用者。應用程式可利用這項功能,向系統發出信號,要求系統將指定使用者的通知分組,或將這些使用者的通知列為更重要的通知。
圖形
支援 OpenGL ES 3.1
Android 5.0 新增 Java 介面和 OpenGL ES 3.1 原生支援。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 陳述式啟用著色語言功能)。
擴充套件支援:
- 著色器儲存緩衝區、圖片和原子作業所需的片段著色器支援 (OpenGL ES 3.1 中可選擇是否支援片段著色器)。
- 曲面細分和幾何著色器
- 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 屬性代表相機的功能等級。
- 所有裝置都至少支援
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY硬體等級,其功能大致相當於已淘汰的CameraAPI。 - 支援
INFO_SUPPORTED_HARDWARE_LEVEL_FULL硬體層級的裝置可手動控制擷取和後製處理,並以高影格率擷取高解析度圖片。
如要瞭解如何使用更新後的 Camera API,請參閱這個版本中的 Camera2Basic 和 Camera2Video 實作範例。
音訊播放
這個版本包含下列 AudioTrack 變更:
- 應用程式現在可以提供浮點格式 (
ENCODING_PCM_FLOAT) 的音訊資料。這樣一來,動態範圍會更大、精確度更一致,且餘裕空間更大。浮點運算在中間計算時特別有用。播放端點會使用整數格式處理音訊資料,且位元深度較低。(在 Android 5.0 中,部分內部管道尚未採用浮點)。 - 應用程式現在可以提供
ByteBuffer格式的音訊資料,格式與MediaCodec提供的格式相同。 WRITE_NON_BLOCKING選項可簡化某些應用程式的緩衝和多執行緒作業。
媒體播放控制項
使用新的通知和媒體 API,確保系統 UI 知道媒體播放,並可擷取及顯示專輯封面。現在,您可以使用新的 MediaSession 和 MediaController 類別,更輕鬆地控制 UI 和服務中的媒體播放。
新的 MediaSession 類別會取代已淘汰的 RemoteControlClient 類別,並提供一組回呼方法,用於處理傳輸控制項和媒體按鈕。如果應用程式提供媒體播放功能,且在 Android TV 或 Wear 平台上執行,請使用 MediaSession 類別,透過相同的回呼方法處理傳輸控制項。
您現在可以使用新的 MediaController 類別建構自己的媒體控制器應用程式。這個類別提供執行緒安全的方法,可從應用程式的 UI 程序監控及控制媒體播放。建立控制器時,請指定 MediaSession.Token 物件,讓應用程式與指定的 MediaSession 互動。使用 MediaController.TransportControls 方法,即可傳送 play()、stop()、skipToNext() 和 setRating() 等指令,控制該工作階段的媒體播放。您也可以使用控制器註冊 MediaController.Callback 物件,監聽工作階段的中繼資料和狀態變更。
此外,您也可以建立豐富的通知,透過新的 Notification.MediaStyle 類別,控制與媒體工作階段相關聯的播放控制項。
媒體瀏覽
Android 5.0 推出新功能,讓應用程式能透過新的 android.media.browse 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 或電信代扣網路),或您想使用特定類型的傳輸通訊協定傳送資料,這項功能就非常實用。
如要從應用程式中動態選取並連線至網路,請按照下列步驟操作:
- 建立
ConnectivityManager。 - 使用
NetworkRequest.Builder類別建立NetworkRequest物件,並指定應用程式感興趣的網路功能和傳輸類型。 - 如要掃描合適的網路,請呼叫
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 advertising,讓其他裝置可以探索您的應用程式,請呼叫 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(),設定特定活動在前景執行時,應使用的偏好卡片模擬服務。
Project 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 視覺化圖表。這項資訊可協助你瞭解及診斷任何電池相關問題。
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()方法,讓應用程式可固定,而不需使用者確認步驟。
啟用工作鎖定功能後,會發生下列行為:
- 狀態列會留空,使用者通知和狀態資訊則會隱藏。
- 「主畫面」和「最近使用的應用程式」按鈕會隱藏。
- 其他應用程式無法啟動新活動。
- 目前的應用程式可以啟動新活動,只要不建立新任務即可。
- 當裝置擁有者叫用螢幕固定功能時,使用者會持續鎖定在您的應用程式,直到應用程式呼叫
stopLockTask()為止。 - 如果螢幕固定功能是由非裝置擁有者的其他應用程式啟用,或由使用者直接啟用,使用者可以同時按住「返回」和「最近」按鈕來退出。
列印架構
將 PDF 轉譯為點陣圖
您現在可以使用新的 PdfRenderer 類別,將 PDF 文件頁面轉譯為點陣圖圖片,以便列印。您必須指定可搜尋的 ParcelFileDescriptor (也就是可隨機存取內容),系統會在其中寫入可列印的內容。應用程式可以使用 openPage() 取得要轉譯的頁面,然後呼叫 render(),將開啟的 PdfRenderer.Page 轉換為點陣圖。如果只想將文件的一部分轉換為點陣圖圖片 (例如實作圖塊算繪以放大文件),也可以設定其他參數。
如需新 API 的使用範例,請參閱 PdfRendererBasic 範例。
系統
應用程式使用統計資料
您現在可以使用新的 android.app.usage API,在 Android 裝置上存取應用程式使用記錄。與已淘汰的 getRecentTasks() 方法相比,這個 API 提供的用量資訊更詳細。如要使用這個 API,您必須先在資訊清單中宣告 "android.permission.PACKAGE_USAGE_STATS" 權限。使用者也必須依序前往「Settings」>「Security」>「Apps」,為這個應用程式啟用使用存取權。
系統會依應用程式收集使用資料,並按日、週、月和年匯總資料。系統保留這類資料的時間長度上限如下:
- 每日資料:7 天
- 每週資料:4 週
- 每月資料:6 個月
- 年度資料:2 年
系統會記錄每個應用程式的下列資料:
- 上次使用應用程式的時間
- 在該時間間隔內 (按日、週、月或年),應用程式在前景運作的總時間長度
- 時間戳記,擷取元件 (由套件和活動名稱識別) 在一天內移至前景或背景的時間
- 裝置設定變更時的時間戳記 (例如裝置因旋轉而變更螢幕方向)
測試與無障礙功能
測試和無障礙功能改善
Android 5.0 新增下列測試和無障礙功能支援:
- 新的
getWindowAnimationFrameStats()和getWindowContentFrameStats()方法會擷取視窗動畫和內容的影格統計資料。這些方法可讓您編寫檢測設備測試,評估應用程式是否以足夠的更新頻率算繪影格,提供流暢的使用者體驗。 - 新的
executeShellCommand()方法可讓您從檢測設備測試執行殼層指令。指令執行方式與從連線至裝置的主機執行adb shell類似,可讓您使用dumpsys、am、content和pm等殼層工具。 - 無障礙服務和測試工具使用 Accessibility API (例如
UiAutomator),現在可以擷取螢幕上視窗屬性的詳細資訊,讓視障使用者可以互動。如要擷取AccessibilityWindowInfo物件清單,請呼叫新的getWindows()方法。 - 您可以使用新的
AccessibilityNodeInfo.AccessibilityAction類別,定義要在AccessibilityNodeInfo上執行的標準或自訂動作。新的AccessibilityNodeInfo.AccessibilityAction類別會取代先前在AccessibilityNodeInfo中找到的動作相關 API。 - Android 5.0 可讓您更精細地控管應用程式中的文字轉語音合成功能。新的
Voice類別可讓應用程式使用與特定語言代碼、品質和延遲評分,以及文字轉語音引擎專屬參數相關聯的語音設定檔。
輸入法編輯器
更輕鬆地切換輸入語言
從 Android 5.0 開始,使用者可以切換平台支援的所有輸入法編輯器 (IME)。執行指定的切換動作 (通常是輕觸螢幕鍵盤上的地球圖示),即可循環切換所有這類 IME。這項行為變更是透過 shouldOfferSwitchingToNextInputMethod() 方法實作。
此外,架構現在會檢查下一個 IME 是否包含切換機制 (因此,該 IME 是否支援切換至其後的 IME)。具有切換機制的輸入法編輯器不會循環至沒有切換機制的輸入法編輯器。這項行為變更由 switchToNextInputMethod() 方法實作。
如要查看如何使用更新後的 IME 切換 API,請參閱本版本中更新後的軟鍵盤實作範例。如要進一步瞭解如何實作 IME 切換機制,請參閱「建立輸入法」。
資訊清單宣告
可聲明的必要功能
<uses-feature> 元素現在支援下列值,因此您可以確保應用程式只會安裝在提供應用程式所需功能的裝置上。
FEATURE_AUDIO_OUTPUTFEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSINGFEATURE_CAMERA_CAPABILITY_MANUAL_SENSORFEATURE_CAMERA_CAPABILITY_RAWFEATURE_CAMERA_LEVEL_FULLFEATURE_GAMEPADFEATURE_LIVE_TVFEATURE_MANAGED_USERSFEATURE_LEANBACKFEATURE_OPENGLES_EXTENSION_PACKFEATURE_SECURELY_REMOVES_USERSFEATURE_SENSOR_AMBIENT_TEMPERATUREFEATURE_SENSOR_HEART_RATE_ECGFEATURE_SENSOR_RELATIVE_HUMIDITYFEATURE_VERIFIED_BOOTFEATURE_WEBVIEW
使用者權限
<uses-permission> 元素現在支援下列權限,可宣告應用程式存取特定 API 所需的權限。
BIND_DREAM_SERVICE:指定 API 級別 21 以上時,Daydream 服務需要這項權限,確保只有系統可以繫結至該服務。