溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android 5.0 API 的變化——開發(fā)人員注意

發(fā)布時間:2020-06-29 14:18:00 來源:網(wǎng)絡(luò) 閱讀:8831 作者:NashLegend 欄目:移動開發(fā)

Android 5.0 API變化

譯自 http://developer.android.com/intl/zh-cn/about/versions/android-5.0.html —— By NashLegend

Sample示例在這里找:https://github.com/googlesamples/

原譯文在我的github上:https://github.com/NashLegend/ProjectBabel/blob/master/Android%205.0%20APIs.md


前排渣翻譯預(yù)警Android 5.0 API 的變化——開發(fā)人員注意,如果你能提供更好更專業(yè)的翻譯或者提出修改意見就好了……

API Level: 21

Android 5.0 (LOLLIPOP) 為用戶和開發(fā)人員提供了一些新特性,這篇文章將重點(diǎn)介紹一些值得注意的新增API。

如果你已經(jīng)發(fā)布了一款app,請查看這里 Android 5.0 系統(tǒng)行為變化 以適配你的app. 在Android5.0上,即使你沒有使用最新API或者新功能,這些新的系統(tǒng)行為仍可能會影響你的app。

如果想看一些新平臺的更高級的特性,請看這里

開始開發(fā)

要為Android 5.0開發(fā)app,請先使用SDK Mnager下載最新的SDK和系統(tǒng)鏡像。

升級你的target API

為使得你的app在Android獲得更好的表現(xiàn),請將你的targetSdkVersion設(shè)置成21。調(diào)用最新的Android 5.0 API的時候要注意在調(diào)用前判斷系統(tǒng)版本號以兼容之前的系統(tǒng)版本。不能使用低于minSdkVersion的API。詳見Android后向兼容性

欲知更多有關(guān)API級別的事兒,看這里:啥是API級別

用戶界面

Material design 支持

Android 5.0 新增了material design樣式的支持. 你可以通過material design創(chuàng)建具有自然的動態(tài)效果和過渡風(fēng)格的app. 系統(tǒng)支持包括以下方面:

  • 系統(tǒng)自帶Material design主題

  • 組件陰影

  • RecyclerView組件以取代ListView

  • Drawable動畫和樣式效果。(這里應(yīng)該是指Ripple Drawable之類)(Drawable animation and styling effects)

  • Material design風(fēng)格的動畫和activity過渡效果

  • 基于組件狀態(tài)的Animator。(Animators for view properties based on the state of the view)

  • 可定制的UI組件和工具欄(這里指的應(yīng)該是ToolBar)

  • 基于XML的矢量動畫和圖形(Animated and non-animated drawables)

欲知更多有關(guān)Material Design的事兒,看這里。

以及我翻譯的下面兩篇:

在低版本Android上使用Material Design。

如何在你的App中應(yīng)用Material Design設(shè)計(jì)風(fēng)格。


“最近運(yùn)行”界面上的多開的文檔和activity(相當(dāng)于MFC等的多文檔)

以前的版本中,“最近運(yùn)行”界面對于一個app來說只能顯示用戶最近交互過的一個task?,F(xiàn)在你的應(yīng)用可以打開更多task以同時打開不同的文檔。這種新的多任務(wù)特性可以讓用戶在最近運(yùn)行界面中快速在activity們和打開的文檔們之間任意切換。有可能使用這種并發(fā)任務(wù)的情景示例:瀏覽器標(biāo)簽多開、看比賽多開、生產(chǎn)力工具(比如Word、PPT等)文檔多開、多窗口與多個妹子聊天等等。你的app可以通過ActivityManager.AppTask來管理這些task。

要讓系統(tǒng)把你的activity當(dāng)成一個新的task,在startActivity()的時候使用FLAG_ACTIVITY_NEW_DOCUMENT,你也可以在manifest文件中把a(bǔ)ctivity的documentLaunchMode屬性設(shè)置成"intoExisting" 或者 "always"來實(shí)現(xiàn)這一點(diǎn)。

為了避免“最近運(yùn)行”界面太多太亂,你可以設(shè)置你的app可以顯示在此界面上的最大任務(wù)數(shù)量——設(shè)置manifest文件中 的屬性android:maxRecents,目前的最大數(shù)量是每個用戶50個,RAM較小的手機(jī)則為25個。

