There are various types of notifications, and different notification methods are used in different situations to enhance the user experience. Below, we will discuss four commonly used notification methods: Notification, Dialog, Toast, and Snackbar.

Notification Bar (Notification)

public void showNotification() {
    // Create a notification using Notification.Builder
    NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());

    // Content displayed when the notification is first received
    builder.setTicker("Prize Notification");

    // Automatically cancel the notification when the user clicks it
    builder.setAutoCancel(true);

    // Title displayed in the notification bar
    builder.setContentTitle("Congratulations, you've won!");

    // Content displayed in the notification bar
    builder.setContentText("Your number has been selected by our company. You've won 1 million. Please contact us promptly: 139999");

    // Set a small icon (required; otherwise, the notification won't show)
    builder.setSmallIcon(R.mipmap.ic_launcher);

    // Prevent the user from dismissing the notification (can only be removed via code using the ID)
    // builder.setOngoing(true);

    // Set vibration pattern (units: milliseconds; format: [silent, vibrate, silent, vibrate...])
    builder.setVibrate(new long[]{0, 500, 500, 500});

    // Set LED light (color, duration on, duration off)
    builder.setLights(Color.BLUE, 200, 200);

    // Set notification sound (path to audio file)
    builder.setSound(Uri.fromFile(new File("/system/media/audio/ui/usb_effect.ogg")));

    // Use default notification sound, vibration, and LED
    // builder.setDefaults(NotificationCompat.DEFAULT_ALL);

    // Set priority
    builder.setPriority(NotificationCompat.PRIORITY_MAX);

    Notification notification = builder.build();
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    // The first parameter is the ID used to cancel the notification
    manager.notify(1, notification);
}

Requires Vibration Permission

<uses-permission android:name="android.permission.VIBRATE"/>

Effect Diagram

If using this in a Fragment, there is a slight difference (note the comments):

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_me, container, false);
    Button button = (Button) view.findViewById(R.id.tongzhi);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Use getActivity() here
            Notification.Builder builder = new Notification.Builder(getActivity());
            builder.setTicker("Prize Notification");
            // builder.setAutoCancel(true); // Uncomment if needed
            builder.setContentTitle("Congratulations, you've won!");
            builder.setContentText("Your number has been selected by our company. You've won 1 million. Please contact us promptly: 139999");
            builder.setSmallIcon(R.mipmap.ic_launcher);
            builder.setOngoing(true); // Example: prevent dismissal
            Notification notification = builder.build();
            // Use getActivity() here
            NotificationManager manager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
            manager.notify(1, notification);
        }
    });
    return view;
}

To open an Activity by clicking the notification, add the following code:

// Launch an Activity from the notification bar
Intent intent = new Intent(getApplicationContext(), Main3Activity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
// Notification auto-cancels after opening the Activity
builder.setAutoCancel(true);

Dialog

public void showDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    // Set dialog title
    builder.setTitle("Notification");

    // Set dialog content
    builder.setMessage("You have an important notification to handle.");

    // Set icon
    builder.setIcon(android.R.drawable.ic_dialog_alert);

    // Allow cancellation by touching outside the dialog or pressing the back key
    builder.setCancelable(true);

    // Add a custom layout (e.g., with an EditText)
    View view = View.inflate(this, R.layout.item, null);
    builder.setView(view);

    // Positive button (right side)
    builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Logic for the "Confirm" button
        }
    });

    // Negative button (left side)
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Logic for the "Cancel" button
        }
    });

    // Single-choice list (commented out for example)
    /*final String[] singleChoiceItems = new String[]{"Android", "Java", "PHP"};
    builder.setSingleChoiceItems(singleChoiceItems, 1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getApplicationContext(), "You selected " + singleChoiceItems[which], Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });*/

    // Multi-choice list (commented out for example)
    /*final String[] multiChoiceItems = new String[]{"Android", "Java", "PHP"};
    builder.setMultiChoiceItems(multiChoiceItems, new boolean[]{false, true, true}, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            String result = isChecked ? "Selected" : "Unselected";
            result = multiChoiceItems[which] + " - " + result;
            Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
        }
    });*/

    // Remember to call show()!
    builder.show();
}

Effect Diagrams

  • Basic Dialog

  • Dialog with Input Field

  • Dialog with Radio Buttons

  • Dialog with Checkboxes

Toast

private Toast toast;

public void showToast(String content) {
    // Avoid multiple Toasts by reusing the same instance
    if (toast == null) {
        toast = Toast.makeText(this, content, Toast.LENGTH_SHORT);
    } else {
        toast.setText(content);
    }
    toast.show();
}

Effect Diagram
(Clicking repeatedly shows only one Toast instance)

Snackbar

Add Dependency

compile 'com.android.support:design:25.3.1'

Code Example

public void showSnackbar() {
    // First parameter: any view ID in the current layout
    Snackbar snackbar = Snackbar.make(findViewById(R.id.activity_main), "This action is not important", Snackbar.LENGTH_LONG);
    // Add an action button
    snackbar.setAction("OK", new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Logic for the action button
        }
    });
    // Display the Snackbar
    snackbar.show();
}

Effect Diagram

Xiaoye