API 級別:21
Android 5.0 (LOLLIPOP) 為用戶和應用開發(fā)者提供了新的功能。本文檔介紹了最值得注意的新 API。
有關新平臺功能的扼要介紹,另請參閱Android Lollipop 集錦。
要構建 Android 5.0 版應用,您必須先下載 Android SDK,然后使用SDK 管理器下載 Android 5.0 SDK 平臺和系統(tǒng)映像。
要進一步針對運行 Android 5.0 的設備優(yōu)化您的應用,請將targetSdkVersion設置為"21",在 Android 5.0 系統(tǒng)映像上安裝該應用并予以測試,然后將更改后的新版應用發(fā)布出去。
您既可以使用 5.0 API,也可以支持舊版本,方法是在代碼中構建條件,確保先檢查系統(tǒng) API 級別再執(zhí)行minSdkVersion不支持的 API。要詳細了解有關保持向后兼容的信息,請參閱支持不同平臺版本。
要詳細了解有關各個 API 級別運行方式的信息,請參閱什么是 API 級別?
請注意,如果您之前發(fā)布了 Android 版應用,那么您的應用可能會受到 Android 5.0 變化的影響。
如果您尚未針對新的 Android 運行時 (ART) 測試您的應用…
第 4.4 版引入了一個全新的實驗性功能,即 Android 運行時 (ART)。在第 4.4 版中,ART 是可選的,默認運行時仍為 Dalvik。對于 Android 5.0,默認運行時現(xiàn)在是 ART。
有關 ART 新功能的概述,請參閱ART 簡介。主要包括下面的一些新功能:
預先 (AOT) 編譯
經(jīng)過改進的垃圾回收 (GC)
經(jīng)過改進的調試支持
大多數(shù) Android 應用應該不用做出任何更改即可直接在 ART 下運行。不過,Dalvik 上運行的部分技術在 ART 上無法運行。要了解最重要的問題,請參閱在 Android 運行時 (ART) 上驗證應用行為。請?zhí)貏e注意以下情況:
您的應用使用 Java 原生接口 (JNI) 運行 C/C++ 代碼。
您使用的開發(fā)工具可生成非標準代碼(例如某些混淆代碼)。
您使用的技術與垃圾回收壓縮不兼容。(雖然 ART 當前沒有實施垃圾回收壓縮,但在 Android 開放源代碼項目中,垃圾回收壓縮正處于開發(fā)階段)。
請確保您的通知能夠反映出 Android 5.0 的這些變化。要詳細了解如何設計適用于 Android 5.0 及更高版本的通知,請參閱通知設計指南。
通知是在白色(或顏色非常淺的)背景上繪制的深色文本,以便與新的 Material Design 設計小部件協(xié)調一致。請確保所有通知在新的配色方案下都能夠正常顯示。如果通知無法正常顯示,請予以修復:
使用setColor()在圖標圖片后面的圓圈中設置一種強調色彩。
更新或移除有顏色的資源。系統(tǒng)會忽略操作圖標和主通知圖標中的所有非 Alpha 通道。您應當假定這些圖標僅包含 Alpha 通道。系統(tǒng)會用白色來繪制通知圖標,而用深灰色來繪制操作圖標。
如果您當前在使用Ringtone、MediaPlayer或Vibrator類為通知添加聲音和振動,請移除該代碼,這樣系統(tǒng)才能以優(yōu)先模式正常呈現(xiàn)通知。若要添加聲音和振動,請改用Notification.Builder方法。
將設備設置為RINGER_MODE_SILENT會導致它進入新的優(yōu)先模式。如果將設備設置為RINGER_MODE_NORMAL或RINGER_MODE_VIBRATE,則會使其退出優(yōu)先模式。
以前,Android 將STREAM_MUSIC用作主音量流,以此來控制平板電腦設備的音量。在 Android 5.0 中,手機和平板電腦設備的主音量流現(xiàn)已統(tǒng)一,均由STREAM_RING或STREAM_NOTIFICATION控制。
在 Android 5.0 中,通知現(xiàn)在默認顯示在用戶的鎖定屏幕上。用戶可以選擇不公開敏感信息,這樣的話系統(tǒng)會自動修改通知顯示文本。要自定義這種經(jīng)過修改的通知,請使用setPublicVersion()。
如果通知不包含個人信息,或者您希望在通知中顯示媒體播放控件,請調用setVisibility()方法,并將通知的公開程度的級別設置為VISIBILITY_PUBLIC。
如果您要實施可呈現(xiàn)媒體播放狀態(tài)或傳輸控件的通知,請考慮使用新的Notification.MediaStyle模板,而不是自定義RemoteViews.RemoteView對象。無論您選擇使用哪種方法,請務必將通知的公開程度設置為VISIBILITY_PUBLIC,以便用戶可以在鎖定屏幕中使用您的控件。請注意,從 Android 5.0 開始,系統(tǒng)不再在鎖定屏幕中顯示RemoteControlClient對象。有關詳情,請參閱如果您的應用使用 RemoteControlClient。
現(xiàn)在,當設備處于活動狀態(tài)(即設備未鎖定且屏幕亮起)時,通知可以顯示在小型浮動窗口中(也稱為提醒通知)。此類通知采用的顯示形式與緊湊型通知采用的形式類似,不同的是提醒通知還會顯示操作按鈕。用戶無需退出當前應用,即可根據(jù)提醒通知執(zhí)行操作或關閉提醒通知。
可以觸發(fā)提醒通知的情景示例包括:
用戶在全屏模式下執(zhí)行操作(應用使用fullScreenIntent)
通知的優(yōu)先級較高,并且使用鈴聲或振動
如果您的應用在上述任意一種情景下實施通知,請確保提醒通知能夠正常呈現(xiàn)。
RemoteControlClient類現(xiàn)已被棄用。請盡快改用全新的MediaSessionAPI。
對于MediaSession或RemoteControlClient,Android 5.0 中的鎖定屏幕不會顯示傳輸控件。相反,您的應用可以通過通知在鎖定屏幕中提供媒體播放控件。這樣,您的應用就能夠更好地控制媒體按鈕的展現(xiàn)方式,同時還能讓用戶無論在設備處于鎖定還是解鎖狀態(tài)下都可以執(zhí)行同樣的操作。
為此,Android 5.0 引入了一個新的Notification.MediaStyle模板。Notification.MediaStyle將您通過Notification.Builder.addAction()添加的通知操作轉換到在您應用的媒體播放通知中內嵌的緊湊型按鈕中。將會話令牌傳遞到setSession()方法,指示系統(tǒng)此通知控制正在進行的媒體會話。
請務必將通知的公開程度設置為VISIBILITY_PUBLIC,將通知標為安全通知,以便在任何鎖定屏幕(安全屏幕或其他屏幕)上顯示。有關詳情,請參閱在鎖定屏幕上顯示通知。
如果您的應用是在 AndroidTV或Wear平臺上運行,請通過實施MediaSession類來顯示媒體播放控件。如果您的應用需要在 Android 設備上接收媒體按鈕事件,您還應當實施MediaSession。
由于 Android 5.0 中引入了并行文檔和活動任務這一新功能(請參閱下文中的“最近用過”屏幕中的并行文檔和活動),ActivityManager.getRecentTasks()方法現(xiàn)已被棄用,以更好地保護用戶隱私。為了實現(xiàn)向后兼容性,此方法仍會返回它的一小部分數(shù)據(jù),包括調用應用自身的任務,同時還可能包括其他一些非敏感任務(例如“首頁”)。如果您的應用在使用此方法檢索它自身的任務,請改用getAppTasks()檢索該信息。
如果您使用的是 Android 原生開發(fā)工具包 (NDK)…
Android 5.0 支持 64 位系統(tǒng)。64 位增強功能增加了尋址空間并提高了性能,同時仍能全面支持現(xiàn)有的 32 位應用。64 位支持還提高了 OpenSSL 的加密性能。另外,此版本還引入了新的原生媒體 NDK API 以及原生 OpenGL ES (GLES) 3.1 支持。
要利用 Android 5.0 中提供的 64 位支持,請從Android NDK 頁面下載并安裝 NDK 10c 版。要詳細了解 NDK 的重要變化和錯誤修復,請參閱 10c 版版本說明。
Context.bindService()方法現(xiàn)在要求獲取顯式Intent;如果獲取的是隱式 intent,則會引發(fā)異常。為了確保您的應用是安全的,請在啟動或綁定Service時使用顯式 intent,并且不要為此服務聲明 intent 過濾器。
Android 5.0 會更改您應用的默認行為。
如果您的應用的目標 API 級別不低于 21:
默認情況下,系統(tǒng)會屏蔽混合內容和第三方 Cookie。要讓系統(tǒng)不屏蔽混合內容和第三方 Cookie,請分別使用setMixedContentMode()和setAcceptThirdPartyCookies()方法。
系統(tǒng)現(xiàn)在可以智能選擇要繪制的 HTML 文檔部分。這一新的默認行為有助于降低內存占用量并提高性能。如果您要一次性呈現(xiàn)整個文檔,請調用enableSlowWholeDocumentDraw()停用此優(yōu)化行為。
如果您的應用的目標 API 級別低于 21:系統(tǒng)不會屏蔽混合內容和第三方 Cookie,并且始終會一次性呈現(xiàn)整個文檔。
即將發(fā)布的版本新增了對 Android 新 Material Design 設計樣式的支持。您可以借助 Material Design 設計樣式創(chuàng)建應用,使其呈現(xiàn)動態(tài)的視覺效果并為用戶提供自然的界面元素過渡效果。此支持包括:
素材主題背景
視圖陰影
RecyclerView小部件
可繪制的動畫和樣式效果
Material Design 設計動畫和活動過渡效果
基于視圖狀態(tài)的視圖屬性動畫生成器
可自定義的界面小部件和應用欄(含您可以控制的調色板)
基于 XML 矢量圖形的動畫和非動畫圖形內容
要詳細了解如何向您的應用添加 Material Design 設計功能,請參閱Material Design 設計。
在以前的版本中,對于用戶最近與之互動的每個應用,“最近用過”屏幕都只能顯示一個任務?,F(xiàn)在,您的應用可以視需要針對其他并行活動或文檔打開多個任務。通過此功能,用戶可以在“最近用過”屏幕中快速切換各個活動和文檔,并能在所有應用之間獲得一致的切換體驗,從而實現(xiàn)多任務處理。此類并行任務示例可能包括:網(wǎng)絡瀏覽器應用中打開的標簽頁、效率類應用中的文檔、游戲中的并行對局或信息應用中的聊天。您的應用可以通過ActivityManager.AppTask類管理任務。
要插入邏輯中斷,以便系統(tǒng)能夠將您的活動視為一個新任務,請在通過startActivity()啟動活動時使用FLAG_ACTIVITY_NEW_DOCUMENT。您還可以在清單中將元素的documentLaunchMode屬性設置為"intoExisting"或"always",從而實現(xiàn)該行為。
為了避免“最近用過”屏幕過于混亂,您可以設置應用能夠在該屏幕中顯示的任務數(shù)上限。為此,請設置的android:maxRecents屬性。目前可以指定的上限為,每個用戶 50 個任務(對于 RAM 較小的設備,則為每個用戶 25 個任務)。
您可以將“最近用過”屏幕中的任務設置為在重新啟動過程中保持不變。要控制這一持續(xù)行為,請使用android:persistableMode屬性。您也可以通過調用setTaskDescription()方法,來更改“最近用過”屏幕中活動的視覺屬性,如活動的顏色、標簽和圖標。
Android 5.0 將WebView實施更新為 Chromium M37,不僅提高了安全性和穩(wěn)定性,還修復了多項錯誤。Android 5.0 上運行的WebView的默認用戶代理字符串已更新為采用 37.0.0.0 作為版本號。
此版本引入了PermissionRequest類,該類允許您的應用getUserMedia()之類的 Web API 向WebView授予對受保護資源(例如攝像頭和麥克風)的訪問權限。您的應用必須擁有對這些資源的相應 Android 權限,才能向WebView授予權限。
借助新的onShowFileChooser()方法,您現(xiàn)在不但可以在WebView中使用輸入表單字段,而且可以啟動文件選擇器從 Android 設備中選擇圖片和文件。
另外,此版本還支持WebAudio、WebGL和WebRTC等開放標準。要詳細了解此版本中的新增功能,請參閱Android 版 WebView。
通過 Android 5.0,您可以使用新的android.media.projectionAPI 向您的應用添加屏幕截圖和屏幕共享功能。例如,如果您希望在視頻會議應用中啟用屏幕共享,則會發(fā)現(xiàn)此功能非常實用。
通過新的createVirtualDisplay()方法,您的應用可以將主屏幕內容(默認顯示屏)捕獲到Surface對象中,然后通過網(wǎng)絡發(fā)送該對象。該 API 僅允許捕獲非安全的屏幕內容,不允許捕獲系統(tǒng)音頻。要開始屏幕截圖,您的應用必須先使用通過createScreenCaptureIntent()方法獲取的Intent啟動屏幕截圖對話框,來請求用戶向其授予相應權限。
有關新 API 的使用示例,請參閱示例項目中的MediaProjectionDemo類。
Android 5.0 中的鎖定屏幕能夠呈現(xiàn)通知。用戶可以通過“設置”來選擇是否允許在安全的鎖定屏幕上顯示敏感的通知內容。
您的應用可以控制其通知在安全的鎖定屏幕上顯示時的具體公開程度。要控制公開程度的級別,請調用setVisibility()并指定下列值之一:
VISIBILITY_PRIVATE:顯示基本信息(例如通知圖標),但隱藏通知的全部內容。
VISIBILITY_PUBLIC:顯示通知的全部內容。
VISIBILITY_SECRET:不顯示任何內容,甚至連通知圖標也不顯示。
如果公開程度級別為VISIBILITY_PRIVATE,您還可以提供隱藏了個人詳細信息的通知內容修改版本。例如,短信應用的通知可能會顯示“您有 3 條新短信”,但隱藏短信內容和發(fā)送者。要提供此備用通知,請先使用Notification.Builder創(chuàng)建替代通知。當創(chuàng)建不公開的通知對象時,請通過setPublicVersion()方法為其附加替代通知。
Android 5.0 使用與您的應用通知關聯(lián)的元數(shù)據(jù)更智能地對通知進行排序。要設置元數(shù)據(jù),請在構建通知時調用Notification.Builder中的以下方法:
setCategory():告訴系統(tǒng)當設備處于“優(yōu)先”模式時如何處理您的應用通知(例如,當通知表示來電、即時消息或警報時)。
setPriority():將通知標記為重要性高于或低于普通通知。如果還帶有聲音或振動,則優(yōu)先級字段設置為PRIORITY_MAX或PRIORITY_HIGH的通知將出現(xiàn)在一個小的浮動窗口中。
addPerson():允許您向通知添加一個或多個相關的人員。利用此方法,您的應用可指示系統(tǒng)將來自指定人員的通知歸成一組,或者將來自這些人員的通知歸類為重要性高于普通通知。
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 時,請務必在您的清單文件中使用標記和android:glEsVersion屬性聲明它。例如:
...
有關使用 OpenGL ES 的更多信息,包括如何在運行時檢查設備支持的 OpenGL ES 版本,請參閱OpenGL ES API 指南。
除了 OpenGL ES 3.1 之外,本版本還提供了一個擴展程序包,該程序包具有適用于高級顯卡功能的 Java 接口和原生支持。Android 將這些擴展程序視為一個程序包。(如果存在ANDROID_extension_pack_es31a擴展程序,則您的應用可以假定該程序包中的所有擴展都存在,并可通過單個#extension語句啟用著色語言功能。)
該擴展程序包支持:
對著色器存儲緩沖區(qū)、圖片和原子的有保證片段著色器支持(片段著色器支持在 OpenGL ES 3.1 中是可選的。)
曲面細分和幾何著色器
ASTC (LDR) 紋理壓縮格式
按樣本插值和著色
為幀緩沖區(qū)中的每個顏色附件使用不同的混合模式
該擴展程序包的 Java 接口是通過GLES31Ext提供的。在您的應用清單中,您可以聲明您的應用必須僅安裝在支持該擴展程序包的設備上。例如:
...
Android 5.0 引入了新的android.hardware.camera2API 來幫助執(zhí)行精細的照片拍攝和圖片處理。您現(xiàn)在可以通過getCameraIdList()以編程方式訪問可供系統(tǒng)使用的攝像頭設備,并通過openCamera()連接到特定設備。要開始拍攝圖片,請創(chuàng)建一個CameraCaptureSession并指定Surface對象來發(fā)送所拍攝的圖片。您可以將CameraCaptureSession配置為單拍或連拍。
要想在拍攝了新圖片時收到通知,請實施CameraCaptureSession.CaptureCallback監(jiān)聽器并將其設置在您的拍攝請求中?,F(xiàn)在,當系統(tǒng)完成圖片拍攝請求時,您的CameraCaptureSession.CaptureCallback監(jiān)聽器將收到對onCaptureCompleted()的調用,在CaptureResult中向您提供圖片拍攝元數(shù)據(jù)。
CameraCharacteristics類允許您的應用檢測設備上有哪些攝像頭功能可用。對象的INFO_SUPPORTED_HARDWARE_LEVEL屬性表示攝像頭的功能級別。
所有設備都至少支持INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY硬件級別,該級別的功能大致等同于已棄用的CameraAPI 的功能。
支持INFO_SUPPORTED_HARDWARE_LEVEL_FULL硬件級別的設備不僅能讓用戶手動控制拍攝和后期處理,而且能夠以高幀速率拍攝高分辨率圖片。
要了解如何使用更新后的攝像頭API,請參考本版本中的Camera2Basic和Camera2Video實施樣本。
此版本對AudioTrack進行了以下更改:
您的應用現(xiàn)在能夠以浮點格式 (ENCODING_PCM_FLOAT) 提供音頻數(shù)據(jù)。這允許更大的動態(tài)范圍、更一致的精度以及更大的動態(tài)余量。浮點算法在中間計算期間尤其有用。播放端點為音頻數(shù)據(jù)使用整數(shù)格式,并且具有較低的位深度。(在 Android 5.0 中,內部管線的某些部分尚未采用浮點格式。)
您的應用現(xiàn)在可以將音頻數(shù)據(jù)提供為ByteBuffer,所用格式與MediaCodec提供的格式相同。
WRITE_NON_BLOCKING選項可以簡化某些應用的緩沖和多線程處理。
使用新的通知和媒體 API,可確保系統(tǒng)界面能夠了解您的媒體播放并提取和顯示專輯封面。而借助新的MediaSession和MediaController類,您現(xiàn)在則可更輕松地跨界面和服務控制媒體播放。
新的MediaSession類替代了被棄用的RemoteControlClient類,并且提供了一組用于處理傳輸控件和媒體按鈕的回調方法。如果您的應用提供媒體播放并且在 AndroidTV或Wear平臺上運行,請使用MediaSession類和相同的回調方法來處理您的傳輸控件。
您現(xiàn)在可以通過新的MediaController類構建您自己的媒體控制器應用。此類提供了一種線程安全方法,可讓您通過自己的應用界面流程來監(jiān)控媒體播放。在創(chuàng)建控制器時,請指定一個MediaSession.Token對象,以便您的應用可以與給定的MediaSession進行互動。通過使用MediaController.TransportControls方法,您可以發(fā)送諸如play()、stop()、skipToNext()和setRating()之類的命令來控制該會話中的媒體播放。創(chuàng)建好控制器之后,您還可以注冊一個MediaController.Callback對象來監(jiān)聽該會話中的元數(shù)據(jù)和狀態(tài)更改。
此外,您還可以通過新的Notification.MediaStyle類創(chuàng)建允許將播放控件關聯(lián)到媒體會話的豐富通知。
Android 5.0 通過新的android.media.browseAPI 引入了允許應用瀏覽其他應用的媒體內容庫的功能。要公開您的應用中的媒體內容,請擴展MediaBrowserService類。您的MediaBrowserService實施應當提供對MediaSession.Token的訪問權限,以便應用可以播放通過您的服務提供的媒體內容。
要與媒體瀏覽器服務進行互動,請使用MediaBrowser類。在創(chuàng)建MediaBrowser實例時,請為MediaSession指定組件名稱。然后,您的應用可以使用該瀏覽器實例連接到關聯(lián)的服務,并獲取MediaSession.Token對象來播放通過該服務公開的內容。
Android 5.0 對存儲訪問框架進行了擴展,允許用戶選擇整個目錄子樹,并向應用授予對其中包含的所有文檔的讀/寫訪問權限(無需請求用戶逐項確認)。
要選擇目錄子樹,請構建并發(fā)送OPEN_DOCUMENT_TREEintent。系統(tǒng)將顯示支持子樹選擇的所有DocumentsProvider實例,允許用戶進行瀏覽并選擇目錄。返回的 URI 表示對所選子樹的訪問權限。然后,您可以使用buildChildDocumentsUriUsingTree()和buildDocumentUriUsingTree()以及query()來深入了解此子樹。
新的createDocument()方法允許您在子樹下的任何位置創(chuàng)建新的文檔或目錄。要管理現(xiàn)有文檔,請使用renameDocument()和deleteDocument()。在發(fā)出這些調用之前,請檢查COLUMN_FLAGS以驗證服務提供方是否支持這些調用。
如果您在實施DocumentsProvider并希望支持子樹選擇,請實施isChildDocument()并在您的COLUMN_FLAGS中添加FLAG_SUPPORTS_IS_CHILD。
Android 5.0 還在共享的存儲空間內引入了程序包專用的新目錄,您的應用可將要添加到MediaStore中的媒體文件放置在這些目錄中。新的getExternalMediaDirs()將返回這些目錄在所有共享的存儲設備上的路徑。與getExternalFilesDir()類似,您的應用不需要額外的權限即可訪問所返回的路徑。平臺將定期掃描這些目錄中的新媒體,但您也可使用MediaScannerConnection對新內容進行顯式掃描。
Android 5.0 提供了新的多網(wǎng)絡 API,它們允許您的應用動態(tài)掃描具有特定功能的可用網(wǎng)絡,然后與這些網(wǎng)絡建立連接。如果您的應用需要一個專用網(wǎng)絡(例如 SUPL、MMS 或運營商計費的網(wǎng)絡),或者如果您希望使用某種特定類型的傳輸協(xié)議來發(fā)送數(shù)據(jù),則此功能非常有用。
要從您的應用動態(tài)選擇并連接到某個網(wǎng)絡,請執(zhí)行以下步驟:
創(chuàng)建一個ConnectivityManager。
使用NetworkRequest.Builder類創(chuàng)建一個NetworkRequest對象并指定您的應用感興趣的網(wǎng)絡功能和傳輸類型。
要掃描合適的網(wǎng)絡,請調用requestNetwork()或registerNetworkCallback(),并傳入NetworkRequest對象和一個ConnectivityManager.NetworkCallback實施。如果希望在檢測到合適的網(wǎng)絡后主動切換到該網(wǎng)絡,請使用requestNetwork()方法;如果希望僅接收網(wǎng)絡掃描結果通知而不主動切換,請使用registerNetworkCallback()方法。
當系統(tǒng)檢測到合適的網(wǎng)絡時,它將連接到該網(wǎng)絡并調用onAvailable()回調。您可以在回調中使用Network對象來獲取關于該網(wǎng)絡的更多信息,或者指示通信使用選定的網(wǎng)絡。
Android 4.3 中作為重頭戲引入了對低功耗藍牙(“低功耗藍牙”)的平臺支持。在 Android 5.0 中,Android 設備現(xiàn)在可以用作低功耗藍牙外圍設備。應用可以使用此功能使附近的設備知道它的存在。例如,您可以構建相應的應用來允許設備用作計步器或健康檢測器并與另一低功耗藍牙設備交換其數(shù)據(jù)。
新的android.bluetooth.leAPI 允許您的應用對公告進行廣播,掃描響應,以及與附近的低功能藍牙設備建立連接。要使用新的公告和掃描功能,請在您的清單中添加BLUETOOTH_ADMIN權限。當用戶從 Play 商店更新或下載您的應用時,會要求他們向您的應用授予以下權限:“藍牙連接信息:允許應用控制藍牙,包括向附近的藍牙設備進行廣播以及獲取關于這些設備的信息?!?/p>
要開始低功耗藍牙公告以便其他設備可以發(fā)現(xiàn)您的應用,請調用startAdvertising()并傳入AdvertiseCallback類的一個實施?;卣{對象將收到關于公告操作成功或失敗的報告。
Android 5.0 引入了ScanFilter類,以便您的應用可以僅掃描它感興趣的特定類型的設備。要開始掃描低功耗藍牙設備,請調用startScan()并傳入一個過濾器列表。在該方法調用中,您還必須提供ScanCallback的一個實施以便在發(fā)現(xiàn)低功耗藍牙公告時進行報告。
Android 5.0 添加了以下增強功能以實現(xiàn)更廣泛和更靈活的 NFC 使用:
“分享”菜單中現(xiàn)在提供了 Android Beam。
您的應用可以通過調用invokeBeam()在用戶的設備上調用 Android Beam 來分享數(shù)據(jù)。這不需要用戶對著另一個具有 NFC 功能的設備手動點按設備即可完成數(shù)據(jù)傳輸。
您可以使用新的createTextRecord()方法來創(chuàng)建包含 UTF-8 文本數(shù)據(jù)的 NDEF 記錄。
如果您在開發(fā)支付應用,則您現(xiàn)在能夠通過調用registerAidsForService()動態(tài)注冊 NFC 應用 ID (AID)。您還可以使用setPreferredService()設置當某個特定的活動處于前臺時應當使用的首選卡仿真服務。
除了新功能之前,Android 5.0 還重點對電池壽命進行了改進??梢允褂眯碌?API 和工具來了解并優(yōu)化您的應用的功耗。
Android 5.0 提供了一個新的JobSchedulerAPI,它允許您通過為系統(tǒng)定義要在以后的某個時間或在指定的條件下(例如,當設備在充電時)異步運行的作業(yè)來優(yōu)化電池壽命。作業(yè)調度在下列情況下非常有用:
應用具有您可以推遲的非面向用戶的工作。
應用具有當插入設備時您希望優(yōu)先執(zhí)行的工作。
應用具有需要訪問網(wǎng)絡或 Wi-Fi 連接的任務。
應用具有您希望作為一個批次定期運行的許多任務。
工作單元由一個JobInfo對象進行封裝。此對象指定了調度條件。
使用JobInfo.Builder類配置調度的任務應當如何運行。您可以將任務調度為在特定的條件下運行,例如:
當設備充電時啟動
當設備連接到不限流量網(wǎng)絡時啟動
當設備空閑時啟動
在特定的截止期限之前或以最小的延遲完成
例如,您可以添加如下代碼以在不限流量網(wǎng)絡上運行您的任務:
JobInfouploadTask=newJobInfo.Builder(mJobId,mServiceComponent/* JobService component */).setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED).build();JobSchedulerjobScheduler=(JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);jobScheduler.schedule(uploadTask);
如果設備具有穩(wěn)定的電源(也就是說,它已插入了 2 分鐘以上并且電池處于健康水平),則系統(tǒng)將運行任何已就緒可運行的已調度作業(yè),即使作業(yè)的截止期限尚未到期也是如此。
要查看有關如何使用JobSchedulerAPI 的示例,請參考本版本中的JobSchedulerSample實施樣本。
新的dumpsys batterystats命令將生成關于設備上耗電量信息的有趣統(tǒng)計數(shù)據(jù),該數(shù)據(jù)按唯一用戶 ID (UID) 進行組織。該統(tǒng)計信息包括:
與電池相關的事件的歷史記錄
設備的全局統(tǒng)計信息
每個 UID 和系統(tǒng)組件的大致用電量
每個數(shù)據(jù)包的每個手機應用毫秒數(shù)
系統(tǒng) UID 匯總統(tǒng)計信息
應用 UID 匯總統(tǒng)計信息
可使用--help選項了解用于對輸出進行自定義的各種選項。例如,要輸出自設備上次充電后給定應用包的耗電量統(tǒng)計信息,請運行以下命令:
$ adb shell dumpsys batterystats--charged
您可以對dumpsys命令的輸出使用Battery Historian工具從日志中生成與電量相關的事件的 HTML 可視形式。此信息使您可以更輕松地了解和診斷任何與電池相關的問題。
Android 5.0 提供了用于在企業(yè)環(huán)境內運行應用的新功能。如果用戶具有現(xiàn)有的個人帳戶,則設備管理員可以啟動托管配置流程來向設備添加一個共存但單獨的“托管配置文件”。與托管配置文件關聯(lián)的應用將與非托管應用一起出現(xiàn)在用戶的啟動器、“最近用過”屏幕以及通知中。
要啟動托管配置流程,請在Intent中發(fā)送ACTION_PROVISION_MANAGED_PROFILE。如果調用成功,則系統(tǒng)將觸發(fā)onProfileProvisioningComplete()回調。然后,您可以調用setProfileEnabled()來啟用此托管配置文件。
默認情況下,在托管配置文件中只會啟用一小部分應用。您可以通過調用enableSystemApp()在托管配置文件中安裝額外的應用。
如果您在開發(fā)啟動器應用,則可以使用新的LauncherApps類來獲取當前用戶的可啟動活動的列表以及任何關聯(lián)的托管配置文件。您的啟動器可以通過向圖標繪圖添加一個工作標記,使托管應用更加惹人注目。要檢索帶標記的圖標,請調用getUserBadgedIcon()。
要查看如何使用此新功能,請參考本版本中的BasicManagedProfile實施樣本。
Android 5.0 引入了部署設備所有者應用的功能?!霸O備所有者”是一類特殊的設備管理員,具有在設備上創(chuàng)建和移除輔助用戶以及配置全局設置的額外能力。您的設備所有者應用可以使用DevicePolicyManager類中的方法來對托管設備上的配置、安全性和應用進行精細控制。一個設備在任一時刻只能有一個處于活動狀態(tài)的設備所有者。
要部署并激活設備所有者,您必須在設備處于未配置狀態(tài)時執(zhí)行從編程應用到設備的 NFC 數(shù)據(jù)傳輸。此數(shù)據(jù)傳輸發(fā)送的信息與托管配置中描述的配置 intent 中的信息相同。
Android 5.0 引入了一個新的屏幕固定 API,它允許您暫時防止用戶離開您的任務或被通知打擾。例如,如果您在開發(fā)一個教育應用以在 Android 或單用途或資訊服務應用上支持高風險評估需求,則可以使用此功能。一旦您的應用激活了屏幕固定,則用戶將無法看到通知、訪問其他應用或者返回到主屏幕,直到您的應用退出該模式。
有兩種方法用來激活屏幕固定:
手動:用戶可以在“設置”>“安全性”>“屏幕固定”中啟用屏幕固定,并通過在“最近用過”屏幕上點觸屏幕固定圖標來選擇他們要固定的任務。
以編程方式:要以編程方式激活屏幕固定,請在您的應用中調用startLockTask()。如果請求方應用不是設備所有者,則會提示用戶確認。設備所有者應用可以調用setLockTaskPackages()方法來使應用成為可固定的,不需要經(jīng)歷用戶確認步驟。
當任務鎖定處于活動狀態(tài)時,會發(fā)生以下行為:
狀態(tài)欄為空,并且用戶通知和狀態(tài)信息被隱藏。
首頁和“最近的應用”按鈕被隱藏。
其他應用無法啟動新活動。
當前應用可以啟動新活動,只要這樣做不會創(chuàng)建新任務即可。
當屏幕固定是由設備所有者調用的時,用戶將保持鎖定到您的應用,直到該應用調用stopLockTask()。
如果屏幕固定是由設備所有者之外另一應用或者是由用戶直接調用的活動時,用戶可以通過同時按住“返回”和“最近”按鈕退出。
您現(xiàn)在可以使用新的PdfRenderer類將 PDF 文檔頁呈現(xiàn)為位圖圖片以便打印。您必須指定系統(tǒng)將可打印內容寫入其中的一個可查找的(也就是說,可以隨機訪問內容)ParcelFileDescriptor。您的應用可以通過openPage()獲取頁面進行呈現(xiàn),然后調用render()將已打開的PdfRenderer.Page轉變?yōu)槲粓D。如果您只希望將文檔的一部分轉變?yōu)槲粓D圖片(例如,要實施平鋪渲染以放大文檔),則還可以設置其他參數(shù)。
有關如何使用新 API 的示例,請參閱PdfRendererBasic樣本。
您現(xiàn)在可以通過新的android.app.usageAPI 訪問 Android 設備上的應用使用情況歷史記錄。此 API 提供了比被棄用的getRecentTasks()方法更詳細的使用情況信息。要使用此 API,必須先在您的清單中聲明"android.permission.PACKAGE_USAGE_STATS"權限。用戶還必須通過“設置”>“安全性”>“應用”使用“使用情況訪問”啟用對此應用的訪問權限。
系統(tǒng)將以每個應用為單位收集使用情況數(shù)據(jù),并按每天、每周、每月和每年時間間隔對數(shù)據(jù)進行匯總。系統(tǒng)保留此數(shù)據(jù)的最大持續(xù)時間如下所述:
每天數(shù)據(jù):7 天
每周數(shù)據(jù):4 周
每月數(shù)據(jù):6 個月
每年數(shù)據(jù):2 年
對于每個應用,系統(tǒng)將記錄以下數(shù)據(jù):
上次使用應用的時間
應用在該時間間隔內(按天、周、月或年)處于前臺的總時間長度
組件(由程序包和活動名稱予以標識)在一天中移動到前臺或后臺時的時間戳捕獲
設備配置更改時(例如當設備配置因為旋轉而更改時)的時間戳捕獲
Android 5.0 對測試和輔助功能增加了以下支持:
新的getWindowAnimationFrameStats()和getWindowContentFrameStats()方法將捕獲窗口動畫和內容的幀統(tǒng)計信息。這些方法允許您編寫儀器測試來評估某個應用是否在以足夠的刷新頻率來呈現(xiàn)幀以提供流暢的用戶體驗。
新的executeShellCommand()方法允許您通過儀器測試執(zhí)行 shell 命令。命令執(zhí)行類似于從連接到設備的主機運行adb shell,允許您使用基于 shell 的工具,例如dumpsys、amcontent和pm。
使用輔助功能 API(例如UiAutomator)的輔助服務和測試工具現(xiàn)在可以檢索有視力的用戶可以與之進行互動的屏幕上窗口的屬性的詳細信息。要檢索AccessibilityWindowInfo對象的列表,請調用新的getWindows()方法。
新的AccessibilityNodeInfo.AccessibilityAction類允許您定義可以對AccessibilityNodeInfo執(zhí)行的標準或自定義操作。新的AccessibilityNodeInfo.AccessibilityAction類替換了以前在AccessibilityNodeInfo中提供的與操作相關的 API。
Android 5.0 對您的應用中的文本到語音合成提供了更細粒度的控制。新的Voice類允許您的應用使用與特定區(qū)域設置、質量和延遲評級以及特定于文本到語音引擎的參數(shù)關聯(lián)的語音配置文件。
從 Android 5.0 開始,用戶可以更輕松地在該平臺支持的所有輸入法編輯器 (IME)之間進行切換。執(zhí)行指定的切換操作(通常是觸摸軟鍵盤上的一個地球圖標)將循環(huán)經(jīng)過所有此類 IME。此行為更改是由shouldOfferSwitchingToNextInputMethod()方法實施的。
此外,框架現(xiàn)在還將檢查下一個 IME 究竟是否包括切換機制(并因此檢查該 IME 是否支持切換到它之后的 IME)。具有切換機制的 IME 不會切換到?jīng)]有切換機制的 IME。此行為更改是由switchToNextInputMethod()方法實施的。
要查看有關如何使用更新的 IME 切換 API 的示例,請參考本版本中更新的軟鍵盤實施樣本。要詳細了解如何實施 IME 切換,請參閱創(chuàng)建輸入法。
元素中現(xiàn)在支持下列值,因此,您可以確保您的應用僅安裝在提供了您的應用所需功能的設備上。
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_RELATIVE_HUMIDITY
元素中現(xiàn)在支持以下權限來聲明您的應用訪問特定 API 時所需的權限。
BIND_DREAM_SERVICE:當針對 API 級別 21 和更高級別時,Daydream服務需要此權限來確保只有系統(tǒng)可以綁定到它。