最近運(yùn)行界面上的task可以設(shè)置為重啟時常駐(persist across reboots),可以設(shè)置android:persistableMode屬性以控制常駐行為。你也可以通過setTaskDescription()方法修改activity在最近運(yùn)行界面上的顏色、標(biāo)簽和圖標(biāo)等可見元素。

WebView 更新

Android 5.0的WebView升級到了Chromium M37,修復(fù)了諸多bug以及帶來了安全和穩(wěn)定性的加強(qiáng),默認(rèn)的user-agent也已經(jīng)升級到了37.0.0.0。

新的WebView引入了PermissionRequest類,可以允許你的app通過類似getUserMedia()賦予WebView攝像頭和麥克風(fēng)的權(quán)限——當(dāng)然前提是你的app也有相應(yīng)的權(quán)限。

使用最新的onShowFileChooser()方法,你可以通過一個input選擇設(shè)備里的圖片和文件了。

此外,新的WebView還帶來了對WebAudio,WebGL,WebRTC的支持。欲知更多WebView的新特性,請看這里。

屏幕捕獲和分享

Android 5.0新增android.media.projection API以讓你擁有捕獲和屏幕分享功能。舉個例子,如果你要在視頻會議app中添加屏幕分享功能的話,就可以使用這個功能。

新的 createVirtualDisplay() 方法 允許你的app將主屏幕內(nèi)容(the default display)捕獲到一個Surface對象上,這樣你的app就可以通過網(wǎng)絡(luò)對此進(jìn)行分享。這個API只允許捕獲非敏感屏幕內(nèi)容,不能捕獲聲音。要進(jìn)行屏幕捕獲,你的app必須要先發(fā)起一個對話框請求用戶同意,此請求通過發(fā)送createScreenCaptureIntent() 方法產(chǎn)生的Intent實(shí)現(xiàn)。

你可以查看示例項(xiàng)目的MediaProjectionDemo來學(xué)習(xí)如何使用新的API。

通知

鎖屏通知

從Android 5.0開始可以在鎖屏界面上顯示通知。用戶可以通過設(shè)置選擇是否允許敏感通知內(nèi)容顯示在安全鎖屏界面(secure lock screen)上。

你的應(yīng)用可以控制通知內(nèi)容的具體顯示級別,通過調(diào)用setVisibility()方法傳入下面值中的一個:

  • VISIBILITY_PRIVATE: 顯示基本信息,比如說icon,但是隱藏具體內(nèi)容。

  • VISIBILITY_PUBLIC: 顯示通知的所有內(nèi)容.

  • VISIBILITY_SECRET: 不顯示任何東西,icon也不顯示.

如果你設(shè)置的是VISIBILITY_PRIVATE,你可以設(shè)置顯示敏感內(nèi)容的替代信息,比如“收到了3條QQ消息”,但是不顯示具體消息的聯(lián)系人。要提供這種顯示,首先用Notification.Builder創(chuàng)建一個替代通知。當(dāng)創(chuàng)建private通知的時候,通過setPublicVersion() 方法將這個替代通知關(guān)聯(lián)到這個隱私通知上。

Notifications 元數(shù)據(jù)

Android 5.0通過關(guān)聯(lián)在你的通知上的元數(shù)據(jù)對通知進(jìn)行智能排序。你可以通過Notification.Builder的下面這些方法設(shè)置這些元數(shù)據(jù):

  • setCategory(): 告訴系統(tǒng)當(dāng)設(shè)備處于優(yōu)先模式(比如這個通知表明來電、即時消息或者鬧鐘)時如何處理通知。

  • setPriority(): 標(biāo)記此通知的重要程度——是否比普通通知要高或者低。擁有PRIORITY_MAX 或者 PRIORITY_HIGH級別的通知在有聲音或者振動的情況下,會彈出一個浮動窗口。

  • addPerson(): 允許你添加一個或者多個與此通知相關(guān)聯(lián)的人。這樣系統(tǒng)可以根據(jù)不同的人把通知分開,并按人物重要性排序。

圖形

對OpenGL ES 3.1的支持

