+1

Media and Notification in Android. - Notification

ANDROID NOTIFICATION

Khi sử dụng các ứng dụng hay trò chơi trên smart phone sử dụng hệ điều hành Android thì chúng ta rất hay bắt gặp các thông báo (Notification) của ứng dụng hay trò chơi đó. Ở bài viết này, chúng ta cùng tìm hiểu cách để tạo ra Notification cho android.

Các thành phần của một Notification (View)

  • Small-icon: Là icon nhỏ khi có notification tới hiển thị khi chưa kéo thanh notification.

  • Large-icon: La icon lớn ở phía bên trái khi kéo thanh notification để hiển thị chi tiết.

  • Title: Tiêu đề của notification

  • ContentText: Dòng text sau title

  • Subtext: Dòng text sau ContentText

noti1.jpg

Trong hình trên hiển thị chi tiết 2 notification, notification ở trên hiển thị đầy đủ cả 3 dòng text, còn notification thứ 2 thì không có Subtext().

I) Simple notification

Để tạo một notification trong Android, ta cần 2 đối tượng cơ bản

1) NotificationCompat.Builder

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

Nhiệm vụ của đối tượng này chính là xây dựng notification, chúng ta dung đối tượng để cài đặt các icon, text … cho notification.

2) NotificationManager

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

Đối tượng này chính là đối tượng quản lý notification, chúng ta gán ID cho từng notification và sử dụng chúng cùng với NoificationManager để hiển thị chúng trên thiết bị của mình.

 notificationManager.notify(0, builder.build());

với câu lệnh trên được thực hiện thì thiết bị của chúng ta sẽ hiển thị ngay một notification đã được cài đặt với đối tượng builder trước đó.

builder.build() chính là tạo ra một Notification. Dòng lệnh trên viết tường minh ra cho rõ nghĩa sẽ là


Notification notification = builder.build();
notificationManager.notify(0, notification);

Ngoài ra, đối với các notification được tạo ra. Chúng ta thường cài đặt cho người dùng nhảy vào ứng dụng hay game của chúng ta khi người dùng click hay touch vào notification đó.

Nó cũng tương đương với việc chúng ta tạo ra một Intent và khởi chạy một Activity đã được cài đặt sẵn. Với notification thì chúng ta có thể làm việc đó một cách dễ dàng :

Tạo một PendingIntent

Sử dụng builder.setContentIntent(pendingIntent);

Như vậy, chúng ta sẽ nhảy vào Activity được định nghĩa trong pendingIntent khi click vào notification.


        NotificationCompat.Builder builder =  new NotificationCompat.Builder(this);
        NotificationManager notificationManager =  (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Intent intent = new Intent(this, LoveActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        builder.setSmallIcon(R.drawable.ic_stat_notification);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.large_love));
        builder.setContentTitle("Base Notification");
        builder.setContentText("Welcome to  Base Notification");
        builder.setSubText("Go to love-activity");
        builder.setAutoCancel(true); // Tự động cancel khi ấn vào notification
        builder.setContentIntent(pendingIntent);
        notificationManager.notify(1, builder.build());

Trên đây là đoạn code hoàn chỉnh với việc tạo một Notification cơ bản trong Android.

Ở đây có một lưu ý đối với việc sử dụng setSmallIcon. Đối với mỗi thiết bị khác nhau thì kích thước icon cũng khác nhau. Nên việc thiết kế small icon này cần phải chú ý. Do chúng ta không thể custom được kích thước của việc hiển thị small icon nên ta phải thiết kế nhiều icon khác nhau để phù hợp với các device khác nhau. Khi ta dùng ảnh không đúng kích thước hay không phù hợp thì layout hiển thị sẽ không được như ý muốn.

noti2.jpg noti3.jpg

Ví dụ: khi ta sử dụng hình trái tim này cho small icon thì trên device không phù hợp sẽ hiển thị chỉ là các hình tròn như trên. Với việc Removing các notification thì ta có thể sử dụng builder.setAutoCancel(true); để remove khi người dùng click vào hoặc sử dụng hàm cancel(ID) để remove notification với ID truyền vào hoặc cancelAll() để xóa tất cả các notification.

2 hàm cancel(ID)cancelAll() đều là hàm của đối tượng notificationManager.

###II. Hiển thị Progress trong Notification Android cũng hỗ trợ hiển thị progress trong notification bằng việc sử dụng hàm setProgress(max, progress, indeterminate) Khi đó notification sẽ hiện thị một thanh processBar tương ứng với % được cài đặt (progress/max * 100 %) indeterminate là kiểu boolean. Khi indeterminatetrue thì processBarsẽ bỏ qua 2 tham số đầu mà hiển thị luôn thanh processBar hoạt động liên tục.

noti4.jpg

indeterminate = true

niti5.jpg

indeterminate = false

Hàm setProgress được sử dụng cho đối tượng là builder. Khi đã set xong % cho thanh processBar thì ta chỉ việc sử dụng notificationManager để hiển thị lại builder với ID trước đó. Khi đó thành processBar sẽ thay đổi ở ngay notification đó. Nếu ID thay đổi thì một notification mới sẽ được tạo ra chứ không update processBar trước đó nữa. VD:


new Thread(
            new Runnable() {
                @Override
                public void run() {
                    int incr, notic_id = NOTIFICATION_ID;
                    for (incr = 0; incr <= 100; incr+=5) {
                        builder.setProgress(100, incr, false);
//                        builder.setProgress(0, 0, true);
                        notificationManager.notify(notic_id, builder.build());
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            Log.d("ProcessBar", "sleep failure");
                        }
                    }
                    builder.setContentText("Download complete")
                            .setProgress(0, 0, false);
                    notificationManager.notify(notic_id, builder.build());
                }
            }
        ).start();

###3. Customer Notification

Ngoài việc sử dụng cấu trúc có sẳn thì Android còn hỗ trợ việc custom layout của notification. Khi ta custom một view nào đó của Notification thì ta chỉ việc tạo ra một layout (file xml) mới. Sau đó, ta sử dụng đối tượng RemoteViews để load layout này, tiếp theo là gán view này cho contentView của notification.


RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification);
Notification notification = builder.build();
notification.contentView = contentView;

Việc còn lại chỉ là sử dụng notificationManager để tạo notification.

noti6.jpg

###Video demo

Code được đặt tại github: https://github.com/banlv54/MonthyReport_05_2015

http://developer.android.com/guide/topics/ui/notifiers/notifications.html http://www.tutorialspoint.com/android/android_notifications.htm


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.