Android 5.0 API 的變化——開發人員注意

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


前排渣翻譯預警j_0009.gif,如果你能提供更好更專業的翻譯或者提出修改意見就好了……

API Level: 21

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

如果你已經發布了一款app,請查看這裏 Android 5.0 系統行爲變化 以適配你的app. 在Android5.0上,即使你沒有使用最新API或者新功能,這些新的系統行爲仍可能會影響你的app。

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

開始開發

要爲Android 5.0開發app,請先使用SDK Mnager下載最新的SDK和系統鏡像。

升級你的target API

爲使得你的app在Android獲得更好的表現,請將你的targetSdkVersion設置成21。調用最新的Android 5.0 API的時候要注意在調用前判斷系統版本號以兼容之前的系統版本。不能使用低於minSdkVersion的API。詳見Android後向兼容性

欲知更多有關API級別的事兒,看這裏:啥是API級別

用戶界面

Material design 支持

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

  • 系統自帶Material design主題

  • 組件陰影

  • RecyclerView組件以取代ListView

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

  • Material design風格的動畫和activity過渡效果

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

  • 可定製的UI組件和工具欄(這裏指的應該是ToolBar)

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

欲知更多有關Material Design的事兒,看這裏

以及我翻譯的下面兩篇:

在低版本Android上使用Material Design

如何在你的App中應用Material Design設計風格


“最近運行”界面上的多開的文檔和activity(相當於MFC等的多文檔)

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

要讓系統把你的activity當成一個新的task,在startActivity()的時候使用FLAG_ACTIVITY_NEW_DOCUMENT,你也可以在manifest文件中把activity的documentLaunchMode屬性設置成"intoExisting" 或者 "always"來實現這一點。

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

最近運行界面上的task可以設置爲重啓時常駐(persist across reboots),可以設置android:persistableMode屬性以控制常駐行爲。你也可以通過setTaskDescription()方法修改activity在最近運行界面上的顏色、標籤和圖標等可見元素。

WebView 更新

Android 5.0的WebView升級到了Chromium M37,修復了諸多bug以及帶來了安全和穩定性的加強,默認的user-agent也已經升級到了37.0.0.0。

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

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

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

屏幕捕獲和分享

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

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

你可以查看示例項目的MediaProjectionDemo來學習如何使用新的API。

通知

鎖屏通知

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

你的應用可以控制通知內容的具體顯示級別,通過調用setVisibility()方法傳入下面值中的一個:

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

  • VISIBILITY_PUBLIC: 顯示通知的所有內容.

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

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

Notifications 元數據

Android 5.0通過關聯在你的通知上的元數據對通知進行智能排序。你可以通過Notification.Builder的下面這些方法設置這些元數據:

  • setCategory(): 告訴系統當設備處於優先模式(比如這個通知表明來電、即時消息或者鬧鐘)時如何處理通知。

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

  • addPerson(): 允許你添加一個或者多個與此通知相關聯的人。這樣系統可以根據不同的人把通知分開,並按人物重要性排序。

圖形

對OpenGL ES 3.1的支持

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

  • 計算着色器(Compute Shaders)

  • 獨立的着色器對象

  • 間接呼叫指令

  • 多重採樣和模版紋理

  • 着色語言改進

  • 高級混合模式和調試擴展。

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

OpenGL ES 3.1 的java接口是GLES31。使用OpenGL ES 3.1的時候,請在manifest裏面使用標籤及android:glEsVersion屬性聲明之,例如:

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

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

Android 擴展包

除了OpenGL ES 3.1,這個版本還提供了擁有java接口和native支持的擴展包以提供高級圖形功能。這個擴展包作爲一個獨立的包發佈

擴展包支持:

這塊兒不懂

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>

媒體

高級相機功能的相機API

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

需要繼承CameraCaptureSession.CaptureCallback類並設置到圖像捕獲請求裏以獲得圖像捕獲完成事件。當系統完成圖像捕獲的時候,CameraCaptureSession.CaptureCallback將接到一個onCaptureCompleted()回調,返回給你一個包含圖像元數據的 CaptureResult

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

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

