當前位置:
首頁 > 最新 > Android 新特性介紹

Android 新特性介紹

本文主要介紹Android 5.0之後的新特性.

一.Android 5.0 新特性

RecyclerView: 提供一種插拔式的體驗,它具有高度的解耦、異常的靈活和更高的效率,通過設置它提供的不同LayoutManager、ItemDecorration、ItemAnimation可實現更加豐富多樣的效果。

CardView:繼承自FrameLayout類,所以子控制項設置原則和FrameLayout一樣。並且可以設置圓角和陰影。

全新的Material Design 設計風格。

支持64位ART 虛擬機。

Face unlock 面部解鎖。

二.Android 6.0 新特性

應用許可權管理

App Links

取消支持Apache Http客戶端

2.1應用許可權管理介紹

從Android 6.0(API 23)開始,對系統許可權做了很大的改變。在之前用戶安裝APP前,只是把APP需要使用的許可權列出來給用戶告知一下,APP安裝後都可以訪問這些許可權。從6.0開始,一些敏感許可權,需要在使用時動態申請,並且用戶可以選擇拒絕授權訪問這些許可權,已授予過的許可權,用戶也可以去APP設置頁面去關閉授權。這對用戶來說提高了安全性,可以防止一些應用惡意訪問用戶數據,但是對於開發來說,也增加了不少工作量,這塊不做適配處理的話,APP在訪問許可權的時候會容易crash。

許可權主要分為normal、dangerous、signature和signatureOrSystem四個等級,常規情況下我們只需要了解前兩種,即正常許可權和危險許可權。

正常許可權

危險許可權&許可權組

系統根據許可權用途又定義了許可權組,每個許可權都可屬於一個許可權組,每個許可權組可以包含多個許可權.例如聯繫人許可權組,包含讀取聯繫人、修改聯繫人和獲取賬戶三個許可權.

如果應用申請訪問一個危險許可權,而此應用目前沒有對應的許可權組內的任何許可權,系統會彈窗提示用戶要訪問的許可權組(注意不是許可權).例如無論你申請READ_CONTACTS還是WRITE_CONTACTS,都是提示應用需要訪問聯繫人信息.

如果用戶申請訪問一個危險許可權,而應用已經授權同許可權組的其他許可權,則系統會直接授權,不會再與用戶有交互.例如應用已經請求並授予了READ_CONTACTS許可權,那麼當應用申請WRITE_CONTACTS時,系統會立即授予該許可權。

單個運行許可權請求

目前TCL電視應用的解決方法:

將targetSDKVersion人為的降到小於23,這樣就變成了還是默認使用許可權,但是這種並不是Google所推薦使用的。

TV端弊端:不能應用Android 最新的特性,如畫中畫與多窗口。

手機端弊端:如果用戶手動進入設置關閉該應用打開攝像頭的許可權,可能會導致無法啟動攝像頭,且沒有提示,這樣的用戶體驗顯然不好。

什麼情況下需要申請動態許可權:

滿足兩個條件:①6.0以上系統 ②編譯版本(compileSdkVersion)API23以上

1.檢查許可權

應用每次需要危險許可權時,都要判斷應用目前是否有該許可權。

2.請求許可權

3.處理請求許可權響應權

多個許可權請求

1.申明許可權

2.檢查許可權

3.處理請求許可權響應

2.2 App Links

App Links是Android M以上的特有功能,即實現了auto-verify支持用戶點擊一個鏈接即可喚起APP,而不用像以往版本中需要點擊一個選擇框列表。為了使自己的應用支持App Links,我們常需要以下三個步驟:

在manifest中創建Intent filter

在Activity中編寫對應的代碼邏輯處理收到的url links

通過配置證書文件,關聯網頁和應用

https://www.jianshu.com/p/44d825c77bd5

https://www.jianshu.com/p/d26d62a992f8

2.3 移除了對Apache HTTP 的支持

Android 6.0 版移除了對 Apache HTTP 客戶端的支持。如果您的應用使用該客戶端,並以 Android 2.3(API 級別 9)或更高版本為目標平台,請改用 HttpURLConnection 類。此 API 效率更高,因為它可以通過透明壓縮和響應緩存減少網路使用,並可最大限度降低耗電量。要繼續使用 Apache HTTP API,您必須先在 build.gradle 文件中聲明以下編譯時依賴項:

android {

}

三.Android 7.0 新特性

改進的Java 8 語言支持

Google Assistant

多窗口模式

FileProvider

3.1 多窗口

1、一般情況下,版本target大於24,App默認都允許分屏模式。但有的開發者認為自己的App只有在全屏狀態下才能正常使用,要是被分屏的話用起來會很難受,這時候就得對該App禁用分屏模式。具體操作是在AndroidManifest.xml的application節點添加屬性android:resizeableActivity="false",表示應用頁面不接受分屏;如此一來,即使用戶開啟了分屏模式,切換到該應用時仍會強制回到全屏模式。

2、App頁面從全屏模式切換到分屏模式,它的Activity生命周期會經歷銷毀後重建的過程,如果開發者想保持App頁面在分屏前的模樣,則需給該頁面的activity節點加上以下的屬性描述,告知系統不要對這個頁面動手動腳:android:configChanges="screenLayout|orientation"