Android 5.0為OpenGL ES 3.1增加java接口和native支持。3.1重要的新增功能包括:

  • 計(jì)算著色器(Compute Shaders)

  • 獨(dú)立的著色器對象

  • 間接呼叫指令

  • 多重采樣和模版紋理

  • 著色語言改進(jìn)

  • 高級混合模式和調(diào)試擴(kuò)展。

  • 對OpenGL ES 2.0 和 3.0和后向兼容性

OpenGL ES 3.1 的java接口是GLES31。使用OpenGL ES 3.1的時候,請?jiān)趍anifest里面使用標(biāo)簽及android:glEsVersion屬性聲明之,例如:

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

欲知更多OpenGL ES的信息,包括設(shè)備對OpenGL支持的版本,請看OpenGL ES指南。

Android 擴(kuò)展包

除了OpenGL ES 3.1,這個版本還提供了擁有java接口和native支持的擴(kuò)展包以提供高級圖形功能。這個擴(kuò)展包作為一個獨(dú)立的包發(fā)布

擴(kuò)展包支持:

這塊兒不懂

Guaranteed fragment shader support for shader storage buffers, p_w_picpaths, and atomics (Fragment shader support is optional in OpenGL ES 3.1.) Tessellation and geometry shaders ASTC (LDR) texture compression format Per-sample interpolation and shading Different blend modes for each color p_w_upload in a frame buffer

The Java interface for the extension pack is provided with GLES31Ext. In your app manifest, you can declare that your app must be installed only on devices that support the extension pack. For example:

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

媒體

高級相機(jī)功能的相機(jī)API

Android 5.0引入了新的android.hardware.camera2 API以幫助fine-grain照片捕捉和圖像處理,你可以編程的方式通過調(diào)用getCameraIdList() 獲取系統(tǒng)的可用相機(jī)設(shè)備列表并通過。你可以通過 openCamera() 方法指定其中一個相機(jī)設(shè)備。要捕捉圖像,創(chuàng)建一個CameraCaptureSession并將捕獲到的圖像繪制到一個Surface對象上。 CameraCaptureSession可設(shè)置為單拍或者一次性連拍多張(take single shots or multiple p_w_picpaths in a burst)。

需要繼承CameraCaptureSession.CaptureCallback類并設(shè)置到圖像捕獲請求里以獲得圖像捕獲完成事件。當(dāng)系統(tǒng)完成圖像捕獲的時候,CameraCaptureSession.CaptureCallback將接到一個onCaptureCompleted()回調(diào),返回給你一個包含圖像元數(shù)據(jù)的 CaptureResult。

CameraCharacteristics類可以讓你的app檢查此設(shè)備的相機(jī)支持哪些特性。此對象的INFO_SUPPORTED_HARDWARE_LEVEL屬性表示相機(jī)功能級別。

  • 所有的設(shè)備至少可達(dá)到INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY級別的硬件支持,此級別功能大致相當(dāng)于已棄用的Camera API(注:此API在API21開始棄用)。

  • 達(dá)到INFO_SUPPORTED_HARDWARE_LEVEL_FULL級別硬件支持的設(shè)備可以手動控制圖像的捕捉和后期處理以及以高幀頻捕獲高分辨率的圖像。

要查看如何使用最新的camera2 API,請查看SDK示例中的Camera2Basic 和 Camera2Video

音頻回放

此版本包含AudioTrack的以下變化:

  • 你的app現(xiàn)在可以用浮點(diǎn)格式(ENCODING_PCM_FLOAT)提供音頻數(shù)據(jù)??梢垣@得更大的動態(tài)范圍,more consistent precision和greater headroom。浮點(diǎn)運(yùn)算在中間值計(jì)算(intermediate calculation)的時候尤其有用。Playback endpoints use integer format for audio data, and with lower bit depth. (In Android 5.0, portions of the internal pipeline are not yet floating point.)

  • 你現(xiàn)在可以ByteBuffer方式提供音頻數(shù)據(jù),就像提供給MediaCodec的數(shù)據(jù)一樣。

  • WRITE_NON_BLOCKING模式可以幫助某些app簡化緩沖和多線程工作(simplify buffering and multithreading)。

媒體播放控制

使用新的通知和媒體API以確保系統(tǒng)UI知道你的媒體播放情況并提取和顯示專輯信息。使用新的MediaSession 和MediaController類可使得通過UI和service控制播放變得更加簡單。

