1. 程式人生 > >Android 8.0 通知顯示

Android 8.0 通知顯示

關於通知的屬性設定和常見的使用方法可以看我的這篇:Android 通知(使用NotificationCompat.Builder )當時是依照Android 7.0寫的博文,發現在Android 8.0上無法彈出,這裡做出適配Android O通知的總結。

區別與Android 7.0,需要為通知新增渠道:NotificationChannel。
先上程式碼舉例:

 final String CHANNEL_ID = "channel_id_1";
        final String CHANNEL_NAME = "channel_name_1";

  NotificationManager mNotificationManager = (NotificationManager)
   getSystemService(Context.NOTIFICATION
_SERVICE); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { //只在Android O之上需要渠道 NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH); //如果這裡用IMPORTANCE_NOENE就需要在系統的設定裡面開啟渠道, //通知才能正常彈出 mNotificationManager.createNotificationChannel
(notificationChannel); } NotificationCompat.Builder builder= new NotificationCompat.Builder(this,CHANNEL_ID); builder.setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("通知標題") .setContentText("通知內容") .setAutoCancel(true); mNotificationManager.notify
(notificationId, builder.build());

呼叫以上程式碼可以在Android O上顯示一則通知。
需要注意的是,渠道是向系統註冊的,類似申請許可權,註冊過的渠道在設定裡面都會看見,即使程式碼改變,再次執行,上次註冊的渠道依然會在設定裡,除非清除資料或者解除安裝重灌應用。
渠道使用至少有三個步驟:
1.渠道的初始化(構造方法需要三個引數):

NotificationChannel(String id, CharSequence name, int importance)

id:渠道id,每個packege中應該是唯一的,如果太長,該值可能被截斷
name:使用者可見的渠道名稱,可重新命名,如果太長,該值可能被截斷
importance:用於表示渠道的重要程度。這可以控制釋出到此頻道的中斷通知的方式。有以下6種重要性,是NotificationManager的靜態常量,依次遞增:
IMPORTANCE_UNSPECIFIED(值為-1)意味著使用者沒有表達重要性的價值。此值用於保留偏好設定,不應與實際通知關聯。
IMPORTANCE_NONE(值為0)不重要的通知:不會在陰影中顯示。
IMPORTANCE_MIN(值為1)最低通知重要性:只顯示在陰影下,低於摺疊。這不應該與Service.startForeground一起使用,因為前臺服務應該是使用者關心的事情,所以它沒有語義意義來將其通知標記為最低重要性。如果您從Android版本O開始執行此操作,系統將顯示有關您的應用在後臺執行的更高優先順序通知。
IMPORTANCE_LOW(值為2)低通知重要性:無處不在,但不侵入視覺。
IMPORTANCE_DEFAULT (值為3):預設通知重要性:隨處顯示,產生噪音,但不會在視覺上侵入。
IMPORTANCE_HIGH(值為4)更高的通知重要性:隨處顯示,造成噪音和窺視。可以使用全屏的Intent。
2.將渠道新增到NotificationManager
使用NotificationManager的createNotificationChannel方法

void createNotificationChannel (NotificationChannel channel)

3.builder的構造方法使用有兩個引數的那一個

NotificationCompat.Builder(Context context, String channelId)

注意:channelId使用跟第一步一樣的id
如上新增三步,適配Android 8.0通知的新特性,讓通知成功出現。
*4.渠道的屬性設定


// 配置通知渠道的屬性
notificationChannel .setDescription("渠道的描述");
// 設定通知出現時的閃燈(如果 android 裝置支援的話)
notificationChannel .enableLights(true);
notificationChannel .setLightColor(Color.RED);
// 設定通知出現時的震動(如果 android 裝置支援的話)
notificationChannel .enableVibration(true);
notificationChannel .setVibrationPattern(new long[]{1000, 2000, 1000,3000});
//如上設定使手機:靜止1秒,震動2秒,靜止1秒,震動3秒

使用者可以在設定裡面阻止或允許應用通知,渠道名稱和屬性在設定裡是可以看的,如下圖:

應用通知的詳情 應用渠道的詳情
這裡寫圖片描述 這裡寫圖片描述

使用者可以修改渠道的優先順序

這裡寫圖片描述

相關推薦

Android 8.0 通知顯示

關於通知的屬性設定和常見的使用方法可以看我的這篇:Android 通知(使用NotificationCompat.Builder )當時是依照Android 7.0寫的博文,發現在Android 8.0上無法彈出,這裡做出適配Android O通知的總結。 區

Android 8.0通知顯示

Android 8.0通知需要設定通知渠道才能正常顯示,步驟如下:1、定義通知id、通知渠道id、通知渠道名private static final int PUSH_NOTIFICATION_ID = (0x001); private static final String

Android 8.0 電池顯示,電池定製

這篇文章主要說的是android8.0SystemUI電池顯示方面。 好像是從android8.0起,電池是通過程式碼繪製的,並非往常版本是使用drawable下的圖片直接顯示的,這樣的話,修改起來就比較麻煩。 一、電池佈局 frameworks\base\packages\SystemUI\r

相容 android 8.0 通知

import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; imp

Android 8.0 通知適配

