Một Notification (thông báo) là một tin nhắn bạn có thể hiển thị cho người sử dụng xem bên ngoài ứng dụng của bạn. Khi bạn yêu cầu hệ thống đưa ra thông báo, lần đầu tiên nó xuất hiện như một biểu tượng trong vùng thông báo. Để xem chi tiết của thông báo, người dùng mở Notification drawer (ngăn kéo thông báo). Cả hai khu vực thông báo và các ngăn kéo thông báo là khu vực được hệ thống kiểm soát mà người dùng có thể xem bất cứ lúc nào.
Notification Channel
Từ phiên bản 8.0 (Oreo), Android nhóm các notification vào các Channel (kênh) khác nhau. Mỗi kênh sẽ có một hành vi cụ thể, và hành vi này sẽ được áp dụng cho tất cả các thông báo của nó. Mỗi kênh có một ID đại diện cho nó.
Ví dụ về Notification
Tạo mới một project Android tên: DemoNotification
Tạo icon cho notification
Android Studio có một thư viện icon (biểu tượng) hữu ích cho ứng dụng của bạn. Tôi lấy 2 icon từ thư viện này để sử dụng cho ứng dụng hiện tại.
Chú ý: Nếu bạn không muốn sử dụng các Icon trong thư viện của Android Studio bạn có thể sử dụng Icon bất kỳ, và copy nó vào thư mục “drawable” của project. Chẳng hạn, icon_notify1.png, icon_notify2.png.
Cấu trúc của ứng dụng
Giao diện của ứng dụng (activity_main.xml)
Code của tập tin activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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" tools:context=".MainActivity"> <EditText android:id="@+id/editText_title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="24dp" android:layout_marginTop="24dp" android:layout_marginEnd="24dp" android:ems="10" android:hint="Title" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/editText_message" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="24dp" android:layout_marginTop="24dp" android:layout_marginEnd="24dp" android:ems="10" android:hint="Message" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText_title" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="32dp" android:text="Send on Channel 1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText_message" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:text="Send On Channel 2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/button1" /> </androidx.constraintlayout.widget.ConstraintLayout>
Code của tập tin NotificationApp.java
package vn.aptech.demonotification; import android.app.Application; import android.app.NotificationChannel; import android.app.NotificationManager; import android.os.Build; public class NotificationApp extends Application { public static final String CHANNEL_1_ID = "channel1"; public static final String CHANNEL_2_ID = "channel2"; @Override public void onCreate() { super.onCreate(); this.createNotificationChannels(); } private void createNotificationChannels() { if(Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) { NotificationChannel channel1 = new NotificationChannel( CHANNEL_1_ID, "Channel 1", NotificationManager.IMPORTANCE_HIGH ); channel1.setDescription("This is channel 1"); NotificationChannel channel2 = new NotificationChannel( CHANNEL_2_ID, "Channel 2", NotificationManager.IMPORTANCE_LOW ); channel1.setDescription("This is channel 2"); NotificationManager manager = this.getSystemService(NotificationManager.class); manager.createNotificationChannel(channel1); manager.createNotificationChannel(channel2); } } }
Khai báo thông tin của NotificationApp trong tập tin AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="vn.aptech.demonotification"> <application android:name=".NotificationApp" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Code của tập tin MainActivity.java
package vn.aptech.demonotification; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; import android.app.Notification; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity { private NotificationManagerCompat notificationManagerCompat; private EditText editTextTitle; private EditText editTextMessage; private Button button1; private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.editTextTitle = (EditText) this.findViewById(R.id.editText_title); this.editTextMessage = (EditText) this.findViewById(R.id.editText_message); this.button1 = (Button) this.findViewById(R.id.button1); this.button2 = (Button) this.findViewById(R.id.button2); this.button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendOnChannel1( ); } }); this.button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendOnChannel2( ); } }); // this.notificationManagerCompat = NotificationManagerCompat.from(this); } private void sendOnChannel1() { String title = this.editTextTitle.getText().toString(); String message = this.editTextMessage.getText().toString(); Notification notification = new NotificationCompat.Builder(this, NotificationApp.CHANNEL_1_ID) .setSmallIcon(R.drawable.icon_notify1) .setContentTitle(title) .setContentText(message) .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_MESSAGE) .build(); int notificationId = 1; this.notificationManagerCompat.notify(notificationId, notification); } private void sendOnChannel2() { String title = this.editTextTitle.getText().toString(); String message = this.editTextMessage.getText().toString(); Notification notification = new NotificationCompat.Builder(this, NotificationApp.CHANNEL_2_ID) .setSmallIcon(R.drawable.icon_notify2) .setContentTitle(title) .setContentText(message) .setPriority(NotificationCompat.PRIORITY_LOW) .setCategory(NotificationCompat.CATEGORY_PROMO) // Promotion. .build(); int notificationId = 2; this.notificationManagerCompat.notify(notificationId, notification); } }
Chạy thử ứng dụng thôi các bạn !!!