整個8.0適配,設計的部分包括6部分(我專案中的,其他的適配感覺並不會影響專案的執行)
1)執行時許可權
2)通知notifaction適配
3)未知**apk安裝適配
4)後台執行限制(後台服務)
5)懸浮框適配
6)集合的處理 (abstractcollection使用限制)
android6.0的執行時許可權,當乙個許可權被允許後,該許可權同一組中的許可權也都會預設被允許,8.0修復了該bug。每乙個許可權都要去單一申請。
8.0安卓新增了 「通知渠道「 的概念,所有的通知必須增加通知渠道,否則會導致crash。適配起來也是非常的簡單,只要我們建立乙個渠道物件,然後將物件以引數的方式傳入即可。白話:建立 notification.builder 物件的傳參增加了渠道id。
8.0以下建立通知的方式:
8.0以上建立通知的方式分三步:
第一步:建立渠道物件
notificationchannel channel = new notificationchannel(「01」, 「訊息」, notificationmanager.importance_high);
channel.canbypassdnd();//是否繞過請勿打擾模式
channel.enablelights(true);//閃光燈
channel.setlockscreenvisibility(visibility_public);//鎖屏顯示通知
channel.setlightcolor(android.graphics.color.red);//閃關燈的燈光顏色
channel.canshowbadge();//桌面launcher的訊息角標
channel.getgroup();//獲取通知取到組
channel.setbypassdnd(true);//設定可繞過勿擾模式
channel.shouldshowlights();//是否會有燈光
第二步:新增渠道
mnotificationmanager = (notificationmanager) mgcontext.getsystemservice(context.notification_service);
mnotificationmanager.createnotificationchannel(channel);
第三步:建立通知
mbuilder = new notification.builder(mgcontext, 「01」); //此處的01很重要
完整的**如下:
private notificationutil()
/*** 初始化notifacation 包括適配8.0增加channel
*/private void initnotification() else
}
8.0後安裝乙個未知的apk的時候,需求進行判斷,如果是未知**的需要申請許可權。
if (android.os.build.version.sdk_int >= android.os.build.version_codes.o) else
} else
。。。。
//安裝apk
private void installapk(activity context, @nullable string apkpath)
file file = new file(apkpath);
intent intent = new intent(intent.action_view);
if (build.version.sdk_int < build.version_codes.n) else
intent.addflags(intent.flag_activity_new_task);
context.startactivity(intent);
}
隱式廣播:應用無法使用清單註冊隱式廣播,但可以在執行的時候進行顯示廣播的註冊。
後台服務:當應用處於空閒時,幾分鐘後在後台啟動service,會導致crash。解決辦法是將後台服務該為前台服務。
**
* created by malei on 2019/1/22.
* 該類適配service8.0的啟動方式
*/public class baseservice extends service
if (android.os.build.version.sdk_int >= android.os.build.version_codes.o) else
}@override
public void oncreate()
//適配8.0service
private void adapter8()
}@nullable
@override
public ibinder onbind(intent intent)
}
這樣當我們需要使用service的時候,可以直接基礎該baseservice父類。
同時也可以,在大多數情況下,應用都可以使用jobscheduler
克服這些限制。
Android 8 0通知欄推送及適配
首先我們判斷手機版本號,android版本大於8.0的時候呢,我們需要進行一下通道的操作才可 判斷版本號 接好 此處判斷安卓版本號是否大於或者等於android8.0 if build.version.sdk int build.version codes.o elseandroid8.0 適配 t...
Android 8 0後台執行限制
android o 對應用在後台執行時可以執行的操作施加了限制,稱為後台執行限制 background execution limits 這可以大大減少應用的記憶體使用和耗電量,提高使用者體驗。後台執行限制分為兩個部分 後台服務限制 background service limitations 廣播...
Android 8 0無法安裝apk
android 8.0系統比起以前的系統多了乙個安裝未知應用程式的許可權需求 如果我們要在8.0的系統上安裝apk,那麼我們必須獲得這個許可權.直接上 當前版本是否大於等於26 if build.version.sdk int build.version codes.o else override ...