音頻回放

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

  • 你的app現在可以用浮點格式(ENCODING_PCM_FLOAT)提供音頻數據。可以獲得更大的動態範圍,more consistent precision和greater headroom。浮點運算在中間值計算(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.)

  • 你現在可以ByteBuffer方式提供音頻數據,就像提供給MediaCodec的數據一樣。

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

媒體播放控制

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

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

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

通過使用MediaController.TransportControls方法,你可以傳達諸如 play()stop()skipToNext(), 和 setRating()命令以控制MediaSession上的媒體播放。你也可以註冊一個MediaController.Callback回調對象以監聽session上的元數據和狀態變化(metadata and state changes)。

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

媒體瀏覽

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

若要與媒體瀏覽服務交互,請使用MediaBrowser類。創建MediaBrowser實例時,請爲MediaSession指定一個組件名。通過這個MediaBrowser實例,你的app可以連接到關聯的service並獲得一個暴露出來的MediaSession.Token對象。

存儲

目錄選擇

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

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

新的 createDocument() 方法使得你可以在上面選擇的文件夾及其子文件夾下面創建新文檔或者文件夾。要操作已經存在的文件,請使用 renameDocument() 和 deleteDocument(). 調用這此方法之前先檢查 COLUMN_FLAGS 以確定provider對這些方法是否。分別是:FLAG_SUPPORTS_WRITEFLAG_SUPPORTS_DELETEFLAG_SUPPORTS_THUMBNAILFLAG_DIR_PREFERS_GRIDFLAG_DIR_PREFERS_LAST_MODIFIED)。

如果你實現了一個DocumentsProvider並且想要支持子目錄選擇,請實現isChildDocument()方法並將FLAG_SUPPORTS_IS_CHILD放到COLUMN_FLAGS裏。

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

無線連接

多網絡連接(Multiple network connections)

Android 5.0支持新的多網絡連接API以使你的app可以根據特定功能(with specific capabilities)動態掃描可用的網絡並建立連接。當你的app需要指定網絡——SUPL(無線位置服務), 彩信或者運營商計費網絡——才能用或者要通過一個特定的協議才能傳輸你的數據的時候,這個功能就派上用場了。

你的app動態選擇並連接一個網絡連接的步驟如下:

  1. 新建一個ConnectivityManager.

  2. 使用NetworkRequest.Builder 類創建一個NetworkRequest對象並指定你的app需要的網絡特性和傳輸類型。

  3. 要掃描合適的網絡,請調用requestNetwork() 或者 registerNetworkCallback(), 並將NetworkRequest對象和一個ConnectivityManager.NetworkCallback作爲參數傳過去。如果你要在合適的網絡被掃描到之後就切換到這個網絡,請調用用 requestNetwork() 方法 如果僅僅接收掃描結果而不切換網絡的話,請使用registerNetworkCallback() 方法. 當系統探測到一個合適的網絡時連接到這個網絡並調用onAvailable()方法。你可以使用這個方法傳進來的Network對象得到這個網絡更多的信息或者使用此網絡。

低功耗藍牙

表示不懂……

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

使用新的android.bluetooth.le API,你的app可以廣播廣告(broadcast advertisements)、掃描響應(scan for responses)並與附近的低功耗藍牙設備連接。要使用新的廣播和掃描特性,請在manifest文件中添加BLUETOOTH_ADMIN權限。當用戶下載或者更新你的app時,會被請求允許這些權限。

要開始Bluetooth LE advertising以便別的設備可以發現你的app,請調用startAdvertising()將一個AdvertiseCallback作爲參數傳進去。這個callback對象會接收advertising功能或者失敗的消息。

Android 5.0 引入了ScanFilter,這樣你的app就可以只搜索你需要的特定類型的設備。調用startScan()方法並傳遞進一個filter列表以掃描低功耗藍牙設備——你必須提供一個ScanCallback以在Bluetooth LE advertisement被發現後可以報告。(............)

NFC增強

Android 5.0對NFC進行了以下增強以使其得以更廣泛和靈活的應用:

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

  • 你的應用可以通過invokeBeam()調用Android Beam以分享數據。避免了用戶必須自己手動操作設備以來分享數據的麻煩。

  • 你現在可以使用createTextRecord()方法創建包含UTF-8文本格式數據的NDEF記錄。

  • 如果你在開發一款支付類應用,你現在可以對過調用registerAidsForService()以動態地註冊一個NFC應用ID(AID)。你也可以使用setPreferredService()方法用於在某個特定的acitivy處於前臺時指定一個偏好的Card Emulation服務。

