android通知欄的訊息通知(Notification)
阿新 • • 發佈:2019-02-10
轉載請註明出處:
在開發中經常會用到推送給使用者通知、訊息等的情況,今天就跟大家一起來學習推送訊息時通知欄的通知Notification。
通知欄訊息通知的使用步驟
一般可以分為以下步驟:
1. 首先需要一個NotificationManager對通知進行管理
2. 為了相容低版本使用v4包中的NotificationCompat類的構造器來build Notification物件
3. 在build同時可以新增Notification的標題、內容、時間、圖片等通知引數和內容
4. 建立點選通知時要跳轉的頁面
5. 獲取要跳轉頁面的PendingIntent物件,並在build Notification物件時關聯
6. NotificationManager notify傳送訊息通知
下面就帶大家來實現通知欄訊息Notification,先上圖如下:
使用通知程式碼實現
public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.noamal).setOnClickListener(this); findViewById(R.id.word).setOnClickListener(this); findViewById(R.id.picture).setOnClickListener(this); } void notification(int type) { Notification notification; Intent intent = new Intent(this, NotificationDetailsActivity.class); //點選通知欄訊息跳轉頁 PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); //建立通知訊息管理類 NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); NotificationCompat.Builder builder = new NotificationCompat.Builder(this)//建立通知訊息例項 .setContentTitle("我是標題") .setContentText("我是內容") .setWhen(System.currentTimeMillis())//通知欄顯示時間 .setSmallIcon(R.mipmap.ic_launcher)//通知欄小圖示 .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.icon))//通知欄下拉是圖示 .setContentIntent(pendingIntent)//關聯點選通知欄跳轉頁面 .setPriority(NotificationCompat.PRIORITY_MAX)//設定通知訊息優先順序 .setAutoCancel(true)//設定點選通知欄訊息後,通知訊息自動消失 // .setSound(Uri.fromFile(new File("/system/MP3/music.mp3"))) //通知欄訊息提示音 // .setVibrate(new long[]{0, 1000, 1000, 1000}) //通知欄訊息震動 // .setLights(Color.GREEN, 1000, 2000) //通知欄訊息閃燈(亮一秒間隔兩秒再亮) .setDefaults(NotificationCompat.DEFAULT_ALL); //通知欄提示音、震動、閃燈等都設定為預設 switch (type) { case 1: notification = builder.build(); //id為通知欄訊息識別符號,每個id都是不同的 manager.notify(Constant.NOAMAL, notification); break; case 2: notification = builder.setStyle(new NotificationCompat.BigTextStyle().bigText("我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容,我是長文字內容")) .build(); manager.notify(Constant.WORD, notification); break; case 3: notification = builder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.big))) .build(); manager.notify(Constant.PICTURE, notification); break; default: break; } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.noamal: notification(1); break; case R.id.word: notification(2); break; case R.id.picture: notification(3); break; } } }
點選通知欄跳轉到的頁面
public class NotificationDetailsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); textView.setText("我是通知詳情頁"); setContentView(textView); // NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //當點選通知訊息跳轉到詳情頁時根據通知訊息的id關閉通知欄的顯示 // manager.cancel(Constant.NOAMAL); // manager.cancel(Constant.WORD); // manager.cancel(Constant.PICTURE); } }
傳送訊息通知的id
public class Constant {
public static int NOAMAL = 1;
public static int WORD = 2;
public static int PICTURE = 3;
}