3、對於視頻播放頁面,建議Activity代碼不在onPause方法中暫停播放視頻,而應當在onStop方法中暫停播放,並在onStart方法中恢復播放視頻。

4、App運行過程中,若想獲知當前是否處於分屏模式,則可調用isInMultiWindowMode方法,該方法返回true表示處於分屏模式,返回false表示處於全屏模式。

5、每當進入多窗口,或者退出多窗口的時候,應用會觸發Activity頁面的onMultiWindowModeChanged方法。通過重載該方法,開發者可以即時收到分屏與全屏的切換通知。

3.1.1 多窗口-分屏時Activity的生命周期

三種情況

1.當前顯示自己的應用頁面,長按多任務鍵時出現分屏

onMultiWindowModeChanged(true)->onPause-onStop->onDestroy->onCreate->onStart- >onResume->onPause

2.分屏時長按多任務鍵,全屏顯示自己的應用時

onStop->onDestroy->onCreate->onStart->onResume>onPause>onMultiWindowModeChanged(false)->onResume

3.當前顯示其他應用,按多任務鍵出現自己的應用時

onMultiWindowModeChanged(true)->nDestroy->onCreate->onStart->onResume需

3.2 File Provider (應用共享文件)

Android 7.0強制啟用了被稱作 StrictMode的策略,帶來的影響就是你的App對外無法暴露file://類型的URI了。

如果你使用Intent攜帶這樣的URI去打開外部App(比如:打開系統相機拍照),那麼會拋出FileUriExposedException異常。

FileProvider使用大概分為以下幾個步驟:

manifest中申明FileProvider

res/xml中定義對外暴露的文件夾路徑

生成content://類型的Uri

給Uri授予臨時許可權

使用Intent傳遞Uri

https://www.jianshu.com/p/55eae30d133c

四. Android 8.0 新特性

1. 畫中畫模式 — PIP

2. 自適應圖標 — Adaptive Icons

3. 後台限制

4. 安裝限制

5. Smart Text Selection

6. 應用加速

7. TensorFlow Lite

4.1 畫中畫模式(Picture in Picture)

1.Activity默認不支持該模式。若想讓App頁面能夠顯示畫中畫的效果,則必須給activity節點添加supportsPictureInPicture:="true「

App頁面從全屏模式切換到畫中畫模式,它的Activity生命周期也會經歷銷毀後重建的過程,如果開發者想保持App頁面不被重建,則需給該頁面的activity節點加上android:configChanges="screenLayout|orientation"

2.對於視頻播放頁面,Activity代碼同樣不在onPause方法中暫停播放視頻,而應當在onStop方法中暫停播放,並在onStart方法中恢復播放視頻。

3. App若想獲知當前是否處於畫中畫模式,則可調用isInPictureInPictureMode方法,該方法返回true表示處於畫中畫模式,返回false表示處於全屏模式。

4.每當App進入畫中畫,或者退出畫中畫的時候,應用會觸發Activity頁面的onPictureInPictureModeChanged方法。通過重載該方法,應用可以實時收到畫中畫與全屏的切換通知,並在此控制控制項的展示。比如進入畫中畫時,隱藏除視頻畫面之外的所有控制項;退出畫中畫時,則恢復這些控制項的正常顯示.

5.進入畫中畫模式生命周期如下圖:

6.啟動畫中畫模式始,一些

7.重寫onPictureInPictureModeChanged方法

4.2 Android 8.0適配問題

1.Android 8.0 廣播限制

在Android 8.0的平台上,應用不能對大部分的廣播進行靜態註冊,也就是說,不能在AndroidManifest文件對有些廣播進行靜態註冊,這裡必須強調是有些廣播,因為有些廣播還是能夠註冊的。比如,經過樓主測試,對接收Android 開機的廣播通過靜態註冊還是能夠正常接收的.

解決辦法

1. 靜態註冊,也就是說在AndroidManifest文件中對BroadcastReceiver進行註冊,通常還會加上action用來過濾。

2. 動態註冊,調用Context中的registerReceiver對廣播進行動態註冊,使用unRegisterReceiver方法對廣播進行取消註冊的操作。

2.許可權申請注意問題

8.0以前,申請一個子許可權會自動獲取許可權組中其他子許可權。組內其他子許可權可以直接使用。

8.0以後申請一個子許可權,組內其他子許可權不會自動獲取。使用組內其他子許可權的時候。需要再次申請。(但是這種情況不會彈出系統的許可權申請框)。

3.應用安裝:未知來源應用安裝

1.在清單文件中增加請求安裝許可權

2.我們還需要在代碼裡面對許可權進行處理 首先用canRequestPackageInstalls()方法判斷你的應用是否有這個許可權

3.如果有這個許可權,再去執行安裝,沒有這個許可權,需要用戶跳轉到設置界面中自己去打開許可權

4.然後在onActivityResult中去接收結果:許可權,已授予過的許可權,用戶也去


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Android代碼Share 的精彩文章:

TAG:Android代碼Share |