Android8.0系統通知欄的適配
阿新 • • 發佈:2018-12-12
Android8.0系統通知欄的每條通知都有一個對應的渠道,使用者可以選擇是否要關閉哪個渠道的通知。下面這張圖就有兩個通知渠道,由使用者自由選擇是否關閉哪一條渠道的通知,就能避免一些垃圾推送訊息的打擾。
如果將專案中的SDK版本指定到了26或者更高,還不進行通知欄的適配,那麼就會報錯或無法將通知顯示出來。
建立一個通知渠道要有ID、名稱和等級這三個引數
有四個等級,由高到低: IMPORTANCE_HIGH: 會彈出,有提示音,狀態列有顯示 IMPORTANCE_DEFAULT:不會彈出,有提示音,狀態列有顯示 IMPORTANCE_LOW :不會彈出,無提示音,狀態列有顯示 IMPORTANCE_MIN :不會彈出,無提示音,狀態列無顯示
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_sms_notify; //渠道ID private static final String channel_Id_sms = "sms"; private static final String channel_Id_express = "express"; //渠道名稱 private static final String channel_Name_sms = "簡訊訊息"; private static final String channel_Name_express = "快遞訊息"; //渠道等級 private static final int importance_sms = NotificationManager.IMPORTANCE_HIGH; private static final int importance_express = NotificationManager.IMPORTANCE_DEFAULT; private Button btn_express_notify; private NotificationManager express_notificationManager; private NotificationManager sms_notificationManager; private NotificationManager manager; private NotificationChannel channel; private Notification express_notification; private android.app.Notification sms_notification; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //判斷SDK版本 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { /*呼叫createNotificationChannel()方法,傳入id,名字,等級引數*/ createNotificationChannel(channel_Id_sms, channel_Name_sms, importance_sms); createNotificationChannel(channel_Id_express, channel_Name_express, importance_express); } initView();//檢視初始化 } /*建立一個通知渠道需要渠道ID、名稱以及等級這三個引數*/ @RequiresApi(api = Build.VERSION_CODES.O) private void createNotificationChannel(String channel_id, String channel_name, int importance) { channel = new NotificationChannel(channel_id, channel_name, importance); manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); manager.createNotificationChannel(channel); } private void initView() { btn_sms_notify = findViewById(R.id.btn_sms_notify); btn_sms_notify.setOnClickListener(this); btn_express_notify = findViewById(R.id.btn_express_notify); btn_express_notify.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_sms_notify: //要跳轉的意圖 Intent intent = new Intent(this, com.example.lin.notificationmanager.Notification.class); PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0); sms_notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //構建通知物件需傳入上下文和通知渠道ID sms_notification = new NotificationCompat.Builder(this, "sms") //標題 .setContentTitle("簡訊資訊") //內容 .setContentText("有一條新簡訊。") //自動取消 .setAutoCancel(true) //小圖示 .setSmallIcon(R.mipmap.ic_launcher) //系統時間 .setWhen(System.currentTimeMillis()) //大圖示 .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) //要跳轉的意圖 .setContentIntent(pi) //處於鎖屏狀態時LED燈一閃一暗 .setLights(Color.GREEN, 1000, 1000) //震動200Ms .setVibrate(new long[]{0, 200}) //設定橫幅通知欄,需開啟通知橫幅提醒許可權 .setPriority(NotificationCompat.PRIORITY_MAX) /* 顯示很長的文字 .setStyle(new NotificationCompat.BigTextStyle().bigText())*/ .build(); //傳送通知 sms_notificationManager.notify(1, sms_notification); break; case R.id.btn_express_notify: express_notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); express_notification = new NotificationCompat.Builder(this, "express") .setContentTitle("快遞資訊") .setContentText("快遞到了,快去取吧。") .setSmallIcon(R.mipmap.ic_launcher) .build(); express_notificationManager.notify(2, express_notification); break; } } }