您好,登錄后才能下訂單哦!
譯自 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
前排渣翻譯預警,如果你能提供更好更專業的翻譯或者提出修改意見就好了……
Android 5.0 (LOLLIPOP) 為用戶和開發人員提供了一些新特性,這篇文章將重點介紹一些值得注意的新增API。
如果你已經發布了一款app,請查看這里 Android 5.0 系統行為變化 以適配你的app. 在Android5.0上,即使你沒有使用最新API或者新功能,這些新的系統行為仍可能會影響你的app。
如果想看一些新平臺的更高級的特性,請看這里
要為Android 5.0開發app,請先使用SDK Mnager下載最新的SDK和系統鏡像。
為使得你的app在Android獲得更好的表現,請將你的targetSdkVersion設置成21。調用最新的Android 5.0 API的時候要注意在調用前判斷系統版本號以兼容之前的系統版本。不能使用低于minSdkVersion的API。詳見Android后向兼容性
欲知更多有關API級別的事兒,看這里:啥是API級別
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設計風格。
以前的版本中,“最近運行”界面對于一個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在最近運行界面上的顏色、標簽和圖標等可見元素。
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() 方法將這個替代通知關聯到這個隱私通知上。
Android 5.0通過關聯在你的通知上的元數據對通知進行智能排序。你可以通過Notification.Builder的下面這些方法設置這些元數據:
setCategory(): 告訴系統當設備處于優先模式(比如這個通知表明來電、即時消息或者鬧鐘)時如何處理通知。
setPriority(): 標記此通知的重要程度——是否比普通通知要高或者低。擁有PRIORITY_MAX 或者 PRIORITY_HIGH級別的通知在有聲音或者振動的情況下,會彈出一個浮動窗口。
addPerson(): 允許你添加一個或者多個與此通知相關聯的人。這樣系統可以根據不同的人把通知分開,并按人物重要性排序。
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指南。
除了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>
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屬性表示相機功能級別。
所有的設備至少可達到INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY級別的硬件支持,此級別功能大致相當于已棄用的Camera API(注:此API在API21開始棄用)。
達到INFO_SUPPORTED_HARDWARE_LEVEL_FULL級別硬件支持的設備可以手動控制圖像的捕捉和后期處理以及以高幀頻捕獲高分辨率的圖像。
要查看如何使用最新的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_WRITE,FLAG_SUPPORTS_DELETE,FLAG_SUPPORTS_THUMBNAIL,FLAG_DIR_PREFERS_GRID,FLAG_DIR_PREFERS_LAST_MODIFIED)。
如果你實現了一個DocumentsProvider并且想要支持子目錄選擇,請實現isChildDocument()方法并將FLAG_SUPPORTS_IS_CHILD放到COLUMN_FLAGS里。
Android 5.0同時也引入了新的共享存儲區上的package-specific目錄,你可以在為里存儲媒體文件,這些媒體文件可以被包含進MediaStore里,新的 getExternalMediaDirs()方法返回你的app在所有共享存儲設備上的媒體存儲目錄。像getExternalFilesDir()一樣不需要特殊權限。系統會定時掃描這些文件夾中的媒體內容,當然你也可以使用MediaScannerConnection自行掃描新內容。(大哥們不要把緩存的圖片放這兒啊,好想把那些將緩存圖片直接放到sd卡某個目錄下的人拉出來打一頓)
Android 5.0支持新的多網絡連接API以使你的app可以根據特定功能(with specific capabilities)動態掃描可用的網絡并建立連接。當你的app需要指定網絡——SUPL(無線位置服務), 彩信或者運營商計費網絡——才能用或者要通過一個特定的協議才能傳輸你的數據的時候,這個功能就派上用場了。
你的app動態選擇并連接一個網絡連接的步驟如下:
新建一個ConnectivityManager.
使用NetworkRequest.Builder 類創建一個NetworkRequest對象并指定你的app需要的網絡特性和傳輸類型。
要掃描合適的網絡,請調用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被發現后可以報告。(............)
Android 5.0對NFC進行了以下增強以使其得以更廣泛和靈活的應用:
Android Beam 可以在分享按鈕中使用了。
你的應用可以通過invokeBeam()調用Android Beam以分享數據。避免了用戶必須自己手動操作設備以來分享數據的麻煩。
你現在可以使用createTextRecord()方法創建包含UTF-8文本格式數據的NDEF記錄。
如果你在開發一款支付類應用,你現在可以對過調用registerAidsForService()以動態地注冊一個NFC應用ID(AID)。你也可以使用setPreferredService()方法用于在某個特定的acitivy處于前臺時指定一個偏好的Card Emulation服務。
除了新特性之外(?),Android 5.0還重點突出了對電池壽命的提升(emphasizes improvements in battery life)。使用新的API和工具可以查看并優化你的app的電量使用。
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 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
來學習如何使用這些新功能。
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)
現在可以用新的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)。
這塊不翻譯了,標題說的很明確了,但是輸入法右下角那個切換按鈕總是誤觸好蛋疼啊~摔~
下面的一些特性已經開始在<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
現在<uses-permission>
已經支持下面的權限,如果你需要的話就加上它吧。
BIND_DREAM_SERVICE: 如果目標API是21或更高, Daydream服務需要使用這個權限。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。