1. 程式人生 > >android通知欄的訊息通知(Notification)

android通知欄的訊息通知(Notification)

轉載請註明出處:

在開發中經常會用到推送給使用者通知、訊息等的情況,今天就跟大家一起來學習推送訊息時通知欄的通知Notification。

通知欄訊息通知的使用步驟

一般可以分為以下步驟:
1. 首先需要一個NotificationManager對通知進行管理
2. 為了相容低版本使用v4包中的NotificationCompat類的構造器來build Notification物件
3. 在build同時可以新增Notification的標題、內容、時間、圖片等通知引數和內容
4. 建立點選通知時要跳轉的頁面
5. 獲取要跳轉頁面的PendingIntent物件,並在build Notification物件時關聯
6. NotificationManager notify傳送訊息通知

下面就帶大家來實現通知欄訊息Notification,先上圖如下:

此圖是執行在Android4.2.2手機上,不同版本可能會有差異

使用通知程式碼實現

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;
}