일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자취필수템
- 어떻게 나답게 살 것인가
- 커스텀린트
- 베드테이블
- 1일1커밋
- 캐치마인드
- 목적중심리더십
- 좌식테이블
- 베드트레이
- 테트리스
- 북한살둘레길
- 소프시스 밤부 좌식 엑슬 테이블
- 소프시스
- 아비투스
- 목적 중심 리더십
- 슬기로운 온라인 게임
- 한달독서
- T자형인재
- 면접
- 한달브런치북만들기
- 끝말잇기
- 리얼하다
- 안드로이드
- 한단어의힘
- 브런치작가되기
- 함수형 프로그래밍
- 프래그먼트
- 지지않는다는말
- 한달어스
- 재택근무
- Today
- Total
정상에서 IT를 외치다
[Android, Oreo Notification] 오레오 알림 설정하기 본문
안드로이드 API 26 (오레오) 버전 부터는 기존의 Notification 방식이 적용되지 않습니다.
Notification Channel 을 필수로 설정해 주어야 합니다.
기존에는 다음과 같은 방식으로 Notification 을 실행했습니다.
Intent mMyIntent = new Intent(this, MyActivity.class);
PendingIntent mPendingIntent = PendingIntent.getActivity(
this, 1, mMyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(android.R.drawable.btn_star)
.setContentTitle("Title")
.setContentText("Content");.setDefaults(Notification.DEFAULT_ALL) // 알림, 사운드 진동 설정
.setAutoCancel(true) // 알림 터치시 반응 후 삭제
.setContentIntent(mPendingIntent)
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(1, mBuilder.build());
위 코드에서에 new NotificationCompat.Builder(this) 의 인자가 1개인데 오레오에서는 인자 2개를 넣어주어야만 작동 됩니다.
(NotificationCompat 는 android.support.v4.app 을 import 해주셔야 합니다.)
안드로이드 오레오 버전에서는 다음과 같은 Channel 을 설정해야 합니다.
String channelId = "channel";
String channelName = "Channel Name";
int importance = NotificationManager.IMPORTANCE_LOW;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(
channelId, channelName, importance);
mNotificationManager.createNotificationChannel(mChannel);
}
channelId 와 channelName 을 정해줍니다.
위와 같이 NotificationChannel 을 버전별로 나누지 않으면 하위 버전에서 java.lang.NoClassDefFoundError: 에러가 발생하니
꼭 나눠 주셔야 합니다.
그다음 Notification 의 중요도(importance)를 설정
int importance = NotificationManager.IMPORTANCE_HIGH;
만약 중요도를 HIGHT 으로 설정해 주면 상단에 팝업이 자동으로 생성 됩니다.
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this, channelId);
마지막으로 NotificationCompat.Builder 에 channelId 를 적어 주시거나
setChannelId() 를 설정해 주어야 정상 작동 됩니다.
아래는 Notification 전체 코드 입니다.
String channelId = "channel";
String channelName = "Channel Name";
NotificationManager notifManager= (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(
channelId, channelName, importance);
notifManager.createNotificationChannel(mChannel);
}
NotificationCompat.Builder builder =
new NotificationCompat.Builder(getApplicationContext(), channelId);
Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
int requestID = (int) System.currentTimeMillis();
PendingIntent pendingIntent
= PendingIntent.getActivity(getApplicationContext(), requestID
, notificationIntent
, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentTitle("Title") // required
.setContentText("Content") // required
.setDefaults(Notification.DEFAULT_ALL) // 알림, 사운드 진동 설정
.setAutoCancel(true) // 알림 터치시 반응 후 삭제
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setSmallIcon(android.R.drawable.btn_star)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.msg_icon))
.setBadgeIconType(R.drawable.msg_icon)
.setContentIntent(pendingIntent);
notifManager.notify(0, builder.build());
참고
안드로이드 공식 홈페이지
https://developer.android.com/guide/topics/ui/notifiers/notifications.html#ManageChannels
https://developer.android.com/guide/topics/ui/notifiers/notifications.html?hl=ko#Badges
티스토리
http://gun0912.tistory.com/77
'안드로이드' 카테고리의 다른 글
[Android, Bluetooth] Bluetooth 권한 설정 (0) | 2018.04.04 |
---|---|
[Android, Realm] Realm 하루 가계부 만들기 (0) | 2018.04.03 |
[Android, Custom Calendar] Custom Calendar 만들기 (2) | 2018.03.28 |
[Android, Calendar] Calendar 분석 (0) | 2018.03.28 |
[Android, Parallax View Pager] Custom Parallax View Pager (0) | 2018.03.27 |