下面說一下Android O (8.0)(API 26)通知的相關適配 一、分析 Android O 之前開啟一個App的設定的通知是這樣的 傳送一條通知通過下面程式碼 /* * 簡單的傳送通知 */ private void showNotification

android 通知android 8.0可用)

通知 bsp null uil build eat 正常 nag HA final String CHANNEL_ID = "channel_id_1"; final String CHANNEL_NAME = "channel_name_1"; Notificatio

解決Android 8.0 的Notification不顯示問題

Notification在android 8.0以上設定時,需要設定渠道資訊才能夠正常顯示通知。本以為很簡單,上網查了很多資料都不行,後面決定自己去看Notifacation的原始碼,終於找到了解決方案,在這裡和大家做個分享。廢話不多說,直接上程式碼: String id = "my_chann

Android 8.0 通知欄不顯示

由於 Google Play 現在限制了上傳 APK 的 targetSdkVersion,所以在新專案中就開始把版本號升到最高,這樣一來之前前人寫的一些程式碼庫就會出現相容性的問題,比如下載更新 APK 時,FileProvider 問題(我上一篇有講到過)。比如在下載的過

Notification通知全文 7.0 and 8.0通知 ,橫幅 ,顯示,抖動,響鈴

RemoteViews在更改通知(Notification)中經常會用到   RemoteViews所支援的View型別如下圖所示(注意不支援下圖中View的子類): RemoteViews所支援的View的型別 RemoteViews沒有提供find

android 8.0 notification通知適配踩坑

老專案通知這塊要適配8.0, 所以按照老套路 開啟百度 深入andoid notificion 8.0 ctrl c and ctrl+v 一頓熟悉的操作, 然後測試執行專案 ! 尼瑪, 不行!! 在8.0上不行 ,心裡一頓的問候, 然後開始網上各種解決辦法對比,自己的程式碼跟別人說的一樣啊 加一個

android 8.0 新特性:通知渠道

  由於Google的限制,要求在2018年10月之前 targetSdkVersion 必須在26以上,更改過之後發現在androd 8手機上不再推送通知,檢視android 8.0官方文件發現,添加了通知渠道新特性,並要求targetSdkVersion 26以上的and

Android 8.0 廣色域影象的支援導致Fresco報錯無法顯示的BUG bitmap marked for reuse (xxxx bytes) can't fit new bitmap (xx

 突然發現,8、0以上的手機用Fresco展示某些圖片的時候,會出現無法載入的情況,報錯bitmap marked for reuse (xxxx bytes) can't fit new bitm

Android 8.0系統的應用圖示不顯示問題

Android 8.0之後,APP的應用圖片會顯示成AndroidStudio的預設圖示(機器人的那個),那麼如果才能顯示我們自己設計的圖示呢?結論是:要做Android 8.0的系統圖片適配。1、在下圖中的mipmap-anydpi-v26資料夾上右鍵,New->Im

PopWindow Android 7.0位置顯示不準確以及Android 8.0全面屏顯示導航鍵留白解決辦法

popWindow 在Android7.0上的顯示位置不管怎麼設定都在螢幕的頂部,這是7.0的bug,已在7.1修復,但是7.0還是需要我們自己解決的,以及在小米mix2全面屏導航鍵留白,顯示不全。如圖: 方法如下: @Override public void sho

Android 8.0後notification通知聲音無法關閉或開啟的問題

Android O更新已經有很長一段時間了,然而也帶來了很多適配的問題,比如:app無法自動安裝的問題,通知欄無法顯示的問題等等。今天我們說說通知欄的聲音無法關閉的問題。 因為很多應用更新用的是notification建立一個前臺通知,放在通知欄中給使用者展示下載進度和提示內

關於Android 8.0後notification通知聲音無法關閉或開啟的問題

Android O更新已經有很長一段時間了,然而也帶來了很多適配的問題,比如:app無法自動安裝的問題,通知欄無法顯示的問題等等。今天我們說說通知欄的聲音無法關閉的問題,此篇博文針對關閉聲音的,如果想開啟聲音則相反,道理一樣的。 因為很多應用更新用的是noti

Android 8.0 AlarmManager 後臺定時任務

blank 也有 情況 pre ati ng- TP 問題 manage 以前在Android 4.0時,alarmManager 沒什麽問題。後來android為了優化系統耗電情況,引入了doze模式,參見此頁 https://developer.android.com/

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

channel 資料 兼容 androi adb install 只需要 方法 tps 雖然 Android 9.0 都已經面世了,本篇文章寫的有點遲了。 但是遲到好過不到,因此基於此這邊還是記錄一下項目中遇到的 Android 8.0 的坑及對應解決方法。 每次系統

解決:Android 8.0檢測不到當前的activity

detail itl href 9.png 8.0 target cti htm EDA 前兩天從Android 7.0升級到Android 8.0,今天在用 adb shell dumpsys activity | findstr "mFocusedActivity"來獲

Android 8.0 system app載入so Permission denied 解決

在預置包含react native 的Android app 預置到mtk 6739的系統中,此app 具體 platform 簽名。此app啟動會載入一些 facebook的so庫 發現此app 如果預置到system/app下,啟動會報錯。開始以為是沒有把相關的so庫 放到 sys