Android 8.0適配,O系統(tǒng)遷移指南

最近在做8.0以及P版本的是適配,對安卓的行為變更,對企業(yè)項目的影響做了簡單的整理

Android 8.0 行為變更主要分為兩個部分:針對所有 API 級別的應(yīng)用針對Android 8.0 的應(yīng)用

詳情請見:https://developer.android.google.cn/about/versions/oreo/android-8.0-changes.html#atap

針對企業(yè)項目適配Android8.0可能受影響的模塊:

個別功能特別說明:

1.?Android8.0運(yùn)行時權(quán)限策略變化和適配方案

Android系統(tǒng)的運(yùn)行時權(quán)限是從Android 6.0(Android M)開始加入的,在安卓O系統(tǒng)之前,如果應(yīng)用在運(yùn)行時動態(tài)請求權(quán)限并被用戶授予了該權(quán)限,系統(tǒng)會同時將屬于同一權(quán)限組并且在Manifiest清單中注冊的其它所有權(quán)限也一起授予給應(yīng)用。

對于安卓O系統(tǒng)的應(yīng)用,此行為已經(jīng)被糾正,系統(tǒng)只會授予應(yīng)用明確請求的權(quán)限,權(quán)限授予后并不會一起把同一權(quán)限組的其它所有權(quán)限也授予給應(yīng)用。

在安卓O系統(tǒng),一旦用戶為應(yīng)用授予某個權(quán)限,則所有后續(xù)對該權(quán)限組中其它權(quán)限的權(quán)限請求都將被自動批準(zhǔn)。舉個例子,假設(shè)某個應(yīng)用在其清單(Manifiest.xml)中列有READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE兩個權(quán)限。應(yīng)用動態(tài)運(yùn)行時請求READ_EXTERNAL_STORAGE,并且用戶授予了該權(quán)限,如果該應(yīng)用針對的是API級別24或更低級別(targetVersion

<= 24),系統(tǒng)還會同時授予WRITE_EXTERNAL_STORAGE,因為該權(quán)限也屬于STORAGE權(quán)限組并且也在清單中注冊過。如果該應(yīng)用針對的是Android O(targetVersion = 25),則系統(tǒng)此時僅會授予READ_EXTERNAL_STORAGE,不過在該應(yīng)用以后動態(tài)申請WRITE_EXTERNAL_STORAGE權(quán)限時,系統(tǒng)會立即授予該權(quán)限,而不會提示用戶。

Android 8.0 引入了多個與電話有關(guān)的新權(quán)限:

ANSWER_PHONE_CALLS允許您的應(yīng)用通過編程方式接聽呼入電話。要在您的應(yīng)用中處理呼入電話,您可以使用acceptRingingCall()函數(shù)。

READ_PHONE_NUMBERS權(quán)限允許您的應(yīng)用讀取設(shè)備中存儲的電話號碼。

這些權(quán)限均被劃分為危險類別,屬于PHONE權(quán)限組。

2.?Android 8.0針對服務(wù)、廣播兩個組件的限制以及適配方案?

安卓O對服務(wù)、廣播兩個組件的限制

1.對服務(wù)的限制

前臺服務(wù)不受影響,但后臺服務(wù)會被限制。只要滿足以下任意一個都認(rèn)為是前臺App:
App有一個可見的Activiy
App有一個前臺是service
App與其他前臺App有交互,比如遠(yuǎn)程服務(wù)綁定、數(shù)據(jù)庫監(jiān)聽、使用其中一個內(nèi)容提供程序等(IME、壁紙服務(wù)、壁紙服務(wù)、壁紙服務(wù))
如果以上條件均不滿足,應(yīng)用將被視為處于后臺。前臺App的service使用可以隨心所欲,但是當(dāng)應(yīng)用退入后臺進(jìn)入idle狀態(tài)時,系統(tǒng)會停止這個應(yīng)用的service,停止方式與Service.stopSelf()方法等效。Android8.0系統(tǒng)不允許后臺應(yīng)用創(chuàng)建后臺服務(wù)。 因此,Android 8.0 引入了一種全新的方法,即Context.startForegroundService(),以在前臺啟動新服務(wù)。在用普通方法創(chuàng)建服務(wù)后,應(yīng)用有五秒的時間來調(diào)用該服務(wù)的 startForeground() 方法以顯示新服務(wù)的用戶可見通知。如果應(yīng)用在此時間限制內(nèi)未調(diào)用 startForeground(),則系統(tǒng)將停止服務(wù)并拋出ANR異常

2.對廣播的限制

從Android7.0已經(jīng)對廣播的做了限制。主要是對”CONNECTIVITY_ACTION”, “ ACTION_NEW_PICTURE or ACTION_NEW_VIDEO”三個廣播做了限制。Android 8.0 讓這些限制更為嚴(yán)格。
豁免列表可參見:https://blog.csdn.net/hqocshheqing/article/details/76850164

3.List.sort()集合的處理

在 Android 8.0 之前的平臺版本中,如果通過調(diào)用 List.sort() 進(jìn)行排序,則當(dāng)?shù)幚?ArrayList 以及在迭代過程中調(diào)用 sort() 時,會引發(fā)ConcurrentModificationException。而 Collections.sort() 則不會引發(fā)異常。現(xiàn)在,在Android8.0系統(tǒng),兩種方法都會引發(fā) ConcurrentModificationException。

4.Android8.0通知欄適配

在 Android 8.0 中,通知被重新設(shè)計,引入了NotificationChannel的概念。如果不需要使用8.0系統(tǒng)引入的新特性,只需注意創(chuàng)建通知對象時NotificationCompat.Builder builder = new NotificationCompat.Builder(context, Integer.toString(notificationId));方法第二個參數(shù)意義降發(fā)生變法,不再是通知ID,而是變成了通知channel,如果沒有按照NotificationChannel正確方法啟動通知,將會無法彈出消息通知界面

5.Android8.0未知來源應(yīng)用安裝權(quán)限方案


Android8.0的諸多新特性中有一個非常重要的特性:未知來源應(yīng)用權(quán)限。以前安裝未知來源應(yīng)用的時候一般會彈出一個彈窗讓用戶去設(shè)置允許還是拒絕,并且設(shè)置為允許之后,所有的未知來源的應(yīng)用都可以被安裝。Android8.0的變化是,引入未知來源應(yīng)用的管理列表(系統(tǒng)設(shè)置界面里面),需要在里面打開每個應(yīng)用的未知來源的安裝權(quán)限才能安裝應(yīng)用。應(yīng)用直接適配到Android8之后,內(nèi)部啟動應(yīng)用安裝是會被阻塞的,如果不處理好這個未知來源的權(quán)限,會導(dǎo)致應(yīng)用根本無法下載升級安裝,只能去應(yīng)用市場重新下載。

適配方案:https://blog.csdn.net/github_2011/article/details/78589514?locationnum=2&fps=1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內(nèi)容