Android 8.0 的部分坑及對應解決方法

雖然 Android 9.0 都已經面世了,本篇文章寫的有點遲了。 可是遲到好過不到,所以基於此這邊仍是記錄一下項目中遇到的 Android 8.0 的坑及對應解決方法。android

每次系統升級,雖然系統功能更增強大了,各方面性能也提升了。git

可是對於開發者而言,一個困擾的問題也是隨之而來——兼容。github

尤爲對於一些已經上市的 App 而言,在新系統發佈以前就要了解到底有哪些改動,以免用戶升級新系統後致使 App 無法正常運行。bash

好了,迴歸主題,說說 Android 8.0 裏面的幾個坑吧。app

喚不起系統安裝器

若是你的 App 提供了更新功能,用戶點擊更新,你下載完 Apk 以後會自動彈出安裝界面。性能

這個安裝界面的彈出就是依賴於系統的安裝器。ui

假設你在 Android 8.0 如下的手機操做正常,可是在 8.0 的手機上,你會發現,下載完以後徹底沒反應。google

這個時候 spa

假設你覺得說彈個提示讓用戶本身安裝,我想說 3d

用戶纔不會理你。用戶分分鐘就不更新了。

因此說咱們要解決這個問題。讓這個安裝器在 Android 8.0 的手機也能正常喚起。

其實解決方法很是簡單。

只須要在 AndroidManifest.xml 中聲明如下權限便可。

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
複製代碼

並且還不須要你在代碼動態申請,是否是 So easy

一行代碼解決這個兼容性問題。

通知問題

假設你的 App 須要在任務欄顯示通知。若是你是按照 Android 8.0 以前的寫法的話。那麼在 8.0 的手機上面你是顯示不了的。

那怎麼辦呢?

關於通知的基本寫法這邊就再也不贅餘,若是不清楚的小夥伴自行查閱資料。這邊重點說下解決方法。

首先說下下面代碼出現的幾個變量:

private static NotificationManager manager;
public static final String NOTIFICATION_CHANNEL = "your app pkg name";
private static final String NOTIFICATION_CHANNEL_NAME = "App Channel";
複製代碼

第一個寫過通知的都知道,一個管理類。
第二個是通知的一個 CHANNEL,這個也是 8.0 以後才引入的。取值 App 包名便可。
第三個自定義,只要保證惟一便可。

兼容有兩步須要操做。

1. 建立Channel
private static void createChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notifyChannel = new NotificationChannel(NOTIFICATION_CHANNEL,
                    NOTIFICATION_CHANNEL_NAME,
                    NotificationManager.IMPORTANCE_DEFAULT);
            notifyChannel.setLightColor(Color.GREEN);
            notifyChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
            manager.createNotificationChannel(notifyChannel);
        }
    }
複製代碼
2. 獲取 Notification.Builder
private Notification.Builder getNotificationBuilder(Context sourceContext) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            return new Notification.Builder(sourceContext, NOTIFICATION_CHANNEL);
        } else {
            return new Notification.Builder(sourceContext);
        }
    }
複製代碼

能夠看到,上面的操做都以 8.0 做爲分界處理。

作完這兩步,以前不能顯示通知的 App 就能夠顯示了。

更多內容能夠看官方示例: github.com/googlesampl…

相關文章
相關標籤/搜索