新的MediaSession類取代了已棄用的RemoteControlClient,它提供一套回調(diào)方法以處理各種播放行為(差不多這么翻譯吧,無非是快進(jìn)快退暫停以及其他控制等等) (transport controls and media buttons)。如果你的app提供媒體播放功能并且運(yùn)行在Android TV或者Wear平臺上,也可以通過MediaSession類使用相同的回調(diào)方法處理播放行為(transport controls)。

現(xiàn)在你可以使用MediaController類創(chuàng)建自己的媒體控制器app。這個類提供了一個線程安全的方式以在你的UI線程上監(jiān)控和控制媒體的播放行為。創(chuàng)建控制器的時候,指定一個MediaSession.Token對象以便與給定的MediaSession交互。

通過使用MediaController.TransportControls方法,你可以傳達(dá)諸如 play(), stop(), skipToNext(), 和 setRating()命令以控制MediaSession上的媒體播放。你也可以注冊一個MediaController.Callback回調(diào)對象以監(jiān)聽session上的元數(shù)據(jù)和狀態(tài)變化(metadata and state changes)。

此外,你還可以通過最新的Notification.MediaStyle類創(chuàng)建rich notification以控制mediasession播放。

媒體瀏覽

Android 5.0引入了新的android.media.browse API,你的app可以使用此api瀏覽其他app的媒體庫。繼承MediaBrowserService類以對外暴露你的app的媒體內(nèi)容。你繼承的MediaBrowserService應(yīng)該提供MediaSession.Token的接入口以便其他應(yīng)用可以通過它播放你提供的媒體內(nèi)容。

若要與媒體瀏覽服務(wù)交互,請使用MediaBrowser類。創(chuàng)建MediaBrowser實(shí)例時,請為MediaSession指定一個組件名。通過這個MediaBrowser實(shí)例,你的app可以連接到關(guān)聯(lián)的service并獲得一個暴露出來的MediaSession.Token對象。

存儲

目錄選擇

Android 5.0擴(kuò)展了存儲框架(Storage Access Framework),用戶可以借此將一個文件夾(包括其子文件和文件夾)的讀寫權(quán)限賦予一個app。

要選擇一個文件夾,請發(fā)出一條OPEN_DOCUMENT_TREE intent 即可。系統(tǒng)會列出所有支持文件夾選擇的DocumentsProvider來讓用戶瀏覽并選擇一個文件夾,返回值是選中的文件夾的URI。然后你就可以使用buildChildDocumentsUriUsingTree() 、 buildDocumentUriUsingTree() 和 query() 瀏覽此文件夾的子目錄了。

新的 createDocument() 方法使得你可以在上面選擇的文件夾及其子文件夾下面創(chuàng)建新文檔或者文件夾。要操作已經(jīng)存在的文件,請使用 renameDocument() 和 deleteDocument(). 調(diào)用這此方法之前先檢查 COLUMN_FLAGS 以確定provider對這些方法是否。分別是:FLAG_SUPPORTS_WRITE,F(xiàn)LAG_SUPPORTS_DELETE,F(xiàn)LAG_SUPPORTS_THUMBNAIL,F(xiàn)LAG_DIR_PREFERS_GRID,F(xiàn)LAG_DIR_PREFERS_LAST_MODIFIED)。

如果你實(shí)現(xiàn)了一個DocumentsProvider并且想要支持子目錄選擇,請實(shí)現(xiàn)isChildDocument()方法并將FLAG_SUPPORTS_IS_CHILD放到COLUMN_FLAGS里。

