page.title=Android 5.0 API excludeFromSuggestions=true sdk.platform.version=5.0 sdk.platform.apiLevel=21 @jd:body
API 等級:{@sdkPlatformApiLevel}
Android 5.0 (LOLLIPOP) 為使用者和應用程式開發人員帶來許多全新的功能。本文將為您介紹絕對不容錯過的全新 API。
如要大致瞭解新平台的主要功能,請參閱 Android Lollipop 重點介紹。
如要開始打造適用於 Android 5.0 的應用程式,您必須先取得 Android SDK。接著,請使用 SDK Manager 下載 Android 5.0 SDK 平台和系統映像。
如要針對搭載 Android {@sdkPlatformVersion} 的裝置進一步最佳化應用程式,請將 {@code targetSdkVersion} 設為 "{@sdkPlatformApiLevel}"
、將應用程式安裝在 Android {@sdkPlatformVersion} 系統映像、詳加測試,然後再發佈更新後的應用程式。
只要在程式碼中新增條件,於執行 {@code minSdkVersion} 不支援的 API 之前檢查系統 API 等級,您就可以使用 Android {@sdkPlatformVersion} API,同時支援舊版本。如要進一步瞭解維持回溯相容性的方法,請參閱支援不同的平台版本。
如要進一步瞭解 API 等級的運作方式,請參閱什麼是 API 等級?
如果您曾經發佈適用於 Android 的應用程式,請注意您的應用程式可能會受到 Android 5.0 功能異動的影響。
4.4 版導入了全新的實驗性 Android Runtime,簡稱 ART。在 4.4 以下版本,ART 是選用項目,預設執行環境還是 Dalvik。在 Android 5.0 中,ART 現在已成為預設執行環境。
如需 ART 新功能的總覽,請參閱 ART 簡介。以下列出部分主要的新功能:
大部分的 Android 應用程式不需任何變更即可在 ART 中運作。不過,仍有部分可支援 Dalvik 的技術無法在 ART 中運作。如需進一步瞭解最重要的問題,請參閱驗證應用程式在 Android Runtime (ART) 的行為。如果應用程式符合下列情形,請特別留意:
在實作通知功能時,請務必瞭解相關的 Android 5.0 異動部分會造成什麼影響。如要進一步瞭解如何設計適用於 Android 5.0 以上版本的通知功能,請參閱通知功能設計指南。
為配合新的實感設計 (Material Design) 小工具的風格,通知會以深色文字搭配白色 (或非常淺色) 的背景呈現。請確認所有的通知都符合全新的配色規範。如果通知的配色不符合上述規範,請透過下列方法修正:
如果您目前是使用 {@link android.media.Ringtone}、{@link android.media.MediaPlayer} 或 {@link android.os.Vibrator} 類別為通知新增音效和震動功能,請移除這個程式碼,以便系統可以「優先」模式正確呈現通知。然後,請改用 {@link android.app.Notification.Builder} 方法新增音效和震動功能。
如果將裝置設定為 {@link android.media.AudioManager#RINGER_MODE_SILENT RINGER_MODE_SILENT},裝置會進入新的優先模式。如果您將裝置設定為 {@link android.media.AudioManager#RINGER_MODE_NORMAL RINGER_MODE_NORMAL} 或 {@link android.media.AudioManager#RINGER_MODE_NORMAL RINGER_MODE_VIBRATE},裝置則會結束優先模式。
Android 之前使用 {@link android.media.AudioManager#STREAM_MUSIC STREAM_MUSIC} 做為控制平板電腦音量的主要串流。在 Android 5.0 中,手機和平板電腦的主要音量串流已經統一由 {@link android.media.AudioManager#STREAM_RING STREAM_RING} 或 {@link android.media.AudioManager#STREAM_NOTIFICATION STREAM_NOTIFICATION} 控制。
根據 Android 5.0 預設設定,通知現在會顯示在使用者的鎖定螢幕。使用者可以選擇隱藏敏感的資訊,如此系統就會自動覆蓋通知顯示的文字。如要自訂具備覆蓋功能的通知,請使用 {@link android.app.Notification.Builder#setPublicVersion(android.app.Notification) setPublicVersion()}。
如果通知並未包含個人資訊,或者如果您要啟用通知中的媒體播放控制項,請呼叫 {@link android.app.Notification.Builder#setVisibility(int) setVisibility()} 方法,然後將通知可見度等級設為 {@link android.app.Notification#VISIBILITY_PUBLIC VISIBILITY_PUBLIC}。
如果您要實作會呈現媒體播放狀態或傳輸控制項的通知,不妨考慮使用全新的 {@link android.app.Notification.MediaStyle} 範本,而不是自訂的 {@link android.widget.RemoteViews.RemoteView}。無論您選擇哪一種方法,請確認將通知可見度設為 {@link android.app.Notification#VISIBILITY_PUBLIC VISIBILITY_PUBLIC},如此才可在鎖定螢幕使用控制項。請注意從 Android 5.0 開始,系統不會再將 {@link android.media.RemoteControlClient} 物件顯示在鎖定螢幕。詳情參閱如果您的應用程式使用了 RemoteControlClient一節的說明。
當裝置處於使用中狀態 (裝置鎖定但顯示螢幕),通知現在會顯示在小型浮動視窗 (也稱為提醒通知)。提醒通知看起來很像精簡版的通知,只是另外還會顯示動作按鈕。使用者不需要離開目前的應用程式即可操作或關閉提醒通知。
以下列出會觸發提醒通知的條件:
如果您的應用程式在上述情況實作通知,請確認提醒通知可以正確顯示。
{@link android.media.RemoteControlClient} 類別現在已淘汰。請儘快改用全新的 {@link android.media.session.MediaSession} API。
Android 5.0 的鎖定螢幕不會為您的 {@link android.media.session.MediaSession} 或 {@link android.media.RemoteControlClient} 顯示傳輸控制項。但是,您的應用程式可以透過通知在鎖定螢幕提供媒體播放控制項。您的應用程式可因此全權掌控媒體按鈕的呈現方式,無論裝置鎖定與否,使用者也可獲得一致的體驗。
為達到這個目標,Android 5.0 特別導入了全新的 {@link android.app.Notification.MediaStyle} 範本。{@link android.app.Notification.MediaStyle} 會將您透過 {@link android.app.Notification.Builder#addAction(int, java.lang.CharSequence, android.app.PendingIntent) Notification.Builder.addAction()} 新增的通知動作轉換為內嵌在應用程式媒體播放通知的精簡按鈕。接著,再將工作階段符記傳遞到 {@link android.app.Notification.MediaStyle#setMediaSession(android.media.session.MediaSession.Token) setSession()} 方法,告知系統這個通知會控制進行中的媒體工作階段。
請務必將通知的可見度設為 {@link android.app.Notification#VISIBILITY_PUBLIC VISIBILITY_PUBLIC},表示通知內容可顯示在任何鎖定螢幕 (無論是否完成安全設定皆可)。如需詳細資訊,請參閱鎖定螢幕通知。
如果您的應用程式是在 Android TV 或 Wear 平台執行,而您想要顯示媒體播放控制項,請實作 {@link android.media.session.MediaSession} 類別。如果您的應用程式需要接收 Android 裝置上的媒體按鈕事件,建議您同時實作 {@link android.media.session.MediaSession}。
Android 5.0 推出了「同時顯示文件和活動工作」的新功能 (請參閱下方的在最近使用項目的螢幕中同時顯示文件和活動),因此我們已淘汰 {@link android.app.ActivityManager#getRecentTasks ActivityManager.getRecentTasks()} 方法,以便提升對使用者隱私的保護強度。為提供回溯相容性,這個功能仍會傳回一小部分資料,包含發出呼叫的應用程式的工作,以及其他非敏感性的工作 (例如主畫面)。如果您的應用程式目前使用這個方法擷取所屬的工作,請改用 {@link android.app.ActivityManager#getAppTasks() getAppTasks()} 擷取這項資訊。
Android 5.0 支援 64 位元的系統。64 位元改良功能可增加地址空間並提升效能,同時仍可完整支援現有的 32 位元應用程式。對於 64 位元系統的支援也可改善 OpenSSL 的加密效能。此外,這個版本也導入了全新的原生媒體 NDK API 和原生 OpenGL ES (GLES) 3.1 支援。
如要使用 Android 5.0 的 64 位元支援功能,請前往 Android NDK 頁面下載並安裝 NDK Revision 10c。如要瞭解 NDK 的重要異動和錯誤修正資訊,請參閱 Revision 10c 版本資訊。
{@link android.content.Context#bindService(android.content.Intent, android.content.ServiceConnection, int) Context.bindService()} 方法現在會要求明確指定的 {@link android.content.Intent};如果收到隱式調用請求,則會擲回例外狀況。為確保您的應用程式安全無虞,在啟動或繫結 {@link android.app.Service} 時,請使用明確指定的調用請求,同時請勿針對服務宣告調用請求篩選器。
Android 5.0 變更了應用程式的預設行為。
在即將發行的版本中,我們開始支援新採用的 Android 實感設計 (Material Design) 樣式。您可以使用實感設計機制來開發您的應用程式,為使用者提供充滿動感且流暢的使用者介面元素轉換效果。這項支援包含:
如要進一步瞭解如何為您的應用程式加入實感設計功能,請參閱實感設計一節的介紹。
在先前的版本中,對於使用者最近互動的每一個應用程式,最近使用項目的螢幕只會顯示一個工作。現在,您的應用程式會視情況開啟更多工作,協助您掌握文件的同步執行活動。這項功能可提升多工作業效能,因為使用者可在最近使用項目的螢幕中快速切換各個活動和文件,而且在所有應用程式都可享有一致的切換體驗。舉例來說,這類同時執行的工作包含:網路瀏覽器應用程式中同時開啟的分頁、生產力應用程式中的文件、遊戲中同時執行的比賽,或是簡訊應用程式中的通訊活動。您的應用程式可以透過 {@link android.app.ActivityManager.AppTask} 類別·管理工作。
如要插入邏輯中斷點告知系統將您的活動視為新工作,當您透過 {@link android.app.Activity#startActivity(android.content.Intent) startActivity()} 啟動活動時,請使用 {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}。如要獲得這項行為,您也可以在資訊清單中將 <activity> 元素的 {@code documentLaunchMode} 屬性設定為 {@code "intoExisting"} 或 {@code "always"}。
為避免最近使用項目的螢幕過於擁擠,不妨設定可在這個螢幕中顯示的應用程式工作上限。如要這麼做,請設定 <application> 屬性的 {@link android.R.attr#maxRecents android:maxRecents}。目前的上限是每位使用者最多可以顯示 50 個工作 (RAM 較低的裝置則為 25 個)。
對於最近使用項目螢幕中的工作,您可以進行設定,讓這些工作在重新開機後持續顯示。如要控制持續顯示行為,請使用 android:persistableMode 屬性。對於最近使用項目螢幕中的活動,您也可以變更視覺屬性,例如活動的顏色、標籤和圖示,只要呼叫 {@link android.app.Activity#setTaskDescription(android.app.ActivityManager.TaskDescription) setTaskDescription()} 方法即可。
Android 5.0 已將 {@link android.webkit.WebView} 實作更新為 Chromium M37,不僅提升安全性和穩定性,同時也修正了多項錯誤。在 Android 5.0 執行的 {@link android.webkit.WebView} 預設使用者代理程式字串也已更新,目前包含 37.0.0.0 版本資訊。
這個版本導入了 {@link android.webkit.PermissionRequest} 類別,可讓您的應用程式授予 {@link android.webkit.WebView} 權限,以便透過 getUse Media() 等 Web API 存取受保護的資源 (例如相機和麥克風)。對於這些資源,您的應用程式必須具備適當的 Android 權限,才可將權限授予 {@link android.webkit.WebView}。
透過全新的 onShowFileChooser()
方法,您現在可以使用 {@link android.webkit.WebView} 中的輸入表單欄位,並啟動檔案選擇器選取 Android 裝置中的圖片和檔案。
此外,這個版本也新增了 WebAudio、WebGL 和 WebRTC 開放標準的支援功能。如要進一步瞭解這個版本中的全新功能,請參閱適用於 Android 的 WebView。
Android 5.0 可讓您透過 {@link android.media.projection} API,將螢幕擷取和分享功能新增到應用程式。舉例來說,如果您想在視訊會議應用程式中啟用螢幕分享功能,這項功能就可派上用場。
全新的 {@link android.media.projection.MediaProjection#createVirtualDisplay(java.lang.String, int, int, int, int, android.view.Surface, android.hardware.display.VirtualDisplay.Callback, android.os.Handler) createVirtualDisplay()} 方法可讓您的應用程式將主螢幕的內容 (預設畫面) 擷取到 {@link android.view.Surface} 物件,方便稍後傳送到網路。這個 API 只允許擷取未經過安全設定的螢幕內容,而且也不能擷取系統音訊。如要開始擷取螢幕,您的應用程式必須先使用 {@link android.media.projection.MediaProjectionManager#createScreenCaptureIntent()} 方法取得 {@link android.content.Intent},藉此啟動螢幕擷取對話方塊要求使用者的權限。
如需全新 API 的使用示例,請參閱範例專案中的 {@code MediaProjectionDemo} 類別。
Android 5.0 的鎖定螢幕可顯示通知。透過「設定」,使用者可選擇是否要允許敏感的通知內容顯示在安全的鎖定螢幕。
當通知內容顯示在安全的鎖定螢幕時,您的應用程式可控制要顯示多少內容。如要控制可見度等級,請呼叫 {@link android.app.Notification.Builder#setVisibility(int) setVisibility()} 並指定下列其中一個值:
當可見度等級為 {@link android.app.Notification#VISIBILITY_PRIVATE VISIBILITY_PRIVATE} 時,您也可以提供覆蓋個人資訊的通知內容。舉例來說,簡訊應用程式可能會顯示「您有 3 則新簡訊」的通知,但是隱藏簡訊內容和寄件者。如要提供這類通知,請先使用 {@link android.app.Notification.Builder} 建立替代通知。當您建立私人通知物件時,請透過 {@link android.app.Notification.Builder#setPublicVersion(android.app.Notification) setPublicVersion()} 方法附加替代通知。
Android 5.0 會使用與您應用程式通知相關聯的中繼資料,精確分類各項通知。如要設定中繼資料,當您建構通知時,請在 {@link android.app.Notification.Builder} 呼叫下列方法:
Android 5.0 新增了 Java 介面和 OpenGL ES 3.1 原生支援。OpenGL ES 3.1 主要的新功能包含:
適用於 Android 版 OpenGL ES 3.1 的 Java 介面是透過 {@link android.opengl.GLES31} 提供。使用 OpenGL ES 3.1 時,請確認您透過 {@code
<manifest> <uses-feature android:glEsVersion="0x00030001" /> ... </manifest>
如需使用 OpenGL ES 的詳細資訊 (包含在執行時間檢查裝置支援的 OpenGL ES 版本),請參閱 OpenGL ES API 指南。
除了 OpenGL ES 3.1,這個版本還提供包含 Java 介面的擴充功能套件和進階圖型功能的原生支援。Android 會將這些擴充功能視為單一套件 (如果 {@code ANDROID_extension_pack_es31a} 擴充功能存在,您的應用程式就會假設套件中的所有擴充功能都存在,並透過單一 {@code #extension} 陳述式啟用著色語言功能)。
擴充功能套件支援:
適用於擴充功能的 Java 介面是透過 {@link android.opengl.GLES31Ext} 提供。在您的應用程式資訊清單中,您可以宣告應用程式必須安裝在支援擴充功能的裝置。例如:
<manifest> <uses-feature android:name=“android.hardware.opengles.aep” android:required="true" /> ... </manifest>
Android 5.0 導入了全新的 android.hardware.camera2 API,可提供更精細的相片拍攝和圖片處理功能。您現在可以透過 {@link android.hardware.camera2.CameraManager#getCameraIdList() getCameraIdList()},以程式方式存取系統可用的相機裝置,並透過 {@link android.hardware.camera2.CameraManager#openCamera(java.lang.String, android.hardware.camera2.CameraDevice.StateCallback, android.os.Handler) openCamera()} 連接特定的裝置。如要開始拍攝影像,請建立 {@link android.hardware.camera2.CameraCaptureSession} 並指定 {@link android.view.Surface} 物件,以傳送拍攝的影像。您可以將 {@link android.hardware.camera2.CameraCaptureSession} 設定為拍攝單張相片或連續拍攝多張相片。
如果希望系統在拍攝新影像時通知您,請實作 {@link android.hardware.camera2.CameraCaptureSession.CaptureCallback} 監聽器,並在拍攝要求中設定。設定完成後,當系統完成影像拍攝要求時,您的 {@link android.hardware.camera2.CameraCaptureSession.CaptureCallback} 監聽器就會收到針對 {@link android.hardware.camera2.CameraCaptureSession.CaptureCallback#onCaptureCompleted(android.hardware.camera2.CameraCaptureSession, android.hardware.camera2.CaptureRequest, android.hardware.camera2.TotalCaptureResult) onCaptureCompleted()} 的呼叫,透過 {@link android.hardware.camera2.CaptureResult} 為您提供影像拍攝中繼資料。
{@link android.hardware.camera2.CameraCharacteristics} 類別可讓您的應用程式偵測裝置可用的相機功能。物件的 {@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL INFO_SUPPORTED_HARDWARE_LEVEL} 屬性代表相機的功能等級。
如要瞭解更新版 Camera API 的使用方法,請參閱這個版本的 {@code Camera2Basic} 和 {@code Camera2Video} 實作示例。
這個版本包括下列與 {@link android.media.AudioTrack} 相關的變更:
使用全新的通知和媒體 API,即可確保系統使用者介面認得您的媒體播放作業,並可擷取即顯示專輯圖片。現在,只要使用全新的 {@link android.media.session.MediaSession} 和 {@link android.media.session.MediaController}·類別,您即可在使用者介面和服務輕鬆控制媒體播放作業。
全新的 {@link android.media.session.MediaSession} 類別取代了已淘汰的 {@link android.media.RemoteControlClient} 類別,並提供一組回呼方法處理傳輸控制項和媒體按鈕。如果您的應用程式提供媒體播放功能並可在 Android TV或 Wear 平台執行,請使用 {@link android.media.session.MediaSession}·類別處理採用相同回呼方法的傳輸控制項。
您現在可以使用全新的 {@link android.media.session.MediaController} 類別打造專屬的媒體控制應用程式。這個類別提供對執行緒安全的方式,監控及控制來自您的應用程式使用者介面程序的媒體播放作業。建立控制項時,請指定 {@link android.media.session.MediaSession.Token} 物件,以便應用程式可以與 {@link android.media.session.MediaSession} 互動。透過使用 {@link android.media.session.MediaController.TransportControls} 方法,您可以傳送 {@link android.media.session.MediaController.TransportControls#play() play()}、{@link android.media.session.MediaController.TransportControls#stop() stop()}、{@link android.media.session.MediaController.TransportControls#skipToNext() skipToNext()} 和 {@link android.media.session.MediaController.TransportControls#setRating(android.media.Rating) setRating()} 等指令,以控制該工作階段的媒體播放作業。您也可以運用這個控制項註冊 {@link android.media.session.MediaController.Callback} 物件,以便監聽中繼資料並在該工作階段陳述變更。
此外,您可以使用全新的 {@link android.app.Notification.MediaStyle} 類別建立功能豐富的通知,允許播放控制項與媒體工作階段連結。
Android 5.0 導入了新功能,可讓應用程式透過 android.media.browse API 瀏覽其他應用程式的媒體內容庫。如要公開您應用程式的媒體內容,請擴展 {@link android.service.media.MediaBrowserService} 類別。實作 {@link android.service.media.MediaBrowserService} 後應可提供 {@link android.media.session.MediaSession.Token} 的存取權,以便應用程式播放透過您的服務提供的媒體內容。
如要與媒體瀏覽器服務互動,請使用 {@link android.media.browse.MediaBrowser} 類別。建立 {@link android.media.browse.MediaBrowser} 執行個體時,請指定 {@link android.media.session.MediaSession} 的元件名稱。使用該瀏覽器執行個體時,您的應用程式即可連結到相關的服務並獲得 {@link android.media.session.MediaSession.Token} 物件,以便播放該服務公開的內容。
Android 5.0 已擴展儲存空間存取架構,現在可讓使用者選取整個目錄子樹狀結構,應用程式不需要使用者逐一確認,即可獲得讀取/寫入其中所有文件的權限。
如要選取目錄子樹狀結構,請建構並傳送 {@link android.content.Intent#ACTION_OPEN_DOCUMENT_TREE OPEN_DOCUMENT_TREE} 調用請求。系統會顯示所有支援子樹狀結構選取功能的 {@link android.provider.DocumentsProvider} 執行個體,方便使用者瀏覽及選取目錄。傳回 URI 代表您可存取所選的子樹狀結構。這時您就可以使用 {@link android.provider.DocumentsContract#buildChildDocumentsUriUsingTree(android.net.Uri, java.lang.String) buildChildDocumentsUriUsingTree()}、{@link android.provider.DocumentsContract#buildDocumentUriUsingTree(android.net.Uri, java.lang.String) buildDocumentUriUsingTree()} 和 {@link android.content.ContentResolver#query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String) query()} 探索子樹狀結構。
全新的 {@link android.provider.DocumentsContract#createDocument(android.content.ContentResolver, android.net.Uri, java.lang.String, java.lang.String) createDocument()} 方法可讓您在子樹狀結構的任何位置建立新文件或目錄。如要管理現有的文件,請使用 {@link android.provider.DocumentsContract#renameDocument(android.content.ContentResolver, android.net.Uri, java.lang.String) renameDocument()} 和 {@link android.provider.DocumentsProvider#deleteDocument(java.lang.String) deleteDocument()}。發出呼叫前,請檢查 {@link android.provider.DocumentsContract.Document#COLUMN_FLAGS COLUMN_FLAGS} 以確認提供者支援這些呼叫。
如果您正在實作 {@link android.provider.DocumentsProvider} 且想要支援子樹狀結構選取功能,請實作 {@link android.provider.DocumentsProvider#isChildDocument(java.lang.String, java.lang.String) isChildDocument()},並將 {@link android.provider.DocumentsContract.Root#FLAG_SUPPORTS_IS_CHILD FLAG_SUPPORTS_IS_CHILD} 納入您的 {@link android.provider.DocumentsContract.Root#COLUMN_FLAGS COLUMN_FLAGS}。
Android 5.0 也在共用儲存空間導入了全新的套件專屬目錄,您的應用程式可將要納入 {@link android.provider.MediaStore} 的媒體檔案放在其中。全新的 {@link android.content.Context#getExternalMediaDirs()} 會傳回前往所有共用儲存空間裝置上的目錄路徑。與 {@link android.content.Context#getExternalFilesDir(java.lang.String) getExternalFilesDir()} 相似,您的應用程式不需要額外權限即可存取傳回的路徑。這個平台會定期掃描這些目錄中的新媒體,但您也可以使用 {@link android.media.MediaScannerConnection} 自行掃描新內容。
Android 5.0 提供全新的多網路連線 API,可讓您的應用程式動態掃描可用且具備特定功能的網路,進而建立連線。當您的應用程式需要具備特定功能的網路 (例如 SUPL、MMS 或電信代扣結帳網路),或是您想要使用特定類型的傳輸通訊協定傳送資料,這項功能就能派上用場。
如要從您的應用程式動態選取及連接網路,請按照下列步驟進行:
當系統偵測到適用網路時,就會自動連線並叫用 {@link android.net.ConnectivityManager.NetworkCallback#onAvailable(android.net.Network) onAvailable()} 回呼。您可以使用回呼的 {@link android.net.Network} 物件,以取得網路的額外資訊,或是將流量導向所選的網路。
Android 4.3 平台首度導入了藍牙低功耗技術 (Bluetooth LE) 支援功能,讓裝置以主機角色建立連線。在 Android 5.0 中,Android 裝置則可以扮演 Bluetooth LE「周邊裝置」的角色。應用程式可以透過這項功能,輕鬆讓附近的裝置偵測到。舉例來說,您可以打造應用程式,讓裝置化身為計步器或健康監測器,並將資料傳送給另一台 Bluetooth LE 裝置。
全新的 {@link android.bluetooth.le} API 可讓您的應用程式播送廣告、掃描回應,以及與附近的 Bluetooth LE 裝置建立連線。如要使用全新的廣告和掃描功能,請在您的資訊清單中新增 {@link android.Manifest.permission#BLUETOOTH_ADMIN BLUETOOTH_ADMIN} 權限。當使用者從 Play 商店更新或下載您的應用程式時,會看到以下的權限要求提示:「藍牙連線資訊:允許應用程式控制藍牙功能,包括對附近的藍牙裝置播送資訊,或是從附近的藍牙裝置取得資訊。」
如要開始 Bluetooth LE 廣告功能,以便其他裝置發掘您的應用程式,請呼叫 {@link android.bluetooth.le.BluetoothLeAdvertiser#startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback) startAdvertising()} 並傳遞 {@link android.bluetooth.le.AdvertiseCallback} 類別實作。回呼物件會收到廣告作業成功或失敗的報告。
Android 5.0 導入了 {@link android.bluetooth.le.ScanFilter} 類別,因此您的應用程式可以只掃描偏好的特定裝置類型。如要開始掃描 Bluetooth LE 裝置,請呼叫 {@link android.bluetooth.le.BluetoothLeScanner#startScan(android.bluetooth.le.ScanCallback) startScan()} 並傳遞篩選器清單。在方法呼叫中,您也必須提供 {@link android.bluetooth.le.ScanCallback} 實作,以便系統在發現 Bluetooth LE·裝置時向您回報。
Android 5.0 新增了改良措施,讓 NFC 的用途更廣更靈活。
registerAidsForService()
的方式,動態註冊 NFC 應用程式 ID (AID)。您也可以使用 {@link android.nfc.cardemulation.CardEmulation#setPreferredService(android.app.Activity, android.content.ComponentName) setPreferredService()},針對前景的特定活動設定應該使用的偏好卡片模擬服務。除了導入新功能之外,Android 5.0 也很重視如何提升電池電力方面的效能。建議您不妨使用全新的 API 和工具,瞭解應用程式的耗電量並進行最佳化。
Android 5.0 提供了全新的 {@link android.app.job.JobScheduler} API,可讓您為系統定義稍後執行的非同步工作或是在特定條件下 (例如裝置充電時) 執行的工作,進而將電池電力最佳化。對於下列情況來說,工作安排功能特別實用:
每一個工作單元都封裝在 {@link android.app.job.JobInfo} 物件中,這個物件會指定各項安排條件。
請使用 {@link android.app.job.JobInfo.Builder} 類別設定應如何執行已排定的工作。您可以排定工作在特定條件下執行,例如:
舉例來說,您可以新增下列程式碼,以便在非計量付費網路執行工作:
JobInfo uploadTask = new JobInfo.Builder(mJobId, mServiceComponent /* JobService component */) .setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED) .build(); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(uploadTask);
如果裝置具備穩定的電力 (也就是裝置已接上電源超過 2 分鐘,而且電池處於健康狀態),即使排定工作的期限還沒到,系統也會執行任何準備就緒的排定工作。
如要查看 {@link android.app.job.JobScheduler} API 的使用示例,請參閱這個版本中的 {@code JobSchedulerSample} 實作示例。
全新的 {@code dumpsys batterystats} 指令會產生值得您注意的裝置耗電量統計資料,並依照不重複使用者 ID (UID) 排列。統計資料包含:
如要瞭解對輸出結果進行自訂的各種選項,請使用 {@code --help} 選項。例如,如要列出特定應用程式套件自裝置上次充電後的耗電量統計資訊,請執行下列指令:
$ adb shell dumpsys batterystats --charged <package-name>
您可以對 {@code dumpsys} 指令的輸出使用 Battery Historian 工具,利用紀錄中與電力相關的事件產生 HTML 圖示。這項資訊可讓您更輕鬆地掌握及診斷任何與電池相關的問題。
Android 5.0 提供了新功能,可讓您在企業環境內執行應用程式。如果使用者擁有現有的個人帳戶,則裝置管理員可以啟動管理化設定檔建置流程,將共存但獨立的「管理化設定檔」新增到裝置中。與管理化設定檔相關聯的應用程式將與非管理化應用程式一起出現在使用者的啟動器、最近使用項目的螢幕以及通知中。
如要啟動管理化設定檔建置流程,請在 {@link android.content.Intent} 中傳送 {@link android.app.admin.DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE ACTION_PROVISION_MANAGED_PROFILE}。如果呼叫成功,系統將觸發 {@link android.app.admin.DeviceAdminReceiver#onProfileProvisioningComplete(android.content.Context, android.content.Intent) onProfileProvisioningComplete()} 回呼。然後,您就可以呼叫 {@link android.app.admin.DevicePolicyManager#setProfileEnabled(android.content.ComponentName) setProfileEnabled()} 以啟用這個管理化設定檔。
在預設情況下,管理化設定檔中只會啟用一部分的應用程式。只要呼叫 {@link android.app.admin.DevicePolicyManager#enableSystemApp(android.content.ComponentName, android.content.Intent) enableSystemApp()},您就可以在受管理的設定檔安裝額外的應用程式。
如果您在開發啟動器應用程式,不妨使用全新的 {@link android.content.pm.LauncherApps} 類別,取得目前使用者和任何關聯的受管理設定檔的可啟動活動清單。只要在可編輯的圖示上附加工作徽章,您的啟動器便能讓管理化應用程式變得更加顯目。如要擷取附帶徽章的圖示,請呼叫 {@link android.content.pm.PackageManager#getUserBadgedIcon(android.graphics.drawable.Drawable, android.os.UserHandle) getUserBadgedIcon()}。
如要查看這項新功能的使用方式,請參閱這個版本的 {@code BasicManagedProfile} 實作示例。
Android 5.0 導入了部署裝置擁有者應用程式的功能。與一般裝置管理員不同,「裝置擁有者」另外具備在裝置上建立及移除次要使用者,以及配置全域設定的能力。您的裝置擁有者應用程式可以使用 {@link android.app.admin.DevicePolicyManager} 類別中的方法,針對受管理的裝置的設定、安全性和應用程式進行精細的控制。無論在任何時候,每部裝置都只能具備一個有效的裝置擁有者。
如要部署並啟用裝置擁有者,您必須在裝置尚未進行設定建置時,先透過 NFC 將程式設計應用程式的資料傳輸到裝置中。這項資料傳輸作業所傳送的資訊,與受管理的設定檔建置中描述的建置調用請求所傳送的資訊相同。
Android 5.0 導入了全新的螢幕固定 API,可讓您暫時防止使用者離開您的工作或受到通知干擾。舉例來說,如果您正在開發可在 Android 或單一用途或 Kiosk 應用程式上支援高風險評估需求的教育應用程式,則可以使用這個功能。您的應用程式啟用了螢幕固定之後,使用者將無法看到通知、存取其他應用程式或返回主畫面,直到您的應用程式退出這個模式為止。
您可透過兩種方法啟用螢幕固定:
當工作鎖定處於有效狀態時,就會發生下列行為:
您現在可以使用新的 {@link android.graphics.pdf.PdfRenderer} 類別將 PDF 文件頁面轉譯為點陣圖圖片以便列印。您必須指定可尋找 (也就是內容可供隨機存取) 的 {@link android.os.ParcelFileDescriptor},方便系統將可列印內容寫入其中。您的應用程式可以透過 {@link android.graphics.pdf.PdfRenderer#openPage(int) openPage()} 取得頁面進行轉譯,然後再呼叫 {@link android.graphics.pdf.PdfRenderer.Page#render(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Matrix, int) render()},將開啟的 {@link android.graphics.pdf.PdfRenderer.Page} 轉變為點陣圖。如果您只希望將文件的一部分轉變為點陣圖圖片 (例如,想要實作圖塊轉譯以放大文件),還可以設定其他參數。
如需瞭解全新 API 的使用示例,請參閱 {@code PdfRendererBasic} 示例。
透過全新的 {@link android.app.usage} API,您現在可以存取 Android 裝置上的應用程式使用紀錄。與已淘汰的 {@link android.app.ActivityManager#getRecentTasks(int, int) getRecentTasks()} 方法相比,這個 API 提供了更詳細的使用資訊。如要使用這個 API,您必須先在資訊清單中宣告 {@code "android.permission.PACKAGE_USAGE_STATS"} 權限。如要存取使用紀錄,使用者還必須依序點擊 [設定] > [安全性] > [應用程式],啟用對這個應用程式的存取權限。
系統將以每個應用程式為單位收集使用資料,並依照每天、每週、每月和每年的時間間隔彙總資料。系統對於這些資料的最長保留期限分別為:
至於每個應用程式,系統會記錄下列資料:
Android 5.0 新支援了下列測試和協助工具:
從 Android 5.0 開始,使用者可以更輕鬆地在平台支援的所有輸入法編輯器 (IME) 之間進行切換。當您執行指定的切換操作時 (通常是輕觸軟鍵盤上的地球圖示),將會依序看到所有 IME。這項行為變更是由 {@link android.view.inputmethod.InputMethodManager#shouldOfferSwitchingToNextInputMethod(android.os.IBinder) shouldOfferSwitchingToNextInputMethod()} 方法實作。
此外,這個架構現在還會檢查下一個 IME 是否包含切換機制 (並同時確認這個 IME 是否支援切換到下一個 IME 的功能)。具備切換機制的 IME 不會切換到沒有切換機制的 IME。這項行為變更是由 {@link android.view.inputmethod.InputMethodManager#switchToNextInputMethod(android.os.IBinder, boolean) switchToNextInputMethod()} 方法實作。
如要查看更新版 IME 切換 API 的使用示例,請參閱這個版本中更新的軟鍵盤實作示例。如要進一步瞭解實作 IME 切換機制的方法,請參閱建立輸入法。
{@code
{@code