알림(Notification)은 애플리케이션의 정상 UI 외부에서 사용자에게 표시할 수 있는 메시지
시스템에 알림을 실행하라고 명령하면 처음에 알림 영역(상태 표시줄)에서 아이콘으로 나타납니다.
알림 세부 정보를 보려면, 사용자는 상태 표시줄을 아래로 스와이프하여 알림 창을 열 수 있습니다.
알림 분석
알림의 가장 일반적인 부분은 다음 그림과 같습니다.
[참고자료: https://developer.android.com/guide/topics/ui/notifiers/notifications.html?hl=ko]
알림 채널
예제
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Detailed description of My notification ");
Android 8.0 이상에서 알림을 제공하려면 먼저 NotificationChannel 인스턴스를 createNotificationChannel()에 전달하여 앱의 알림 채널 을 시스템에 등록해야 합니다.
NotificationChannel 생성 예제
final String CHANNEL_ID = "my_channel_01";
private void createNotificationChannel() {
if (android.os.Build.VERSION.SDK_INT >=26) {
// The user-visible name of the channel.
CharSequence name = getString(R.string.channel_name);
// The user-visible description of the channel.
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
// Configure the notification channel.
channel.setDescription(description);
channel.enableLights(true);
channel.setLightColor(Color.BLUE);
channel.enableVibration(true);
channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
// Register the channel with the system
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(channel);
}
}
알림을 표시하려면 NotificationManagerCompat.notify()를 호출하고 알림의 고유 ID 및 NotificationCompat.Builder.build()의 결과를 전달하세요.
예제
NotificationManagerCompat nm = NotificationManagerCompat.from(this);
nm.notify(NOTI_ID, mBuilder.build());
PendingIntent 클래스는 다른 인텐트를 래핑하며 다른 응용 프로그램으로 전달하여 실행 권한을 준다
일반 인텐트와의 차이점으로는 다른 컴포넌트에게 작업을 요청하는 인텐트를 사전에 생성시키고 만든다는 점과 특정 시점
에 자신이 아닌 다른 컴포넌트들이 펜딩인텐트를 사용하여 다른 컴포넌트에게 작업을 요청시키는 데 사용된다는 점이 차이점
다음 세 개의 정적 메서드를 이용하여 생성
PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flag)
PendingIntent getService(Context context, int requestCode, Intent intent, int flag)
예제
Intent notificationIntent = new Intent(this, NotificationDetail.class);
notificationIntent.putExtra("notificationId", NOTI_ID); //전달할 값
PendingIntent contentIntent
= PendingIntent.getActivity(
this,
0,
notificationIntent, // 작업 요청할 명시적 인텐트
PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder notification = new NotificationCompat.Builder(this, "default");
notification.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_text))
.setSmallIcon(R.drawable.ic_access_alarm_black_24dp)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
* .setContentIntent(contentIntent);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(NOTI_ID, notification.build());
알림 삭제는 다음 중 한 가지가 발생할 때 일어납니다.
알림을 만들 때 setAutoCancel()을 호출했으며 사용자가 알림을 클릭합니다.
NotificationCompat.Builder notification = new NotificationCompat.Builder(this, CHANNEL_ID);
notification.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_text))
.setSmallIcon(R.drawable.ic_access_alarm_black_24dp)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.setContentIntent(contentIntent)
* .setAutoCancel(true);
특정 알림 ID에 cancel()을 호출합니다. 이 메서드는 진행 중인 알림도 삭제합니다.
public class NotificationDetail extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
int id=0;
Bundle extras = getIntent().getExtras();
//...
id = extras.getInt("notificationId");
//...
NotificationManager nm =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//노티피케이션 제거
* nm.cancel(id);
}
}
cancelAll()을 호출하여 이전에 발행한 모든 알림을 삭제합니다.