Android 5.0同時也引入了新的共享存儲區(qū)上的package-specific目錄,你可以在為里存儲媒體文件,這些媒體文件可以被包含進(jìn)MediaStore里,新的 getExternalMediaDirs()方法返回你的app在所有共享存儲設(shè)備上的媒體存儲目錄。像getExternalFilesDir()一樣不需要特殊權(quán)限。系統(tǒng)會定時掃描這些文件夾中的媒體內(nèi)容,當(dāng)然你也可以使用MediaScannerConnection自行掃描新內(nèi)容。(大哥們不要把緩存的圖片放這兒啊,好想把那些將緩存圖片直接放到sd卡某個目錄下的人拉出來打一頓

無線連接

多網(wǎng)絡(luò)連接(Multiple network connections)

Android 5.0支持新的多網(wǎng)絡(luò)連接API以使你的app可以根據(jù)特定功能(with specific capabilities)動態(tài)掃描可用的網(wǎng)絡(luò)并建立連接。當(dāng)你的app需要指定網(wǎng)絡(luò)——SUPL(無線位置服務(wù)), 彩信或者運(yùn)營商計(jì)費(fèi)網(wǎng)絡(luò)——才能用或者要通過一個特定的協(xié)議才能傳輸你的數(shù)據(jù)的時候,這個功能就派上用場了。

你的app動態(tài)選擇并連接一個網(wǎng)絡(luò)連接的步驟如下:

  1. 新建一個ConnectivityManager.

  2. 使用NetworkRequest.Builder 類創(chuàng)建一個NetworkRequest對象并指定你的app需要的網(wǎng)絡(luò)特性和傳輸類型。

  3. 要掃描合適的網(wǎng)絡(luò),請調(diào)用requestNetwork() 或者 registerNetworkCallback(), 并將NetworkRequest對象和一個ConnectivityManager.NetworkCallback作為參數(shù)傳過去。如果你要在合適的網(wǎng)絡(luò)被掃描到之后就切換到這個網(wǎng)絡(luò),請調(diào)用用 requestNetwork() 方法 如果僅僅接收掃描結(jié)果而不切換網(wǎng)絡(luò)的話,請使用registerNetworkCallback() 方法. 當(dāng)系統(tǒng)探測到一個合適的網(wǎng)絡(luò)時連接到這個網(wǎng)絡(luò)并調(diào)用onAvailable()方法。你可以使用這個方法傳進(jìn)來的Network對象得到這個網(wǎng)絡(luò)更多的信息或者使用此網(wǎng)絡(luò)。

低功耗藍(lán)牙

表示不懂……

Android 4.3引入了對Bluetooth Low Energy (Bluetooth LE)的平臺支持in the central role(咋理解)。從Android 5.0開始,Android設(shè)備可以像低功耗藍(lán)牙外設(shè)一樣了。應(yīng)用可以使用些功能使得附近的設(shè)備探測到你的存在。比如說,你可以創(chuàng)建一個計(jì)步器應(yīng)用或者健康狀況監(jiān)視應(yīng)用并與另外一個低功耗藍(lán)牙外設(shè)建立數(shù)據(jù)連接。

使用新的android.bluetooth.le API,你的app可以廣播廣告(broadcast advertisements)、掃描響應(yīng)(scan for responses)并與附近的低功耗藍(lán)牙設(shè)備連接。要使用新的廣播和掃描特性,請?jiān)趍anifest文件中添加BLUETOOTH_ADMIN權(quán)限。當(dāng)用戶下載或者更新你的app時,會被請求允許這些權(quán)限。

要開始Bluetooth LE advertising以便別的設(shè)備可以發(fā)現(xiàn)你的app,請調(diào)用startAdvertising()將一個AdvertiseCallback作為參數(shù)傳進(jìn)去。這個callback對象會接收advertising功能或者失敗的消息。

Android 5.0 引入了ScanFilter,這樣你的app就可以只搜索你需要的特定類型的設(shè)備。調(diào)用startScan()方法并傳遞進(jìn)一個filter列表以掃描低功耗藍(lán)牙設(shè)備——你必須提供一個ScanCallback以在Bluetooth LE advertisement被發(fā)現(xiàn)后可以報(bào)告。(............)

NFC增強(qiáng)

Android 5.0對NFC進(jìn)行了以下增強(qiáng)以使其得以更廣泛和靈活的應(yīng)用:

  • Android Beam 可以在分享按鈕中使用了。

  • 你的應(yīng)用可以通過invokeBeam()調(diào)用Android Beam以分享數(shù)據(jù)。避免了用戶必須自己手動操作設(shè)備以來分享數(shù)據(jù)的麻煩。

  • 你現(xiàn)在可以使用createTextRecord()方法創(chuàng)建包含UTF-8文本格式數(shù)據(jù)的NDEF記錄。

  • 如果你在開發(fā)一款支付類應(yīng)用,你現(xiàn)在可以對過調(diào)用registerAidsForService()以動態(tài)地注冊一個NFC應(yīng)用ID(AID)。你也可以使用setPreferredService()方法用于在某個特定的acitivy處于前臺時指定一個偏好的Card Emulation服務(wù)。

