3. Notification의 정보를 입력후 알림을 등록
builder.run {
setSmallIcon(R.mipmap.ic_launcher)
setWhen(System.currentTimeMillis())
setContentTitle("키워드 알림")
setContentText("설정한 키워드에 대한 알림이 도착했습니다!!")
setStyle(
NotificationCompat.BigTextStyle()
.bigText("설정한 키워드에 대한 알림이 도착했습니다!!")
)
}
manager.notify(NOTIFICATION_ID, builder.build())
Notification 구성
해당 알림은 기본적인 형태의 알림입니다.
- 작은 아이콘: 필수 구성요소이며 setSmallIcon()을 통해 설정됩니다.
- 앱 이름: 시스템에서 제공합니다.
- 타임스탬프: 시스템에서 제공하지만 setWhen()을 사용하여 재정의하거나 setShowWhen(false)로 숨길 수 있습니다.
- 큰 아이콘: 선택사항이며(일반적으로 연락처 사진에만 사용되며 앱 아이콘에 사용하지 않음) setLargeIcon()을 통해 설정됩니다.
- 제목: 선택사항이며 setContentTitle()을 통해 설정됩니다.
- 텍스트: 선택사항이며 setContentText()를 통해 설정됩니다.
알림을 등록하기전 알림의 속성들을 설정할수 있습니다. 알림같은 경우 여러스타일을 지정할수도 있습니다.
/**
* Set the time that the event occurred. Notifications in the panel are
* sorted by this time.
*
* <p>For apps targeting {@link android.os.Build.VERSION_CODES#N} and above, this time is
* not shown anymore by default and must be opted into using {@link #setShowWhen(boolean)}
*/
/*
* 이벤트가 발생한 시간을 설정합니다. 패널의 알림은 이 시간을 기준으로 정렬됩니다.
* Build.VERSION_CODES.N(24) 이상을 대상으로 하는 앱의 경우 이 시간은 기본적으로 더 이상 표시되지 않으며
* setShowWhen(boolean)을 사용하여 선택해야 합니다.
*/
public @NonNull Builder setWhen(long when) {
mNotification.when = when;
return this;
}
/**
* Control whether the timestamp set with {@link #setWhen(long) setWhen} is shown
* in the content view.
*
* <p>For apps targeting {@link android.os.Build.VERSION_CODES#N} and above, this
* defaults to {@code false}. For earlier apps, the default is {@code true}.
*/
/*
* setWhen으로 설정된 타임스탬프를 콘텐츠 뷰에 표시할지 여부를 제어합니다.
* Build.VERSION_CODES.N 이상을 대상으로 하는 앱의 경우 기본값은 false입니다.
* 이전 앱의 경우 기본값은 true입니다.
*/
public @NonNull Builder setShowWhen(boolean show) {
mShowWhen = show;
return this;
}
setWhen(System.currentTimeMillis())
setWhen을 이용하여 이벤트가 발생할 시간을 정할수있습니다
setShowWhen함수를 이용하여 알림의 타임스탬프를 표시할지 여부를 정할수있습니다.
/**
* Set the small icon to use in the notification layouts. Different classes of devices
* may return different sizes. See the UX guidelines for more information on how to
* design these icons.
*
* @param icon The small Icon object to use
*/
@RequiresApi(23)
public @NonNull Builder setSmallIcon(@NonNull IconCompat icon) {
this.mSmallIcon = icon.toIcon(mContext);
return this;
}
/**
* Set the small icon to use in the notification layouts. Different classes of devices
* may return different sizes. See the UX guidelines for more information on how to
* design these icons.
*
* @param icon A resource ID in the application's package of the drawable to use.
*/
public @NonNull Builder setSmallIcon(int icon) {
mNotification.icon = icon;
return this;
}
/**
* A variant of {@link #setSmallIcon(int) setSmallIcon(int)} that takes an additional
* level parameter for when the icon is a {@link android.graphics.drawable.LevelListDrawable
* LevelListDrawable}.
*
* @param icon A resource ID in the application's package of the drawable to use.
* @param level The level to use for the icon.
*
* @see android.graphics.drawable.LevelListDrawable
*/
public @NonNull Builder setSmallIcon(int icon, int level) {
mNotification.icon = icon;
mNotification.iconLevel = level;
return this;
}
setSmallIcon(R.mipmap.ic_launcher)
setSmallIcon함수를 이용하여 작은 아이콘을 지정할수도 있습니다.
/**
* Show the {@link Notification#when} field as a stopwatch.
*
* Instead of presenting <code>when</code> as a timestamp, the notification will show an
* automatically updating display of the minutes and seconds since <code>when</code>.
*
* Useful when showing an elapsed time (like an ongoing phone call).
*
* @see android.widget.Chronometer
* @see Notification#when
*/
/*
* Notification.when 필드를 스톱워치로 표시합니다. 시간을 타임스탬프로 표시하는 대신 알림은 그 이후의 분과
* 초를 자동으로 업데이트하여 표시합니다. 경과 시간을 표시할 때 유용합니다(예: 진행 중인 전화 통화)
*/
public @NonNull Builder setUsesChronometer(boolean b) {
mUseChronometer = b;
return this;
}
/**
* Sets the Chronometer to count down instead of counting up.
*
* This is only relevant if setUsesChronometer(boolean) has been set to true. If it
* isn't set the chronometer will count up.
*
* @see android.widget.Chronometer
*/
/*
* 카운트업 대신 카운트다운하도록 크로노미터를 설정합니다. 이는 setUsesChronometer(boolean)가
* true로 설정된 경우에만 관련됩니다. 설정되어 있지 않으면 크로노미터가 카운트됩니다.
*/
@RequiresApi(24)
public @NonNull Builder setChronometerCountDown(boolean countsDown) {
mChronometerCountDown = countsDown;
getExtras().putBoolean(EXTRA_CHRONOMETER_COUNT_DOWN, countsDown);
return this;
}
setUsesChronometer를 사용하면 이런식으로 시간 표시대신 stopwatch를 넣을수도 있습니다. setChronometerCountDown을 사용한다면 countup이 아니라 countdown으로 변경됩니다. 이경우 기본값이 0초이기때문에 음수(ex) - 00:04) 로 표현됩니다
/**
* If {@code true}, silences this instance of the notification, regardless of the sounds or
* vibrations set on the notification or notification channel. If {@code false}, then the
* normal sound and vibration logic applies. Defaults to {@code false}.
*/
/*
* true인 경우 알림 또는 알림 채널에 설정된 소리 또는 진동에 관계없이 이 알림 인스턴스를 무음으로 설정합니다.
* false인 경우 일반적인 소리 및 진동 논리가 적용됩니다. 기본값은 거짓입니다.
*/
public @NonNull Builder setSilent(boolean silent) {
mSilent = silent;
return this;
}
setSilent로 소리를 안나게 할수도 있습니다.
/**
* Set the title (first row) of the notification, in a standard notification.
*/
public @NonNull Builder setContentTitle(@Nullable CharSequence title) {
mContentTitle = limitCharSequenceLength(title);
return this;
}
setContentTitle로 title을 설정할수있습니다.
/**
* Set the text (second row) of the notification, in a standard notification.
*/
public @NonNull Builder setContentText(@Nullable CharSequence text) {
mContentText = limitCharSequenceLength(text);
return this;
}
setContentText로 내용을 설정할수있습니다.
/**
* This provides some additional information that is displayed in the notification. No
* guarantees are given where exactly it is displayed.
*
* <p>This information should only be provided if it provides an essential
* benefit to the understanding of the notification. The more text you provide the
* less readable it becomes. For example, an email client should only provide the account
* name here if more than one email account has been added.</p>
*
* <p>As of {@link android.os.Build.VERSION_CODES#N} this information is displayed in the
* notification header area.</p>
*
* <p>On Android versions before {@link android.os.Build.VERSION_CODES#N}
* this will be shown in the third line of text in the platform notification template.
* You should not be using {@link #setProgress(int, int, boolean)} at the
* same time on those versions; they occupy the same place.
* </p>
*/
/*
* 이는 알림에 표시되는 몇 가지 추가 정보를 제공합니다. 정확히 표시되는 위치는 보장되지 않습니다.
* 이 정보는 통지를 이해하는 데 필수적인 이점을 제공하는 경우에만 제공되어야 합니다.
* 더 많은 텍스트를 제공할수록 가독성이 떨어집니다. 예를 들어 이메일 클라이언트는 두 개 이상의
* 이메일 계정이 추가된 경우에만 여기에 계정 이름을 제공해야 합니다.
* Build.VERSION_CODES.N부터 이 정보는 알림 헤더 영역에 표시됩니다.
* Build.VERSION_CODES.N 이전의 Android 버전에서는 플랫폼 알림 템플릿의 세 번째 텍스트 줄에
* 표시됩니다. 해당 버전에서는 setProgress(int, int, boolean)를 동시에 사용하면 안 됩니다.
* 그들은 같은 자리를 차지하고 있습니다.
*/
public @NonNull Builder setSubText(@Nullable CharSequence text) {
mSubText = limitCharSequenceLength(text);
return this;
}
setSubText함수 서브택스트를 지정할수있습니다. 추가정보등을 넣을때 용이합니다.
Nougat(24)버전 이후에는 알림헤더영역에 표시됩니다. 그이전에는 알림의 3번째 텍스트 줄에 표시된다고 합니다. 해당구역은 프로그래스바와 겹치기때문에 24버전 이전 버전의 앱을만든다면 잘고려해봐야할 점인것 같습니다.
/**
* Provides text that will appear as a link to your application's settings.
*
* <p>This text does not appear within notification {@link Style templates} but may
* appear when the user uses an affordance to learn more about the notification.
* Additionally, this text will not appear unless you provide a valid link target by
* handling {@link #INTENT_CATEGORY_NOTIFICATION_PREFERENCES}.
*
* <p>This text is meant to be concise description about what the user can customize
* when they click on this link. The recommended maximum length is 40 characters.
*
* <p>Prior to {@link Build.VERSION_CODES#O} this field has no effect.
*/
/*
* 애플리케이션 설정에 대한 링크로 표시될 텍스트를 제공합니다.
* 이 텍스트는 알림 템플릿 내에 표시되지 않지만 사용자가 알림에 대해 자세히 알아보기 위해
* 어포던스를 사용할 때 나타날 수 있습니다. 또한 INTENT_CATEGORY_NOTIFICATION_PREFERENCES를
* 처리하여 유효한 링크 대상을 제공하지 않으면 이 텍스트가 표시되지 않습니다.
* 이 텍스트는 사용자가 이 링크를 클릭할 때 사용자 정의할 수 있는 내용에 대한 간결한 설명을 제공하기
* 위한 것입니다. 권장되는 최대 길이는 40자입니다.
* Build.VERSION_CODES.O 이전에는 이 필드가 효과가 없습니다.
*/
@NonNull
public Builder setSettingsText(@Nullable CharSequence text) {
mSettingsText = limitCharSequenceLength(text);
return this;
}
setSettingsText함수는 Oreo(26)이상부터 사용이가능한 함수입니다. 인텐트를 사용하여 앱 알림 설정의 링크를 만들 때 나타나는 텍스트를 설정할수 있습니다.
/**
* Set the remote input history.
*
* This should be set to the most recent inputs that have been sent
* through a {@link RemoteInput} of this Notification and cleared once the it is no
* longer relevant (e.g. for chat notifications once the other party has responded).
*
* The most recent input must be stored at the 0 index, the second most recent at the
* 1 index, etc. Note that the system will limit both how far back the inputs will be shown
* and how much of each individual input is shown.
*
* <p>Note: The reply text will only be shown on notifications that have least one action
* with a {@code RemoteInput}.</p>
*/
/*
* 원격입력 이력을 설정합니다. 이는 이 알림의 RemoteInput을 통해 전송된 가장 최근 입력으로
* 설정되어야 하며 더 이상 관련이 없으면 지워져야 합니다(예: 상대방이 응답한 채팅 알림의 경우).
* 가장 최근 입력은 0 인덱스에 저장되어야 하고, 두 번째 가장 최근 입력은 1 인덱스에 저장되어야 합니다.
* 시스템은 입력이 표시되는 정도와 각 개별 입력이 표시되는 양을 모두 제한합니다.
* 참고: 회신 텍스트는 RemoteInput이 포함된 작업이 하나 이상 있는 알림에만 표시됩니다.
*/
public @NonNull Builder setRemoteInputHistory(@Nullable CharSequence[] text) {
mRemoteInputHistory = text;
return this;
}
setRemoteInputHistory함수를 사용할경우 reply history를 사용자에게 보여줄 수 있습니다.
/**
* Sets the number of items this notification represents.
*
* On the latest platforms, this may be displayed as a badge count for Launchers that
* support badging. Prior to {@link android.os.Build.VERSION_CODES#O} it could be
* shown in the header. And prior to {@link android.os.Build.VERSION_CODES#N} this was
* shown in the notification on the right side.
*/
/*
* 이 알림이 나타내는 항목 수를 설정합니다.
* 최신 플랫폼에서는 배지를 지원하는 Launcher의 배지 수로 표시될 수 있습니다. Build.VERSION_CODES.O
* 이전에는 헤더에 표시될 수 있습니다.
* Build.VERSION_CODES.N 이전에는 오른쪽 알림에 이 내용이 표시되었습니다.
*/
public @NonNull Builder setNumber(int number) {
mNumber = number;
return this;
}
setNumber(10)
setNumber함수를 이용하여 알림이 나타내는 항목수를 지정할수 있습니다
setNumber(10)을 지정하고 알림이 2번 생겼다면
이와 같이 알림이 20개로 나와있을것입니다.
'안드로이드 > 안드로이드' 카테고리의 다른 글
[Android/Kotlin] flatMapLatest 로 리팩토링 (2) | 2023.11.10 |
---|---|
[Android/Kotlin] 액티비티의 종료로 ViewModel이 죽어버렸다! (1) | 2023.10.29 |
[Android/UI] BackGroundTint 값 Hex값으로 설정 (0) | 2023.10.16 |
[Android/Kotlin] Room 외래키 적용 (1) | 2023.10.14 |
[Android/Kotlin] ViewModel 과 ViewPager (1) | 2023.10.10 |