1. Giới thiệu Notification trong Android

Notification trong Android là một user interface element, nó được hiện thị ở bên ngoài user interface của ứng dụng để thông báo cho người dùng những thông tin cần thiết. Người dùng có thể xem được những thông báo này ở màn hình khóa ( đối với Android Lollipop ) hoặc từ Notification Drawer.

Để tạo một notification trong Android, bạn nên sử dụng NotificationCompat.Builder. Một notification được tạo ra phải có ít nhất ba thông tin dưới đây :

  • 1 small icon, sử dụng method setSmallIcon()
  • 1 title, sử dụng method setContentTitle()
  • Nội dung của notificaiton, sử dụng method setContentText()

Để Notification hiển thị cho người dùng, bạn phải sử dụng NotificationManager như sau :

  • Tạo một đối tượng của NotificationManager
  • Sử dụng method notify() của đối tượng NotificationManager để đẩy thông báo cho người dùng bằng cách truyền vào hai tham số : Id của notification và đối tượng Notification.
void notify(int id, Notification notification)

Tạo action cho Notification trong Android
Khi người dùng chạm vào Notification, bạn nên có navigation đến một Activity nào đó. Như vậy, bạn sẽ tạo một action cho Notification. Việc tạo action cho Notification, bạn nên sử dụng PendingIntent bằng cách sau:

  • Tạo Intent với Activity sẽ được hiển thị khi người dùng chạm vào Notification
  • Tạo PendingIntent để mang thông tin của Intent khi gửi cho Notification

Bây giờ chúng ta sẽ làm 1 ví dụ đơn giản để hiểu rõ hơn về notification.

2. Demo về notification trong Android

  • B1: Tạo 1 project mới có tên là NotificationDemo
  • B2. Thiết kế giao diện như sau
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.devpro_vn.notificationdemo.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:id="@+id/txtTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="15dp"
        android:text="Demo Notification"
        android:textColor="#2102ff"
        android:textSize="30sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btnShowNotification"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="15dp"
        android:text="Show" />

    <Button
        android:id="@+id/btnCancelNotification"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="15dp"
        android:text="Cancel" />
</LinearLayout>

và 1 Activity để khi chạm vào notifcation thì nó sẽ chuyển đến Activity này

<?xml version="1.0" encoding="utf-8">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.devpro_vn.notificationdemo.ResultActivity"
    tools:showIn="@layout/activity_result">;

   <TextView
        android:id="@+id/txtTitle"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_gravity="center"
        android:layout_marginTop="15dp"
        android:layout_weight="1"
        android:text="This is Detail Screen"
        android:textColor="#041fed"
        android:textSize="30sp"
        android:textStyle="bold" />;


    <TextView
        android:id="@+id/txtContent"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_marginTop="15dp"
        android:textColor="#041fed"
        android:textSize="17sp"
        android:textStyle="bold" />;

</LinearLayout>;
  • B3. Xử lý code trong Activity

trong MainActivity.java

package com.example.devpro_vn.notificationdemo;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    Button btnShow, btnCancel;
    NotificationCompat.Builder mBuilder;
    NotificationManager mNotifyMgr;
    int mNotificationId = 001;
    String strContent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        strContent = "Welcome to DevPro Viet Nam";

        btnShow = (Button) findViewById(R.id.btnShowNotification);
        btnCancel = (Button) findViewById(R.id.btnCancelNotification);

        btnShow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mBuilder =
                        new NotificationCompat.Builder(getApplicationContext())
                                .setSmallIcon(R.drawable.ic_notification)
                                .setContentTitle("My notification")
                                .setContentText(strContent);


                // Sets id cho notification
                // Gets an instance of the NotificationManager service
                mNotifyMgr =
                        (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                // Builds the notification and issues it.
                mNotifyMgr.notify(mNotificationId, mBuilder.build());


                Intent resultIntent = new Intent(getApplicationContext(), ResultActivity.class);
                resultIntent.putExtra("content", strContent);

                PendingIntent resultPendingIntent =
                        PendingIntent.getActivity(
                                getApplicationContext(),
                                0,
                                resultIntent,
                                PendingIntent.FLAG_UPDATE_CURRENT
                        );
                // Set content intent;
                mBuilder.setContentIntent(resultPendingIntent);
            }
        });

        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            mNotifyMgr.cancel(mNotificationId);
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

trong ResultActivity.java

package com.example.devpro_vn.notificationdemo;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

public class ResultActivity extends AppCompatActivity {

    TextView txtContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        txtContent = (TextView) findViewById(R.id.txtContent);

        Intent intent = getIntent();
        String msg = intent.getStringExtra("content");
        txtContent.setText(msg);

    }

}

Sau đó các bạn run ứng dụng và xem kết quả.

và khi click vào nút show bạn sẽ thấy có thông báo mới, click vào nút cancel thì sẽ xóa thông báo đi.

Vừa rồi là cách sử dụng một cách cơ bản nhất về notification, hy vọng bạn có thể áp dụng được nó và nâng cao nó hơn nữa trong các dự án của mình. Good luck! 😃