Project Volta

除了新特性之外(?),Android 5.0還重點(diǎn)突出了對電池壽命的提升(emphasizes improvements in battery life)。使用新的API和工具可以查看并優(yōu)化你的app的電量使用。

Scheduling jobs

Android 5.0提供一個新的JobScheduler API以讓你通過使系統(tǒng)推遲一些時間或者在特定條件下(比如充電中)異步執(zhí)行某些任務(wù)以優(yōu)化電池壽命。在下面情況下這很有用。

  • 應(yīng)用有可延后執(zhí)行的后臺任務(wù)。

  • 應(yīng)用有你想在充電時才執(zhí)行的任務(wù)。

  • 應(yīng)用有需要網(wǎng)絡(luò)或者WIFI才能執(zhí)行的任務(wù)。

  • 應(yīng)用有一些要定期統(tǒng)一執(zhí)行(run as a batch on a regular schedule)的任務(wù)。

一批任務(wù)(A unit of work)同一個JobInfo對象封裝,這個對象指定了任務(wù)如何安排。

使用JobInfo.Builder類來設(shè)置如何安排這些任務(wù)的運(yùn)行時刻表,你可以安排任務(wù)在正面情況下運(yùn)行,比如:

  • 設(shè)備充電時開始執(zhí)行。

  • 設(shè)備連接到非計(jì)費(fèi)網(wǎng)絡(luò)時開始執(zhí)行。

  • 設(shè)置空閑時開始執(zhí)行。

  • 在某個deadline前或者某個delay后結(jié)束執(zhí)行。

舉例,如果你想在設(shè)備連接到非計(jì)費(fèi)網(wǎng)絡(luò)時執(zhí)行,可以這樣做:

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);

如果設(shè)備有一個穩(wěn)定的電源(進(jìn)入充電狀態(tài)超過兩分鐘并且電量處于健康水平),系統(tǒng)就會執(zhí)行被安排好的任務(wù),即使該任務(wù)的deadline還沒有過期(???even if the job’s deadline has not expired)。

要查看如何使用JobScheduler API,請查看Sample中的JobSchedulerSample。

電量使用開發(fā)工具

新的dumpsys batterystats命令可以返回你感興趣的按唯一的UID組織的電量使用數(shù)據(jù)。數(shù)據(jù)包括以下幾方面:

  • 電池相關(guān)事件歷史。

  • 設(shè)備的全局?jǐn)?shù)據(jù)。

  • 每個UID和系統(tǒng)組件的粗略的電量使用。

  • Per-app mobile ms per packet

  • 系統(tǒng)UID總數(shù)據(jù)。

  • 應(yīng)用UID總數(shù)據(jù)。

使用--help可以學(xué)習(xí)更多的參數(shù)選項(xiàng)以輸出你想要的數(shù)據(jù)。比如,要輸出上次充電后某個指定app的電量使用數(shù)據(jù),執(zhí)行如下命令:

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

你可以對上面的命令的輸出數(shù)據(jù)使用Battery Historian工具來生成HTML頁面以方便查看。

Android在辦公和教育中的應(yīng)用

不知所云,一片胡扯,譯者處于昏迷狀態(tài)

Managed provisioning

Android 5.0 為在辦公環(huán)境中運(yùn)行的app提供了新的功能。如果用戶已經(jīng)在設(shè)備上有了一個個人賬戶,設(shè)備管理員可以啟動一個管理配置進(jìn)程(managed provisioning process)以再添加一個共存但是相互獨(dú)立的profile。受管理的profiles關(guān)聯(lián)的app與非受管理的app并列出現(xiàn)在Launcher、最近任務(wù)和通知里面。

要啟動管理配置進(jìn)程,發(fā)起一個ACTION_PROVISION_MANAGED_PROFILE Intent。如果調(diào)用成功的話,系統(tǒng)回調(diào)onProfileProvisioningComplete()。然后你可以調(diào)用setProfileEnabled() 來啟動這個受管理的profile。

默認(rèn)情況下,在受管理的profile里面只有很少的app可用。你可以在受管理profile里面調(diào)用enableSystemApp()來使其他app在包含進(jìn)profile中。

