12/08/2018, 15:12

Tổng quan về Notifications Android 7

Notifications cung cấp phương tiện truyền tải thông báo đến cho người dùng một cách dễ dàng, thuận tiện kể cả khi app đang không chạy hoặc đang chạy background. Notification được sử dụng ở hầu hết mọi app và ứng dụng của nó cũng rất đa dạng. Ví dụ như khi bạn thực hiện những tác vụ ngầm như ...

Notifications cung cấp phương tiện truyền tải thông báo đến cho người dùng một cách dễ dàng, thuận tiện kể cả khi app đang không chạy hoặc đang chạy background. Notification được sử dụng ở hầu hết mọi app và ứng dụng của nó cũng rất đa dạng. Ví dụ như khi bạn thực hiện những tác vụ ngầm như download, update ... Notification sẽ đưa ra thông báo cho bạn khi các tác vụ này được hoàn thành hay có vấn đề gì đó. Hay khi bạn nghe nhạc, một số ứng dụng cài đặt trình nghe nhạc trên notification để bạn dễ dàng thao tác chuyển bài, dừng chơi nhạc mà không cần phải vào app chơi nhạc đó. Ở Android 7.0 có rất nhiều đổi mới và cải tiến, trong đó notifications được cung cấp thêm những tính năng thú vị phải kể đến như Direct ReplyBundle Notificaiton. Nội dung bài viết này sẽ giới thiệu tổng quát về 2 tính năng này

Direct Reply

Một trong những ứng dụng của notification trong các ứng dụng chat message là thông báo cho người dùng khi có tin nhắn đến. Ở các phiên bản trước, notification chỉ có thể đưa ra thông báo nội dung tin nhắn của người chat đến cho người dùng, người dùng muốn trả lời cần click vào trong notification để đi vào màn hình chat với người đó hoặc chỉ có thể click các action được định nghĩa sẵn trên thanh notificaiton. Giả sử khi bạn đang bận xem phim hoặc đang chơi một game nào đó khá nặng mà có tin nhắn đến và bạn cần phải trả lời nhanh ( tin nhắn của gái chả hạn :v ) thì việc này có thể gây bất tiện với người dùng khi phải chuyển qua màn hình của app chat. Việc chuyển đổi qua lại các màn hình ảnh hưởng đến trải nghiệm người dùng hoặc tệ hơn đối với các máy cấu hình thấp. Direct Reply cho phép bạn trả lời tin nhắn ngay trực tiếp trên notification mà không cần phải vào app. Sau đây là ví dụ đơn giản của chức năng này

Yêu cầu

Đây là chức năng của android 7.0 vì vậy bạn cần minSdkVersion 24 trong build.gradle

Dưới đây là code tạo một notification có action direct reply

    // Tạo remote input cho action reply của notification
    String replyLabel = "Reply this message";
    RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
            .setLabel(replyLabel)
            .build();
    
    //Xác định result intent, màn hình chuyển đến khi click vào notification
    Intent resultIntent = new Intent(this, MessageActivity.class);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(MessageActivity.class);
    stackBuilder.addNextIntent(resultIntent);

    PendingIntent resultPendingIntent =
            stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
            );

    // Add remote input vào notification và set chức năng direct reply
    NotificationCompat.Action action =
            new NotificationCompat.Action.Builder(R.drawable.ic_stat_social_notifications_on, replyLabel, resultPendingIntent)
                    .addRemoteInput(remoteInput)
                    .setAllowGeneratedReplies(true)
                    .build();

    NotificationCompat.Builder builder =
            new NotificationCompat.Builder(this)
                    .addAction(action)
                    .setAutoCancel(true)
                    .setSmallIcon(R.drawable.ic_stat_social_notifications_on)
                    .setContentTitle("You have message")
                    .setContentText("Buddy : Wanna hang out tonight ?");

    builder.setContentIntent(resultPendingIntent);
    NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    //Gửi notification
    mNotificationManager.notify(mRequestCode, builder.build());

Kết quả

Với Direct Reply bạn có thể trả lời tin nhăn và gửi mà không cần vào app Tin nhắn trả lời được gửi vào intent đến activity đã chỉ đinh, ta chỉ việc lấy data này và update.

  Bundle remoteInput = RemoteInput.getResultsFromIntent(getIntent());
    if (remoteInput == null) {
        return;
    }
    // Lấy tin reply
    String reply = remoteInput.getString(KEY_TEXT_REPLY);

Bundle Notification

Nếu một app sử dụng notification quá nhiều có thể gây trải nghiệm kém cho người dùng khi thông báo của app này chiếm phần lớn bảng tin trên thiết bị. Bundle Notification giúp giải quyết vấn đề này bằng cách nhóm các nhóm thông báo với nhau để thu gọn màn hình và tổ chức nhóm nội dụng thông báo một cách hiệu quả. Ví dụ một app tin tức khi thông báo cho người dùng các tin tức mới thì có thể nhóm các tin tức như thời sự, thể thao .... vào một nhóm notification để người dùng có thể lựa chọn và tìm kiếm thông tin hiệu quả hơn.

Đoạn code dưới đây tạo ra các notification có cùng 1 nhóm

    private final static String GROUP_KEY_NOTIFY = "group_key_notify";

    NotificationCompat.Builder builderSummary =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(android.R.drawable.ic_dialog_info)
                    .setContentTitle("A Bundle Example")
                    .setContentText("You have 3 new messages")
                    .setGroup(GROUP_KEY_NOTIFY)
                    .setGroupSummary(true);

    NotificationCompat.Builder builder1 =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(android.R.drawable.ic_dialog_info)
                    .setContentTitle("New Message")
                    .setContentText("You have a new message from Kassidy")
                    .setGroup(GROUP_KEY_NOTIFY);

    NotificationCompat.Builder builder2 =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(android.R.drawable.ic_dialog_info)
                    .setContentTitle("New Message")
                    .setContentText("You have a new message from Caitlyn")
                    .setGroup(GROUP_KEY_NOTIFY);

    NotificationCompat.Builder builder3 =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(android.R.drawable.ic_dialog_info)
                    .setContentTitle("New Message")
                    .setContentText("You have a new message from Jason")
                    .setGroup(GROUP_KEY_NOTIFY);

    NotificationManager notifyMgr =
            (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    notifyMgr.notify(101, builder1.build());
    notifyMgr.notify(102, builder2.build());
    notifyMgr.notify(103, builder3.build());
    notifyMgr.notify(104, builderSummary.build());

Kết quả Ta có thể expand được bundle notification vào chọn notification mong muốn

Bài viết đã giới thiệu tổng quan về 2 chức năng Direct replyBundle Notification của Android 7.0. Cá nhân mình thấy đây là 2 chức năng rất hữu ích và nên có trong mỗi ứng dụng. Github : NotifcationN

0