Project Volta

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

Scheduling jobs

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

  • 應用有可延後執行的後臺任務。

  • 應用有你想在充電時才執行的任務。

  • 應用有需要網絡或者WIFI才能執行的任務。

  • 應用有一些要定期統一執行(run as a batch on a regular schedule)的任務。

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

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

  • 設備充電時開始執行。

  • 設備連接到非計費網絡時開始執行。

  • 設置空閒時開始執行。

  • 在某個deadline前或者某個delay後結束執行。

舉例,如果你想在設備連接到非計費網絡時執行,可以這樣做:

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

如果設備有一個穩定的電源(進入充電狀態超過兩分鐘並且電量處於健康水平),系統就會執行被安排好的任務,即使該任務的deadline還沒有過期(???even if the job’s deadline has not expired)。

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

電量使用開發工具

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

  • 電池相關事件歷史。

  • 設備的全局數據。

  • 每個UID和系統組件的粗略的電量使用。

  • Per-app mobile ms per packet

  • 系統UID總數據。

  • 應用UID總數據。

使用--help可以學習更多的參數選項以輸出你想要的數據。比如,要輸出上次充電後某個指定app的電量使用數據,執行如下命令:

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

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

Android在辦公和教育中的應用

不知所云,一片胡扯,譯者處於昏迷狀態

Managed provisioning

Android 5.0 爲在辦公環境中運行的app提供了新的功能。如果用戶已經在設備上有了一個個人賬戶,設備管理員可以啓動一個管理配置進程(managed provisioning process)以再添加一個共存但是相互獨立的profile。受管理的profiles關聯的app與非受管理的app並列出現在Launcher、最近任務和通知裏面。

要啓動管理配置進程,發起一個ACTION_PROVISION_MANAGED_PROFILE Intent。如果調用成功的話,系統回調onProfileProvisioningComplete()。然後你可以調用setProfileEnabled() 來啓動這個受管理的profile。

默認情況下,在受管理的profile裏面只有很少的app可用。你可以在受管理profile裏面調用enableSystemApp()來使其他app在包含進profile中。

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

查看Sample中的BasicManagedProfile來學習如何使用這些新功能。

設備所有者(Device owner)

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

要部署並激活設備所有者,在設備的unprovisioned狀態下,進行從一個編程應用(programming app)到設備NFC數據傳輸。傳輸的數據和上面剛剛提到的provisioning intent中的數據相同。

屏幕固定

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

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

  • 手動固定:用戶可以拖動開啓屏幕固定。設置>安全>屏幕固定,然後選擇在最近任務界面選擇在固定的任務。

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

任務鎖定後,會:

  • 狀態欄變空,用戶通知和狀態信息被隱藏。

  • 主屏幕和最近任務按鈕被隱藏。

  • 其他app打不開新的activity。

  • 只要不開啓新的task,當前app可以打開新的activity。

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

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

打印框架

以bitmap渲染PDF

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

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

系統

應用使用數據

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

系統按應用分別收集使用數據,並且按天、周、月、年整合數據。系統保存數據的最長時間如下:

  • Daily data: 7天

  • Weekly data: 4周

  • Monthly data: 6個月

  • Yearly data: 2年

對於每個應用,系統記錄如下數據:

  • 應用上次使用時間。

  • 對應時間段內應用前臺運行總時間(by day, week, month, or year)。

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

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

測試 & 輔助功能

測試和可訪問性改進

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

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

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

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

  • 新的AccessibilityNodeInfo.AccessibilityAction類讓你可以在AccessibilityNodeInfo上執行標準的或者自定義的動作。新的 AccessibilityNodeInfo.AccessibilityAction類取代了AccessibilityNodeInfo中的早期action API。

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

IME

更容易地切換輸入語言

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

Manifest 聲明

Declarable required features

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

  • 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

現在<uses-permission>已經支持下面的權限,如果你需要的話就加上它吧。

BIND_DREAM_SERVICE: 如果目標API是21或更高, Daydream服務需要使用這個權限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章