如果你在開發(fā)一款Launcher程序,可以使用新的LauncherApps類來獲取可展示到Launcher上的的activity列表——當(dāng)然只能是屬于當(dāng)前用戶和相關(guān)的受管理的profiles的。你的Launcher可以通過加入一個工作標(biāo)志來使得使受管理的app突出顯示出來,通過getUserBadgedIcon()方法可以取得這種帶標(biāo)志的圖標(biāo)。

查看Sample中的BasicManagedProfile來學(xué)習(xí)如何使用這些新功能。

設(shè)備所有者(Device owner)

Android 5.0 引入了可以部署設(shè)備所有者app的能力,設(shè)備所有者是一個擁有創(chuàng)建和刪除子用戶以及配置全局設(shè)置的特殊類型的(specialized type)設(shè)備管理員。你的所有者應(yīng)用可以使用DevicePolicyManager里面的方法的對設(shè)備配置、安全策略的應(yīng)用進(jìn)行細(xì)粒度的控制(take fine-grain control)。一個設(shè)備在同一時間只能有一個活動的設(shè)備所有者。

要部署并激活設(shè)備所有者,在設(shè)備的unprovisioned狀態(tài)下,進(jìn)行從一個編程應(yīng)用(programming app)到設(shè)備NFC數(shù)據(jù)傳輸。傳輸?shù)臄?shù)據(jù)和上面剛剛提到的provisioning intent中的數(shù)據(jù)相同。

屏幕固定

Android 5.0 引入了新的屏幕固定API,可以讓用戶暫時限制在一個任務(wù)中無法離開,此時也不會被通知所干擾。如果你正在開發(fā)一款教育應(yīng)用以在Android支持高風(fēng)險的評估要求或者目的單一的或者Kiosk應(yīng)用程序(an education app to support high stakes assessment requirements on Android, or a single-purpose or kiosk application——這啥意思,口吐白沫中)的時候,你就可以考慮使用這個API。一旦你的app啟動了屏幕固定,用戶就將看不到通知、打開其他app或者返回桌面,直到退出這種模式。

有兩種方式啟動屏幕固定:

  • 手動固定:用戶可以拖動開啟屏幕固定。設(shè)置>安全>屏幕固定,然后選擇在最近任務(wù)界面選擇在固定的任務(wù)。

  • 編程固定:要通過編碼實(shí)現(xiàn)屏幕固定,在你的app中調(diào)用startLockTask()方法。如果請求的app不是設(shè)備所有者(device owner),用戶會被彈出一個詢問提示。設(shè)備所有者可以調(diào)用setLockTaskPackages()方法以使得某個app可以不經(jīng)過用戶確認(rèn)就進(jìn)步屏幕固定狀態(tài)。

任務(wù)鎖定后,會:

  • 狀態(tài)欄變空,用戶通知和狀態(tài)信息被隱藏。

  • 主屏幕和最近任務(wù)按鈕被隱藏。

  • 其他app打不開新的activity。

  • 只要不開啟新的task,當(dāng)前app可以打開新的activity。

  • 如果屏幕固定是由設(shè)備所有者啟動,用戶仍舊會鎖定在你的app下直到調(diào)用了stopLockTask()。

  • 如果屏幕固定由非設(shè)備所有者啟動或者由用戶手動啟動,用戶可以通過同時按住返回的最近任務(wù)按鈕退出(the user can exit by holding both the Back and Recent buttons)

打印框架

以bitmap渲染PDF

現(xiàn)在可以用新的PdfRenderer類將PDF頁面渲染成bitmap來渲染。必須指定一個可搜索(內(nèi)容可以隨機(jī)訪問)的ParcelFileDescriptor,系統(tǒng)會在它上面寫入可打印數(shù)據(jù)。通過調(diào)用openPage()方法,你的app可以得到一個待渲染頁面,然后調(diào)用render()以將打開的PdfRenderer.Page渲染到一個bitmap上。如果你想只轉(zhuǎn)換此文檔的一部分的話,要傳入額外的一些參數(shù)。

要查看如何使用新的API,請查看Sample里面的PdfRendererBasic。

系統(tǒng)

應(yīng)用使用數(shù)據(jù)

現(xiàn)在你可以使用android.app.usage API獲取Android設(shè)備的app使用歷史。這個API提供了比已經(jīng)棄用的getRecentTasks()方法更詳細(xì)的使用數(shù)據(jù)。要使用這個API,首先要在manifest中添加android.permission.PACKAGE_USAGE_STATS權(quán)限,用戶可以通過Settings > Security > Apps賦予此app的讀取app使用數(shù)據(jù)的權(quán)限.

系統(tǒng)按應(yīng)用分別收集使用數(shù)據(jù),并且按天、周、月、年整合數(shù)據(jù)。系統(tǒng)保存數(shù)據(jù)的最長時間如下:

  • Daily data: 7天

  • Weekly data: 4周

  • Monthly data: 6個月

  • Yearly data: 2年

對于每個應(yīng)用,系統(tǒng)記錄如下數(shù)據(jù):

  • 應(yīng)用上次使用時間。

  • 對應(yīng)時間段內(nèi)應(yīng)用前臺運(yùn)行總時間(by day, week, month, or year)。

  • 一個組件(按包名和activity名區(qū)分)在一天內(nèi)被移動到前臺或者后臺的Timestamp capturing。

  • 設(shè)備設(shè)置改變(比如屏幕方向改變)的Timestamp capturing。

測試 & 輔助功能

測試和可訪問性改進(jìn)

Android 5.0為測試和可訪問性增加如下支持:

  • 新的getWindowAnimationFrameStats()和getWindowContentFrameStats()方法可以捕獲窗口動畫和內(nèi)容的幀數(shù)據(jù)。這些方法使你可以編寫instrumentation tests以評估app是否流暢。

  • 新的executeShellCommand()方法讓你可以在instrumentation test中執(zhí)行shell命令。類似于執(zhí)行 adb shell,這樣你可以使用一些shell工具比如dumpsys, am, content 和pm.

  • 使用accessibility APIs(比如UiAutomator)的Accessibility Service和測試工具現(xiàn)在可以取得屏幕上能夠進(jìn)行可見交互的窗口的詳細(xì)信息。要獲得AccessibilityWindowInfo對象列表,請調(diào)用 getWindows()方法。

  • 新的AccessibilityNodeInfo.AccessibilityAction類讓你可以在AccessibilityNodeInfo上執(zhí)行標(biāo)準(zhǔn)的或者自定義的動作。新的 AccessibilityNodeInfo.AccessibilityAction類取代了AccessibilityNodeInfo中的早期action API。

  • Android 5.0使你的app可以對文字轉(zhuǎn)語音(text-to-speech synthesis)進(jìn)行更細(xì)粒度的控制。有了新的Voice類,你的App可以通過指定地區(qū), 質(zhì)量和延遲率來設(shè)置聲音,也可以使用文字轉(zhuǎn)語音引擎相關(guān)的特定特性(text-to-speech engine-specific parameters)。

IME

更容易地切換輸入語言

這塊不翻譯了,標(biāo)題說的很明確了,但是輸入法右下角那個切換按鈕總是誤觸好蛋疼啊~摔~

Manifest 聲明

Declarable required features

下面的一些特性已經(jīng)開始在<uses-feature>中支持,所以你可以確認(rèn)你的app是否安裝在支持你所需特性的設(shè)備上。

  • FEATURE_AUDIO_OUTPUT

  • FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING

  • FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR

  • FEATURE_CAMERA_CAPABILITY_RAW

  • FEATURE_CAMERA_LEVEL_FULL

  • FEATURE_GAMEPAD

  • FEATURE_LIVE_TV

  • FEATURE_MANAGED_USERS

  • FEATURE_LEANBACK

  • FEATURE_OPENGLES_EXTENSION_PACK

  • FEATURE_SECURELY_REMOVES_USERS

  • FEATURE_SENSOR_AMBIENT_TEMPERATURE

  • FEATURE_SENSOR_HEART_RATE_ECG

  • FEATURE_SENSOR_RELATIVE_HUMIDITY

  • FEATURE_VERIFIED_BOOT

  • FEATURE_WEBVIEW

User permissions

現(xiàn)在<uses-permission>已經(jīng)支持下面的權(quán)限,如果你需要的話就加上它吧。

BIND_DREAM_SERVICE: 如果目標(biāo)API是21或更高, Daydream服務(wù)需要使用這個權(quán)限。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI