Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- spring exceptionHandler reposnse stackTrace
- spring exceptionHandler response cause
- spring responseEntity response stackTrace
- 개발 포지션 변경
- IT 포지션 변경
- 운영체제 멀티 태스킹
- 백엔드 직무 변경
- spring 동적 쿼리 주의사항
- 운영체제 커널모드
- spring paging sort sql injection
- 운영체제 공룡책
- 운영체제 작동방식
- 운영체제 개념
- spring exception cause remove
- spring exception stackTrace remove
- OS 자원관리
- spring sql injection
- Android Timer
- spring responseEntity response cause
- ec2 scp 파일 전송
- 운영체제 자원관리
- IT 직무 변경
- 개발 직무 변경
- spring sql injection 방지
- 백엔드 포지션 변경
- 운영체제 멀티 프로그래밍
- aws ec2 scp 파일 전송
- 운영체제 다중모드
- spring dynamic query sql injection
- android 타이머
Archives
- Today
- Total
오늘도 삽질중
[android] oreo notification 간단 예제 본문
반응형
며칠전에 핸드폰을 노트8로 바꾸면서 API가 Oreo로 변경이 되었습니다.
Oreo로 바뀌면서 기존핸드폰 API 버전인 Nougat 에서 잘 동작하던 Notifiaction이 작동하지 않았습니다.
검색해보면 여러 블로그에 친절한 설명도 있지만 저는 잘 작동하는 예제가 필요했습니다.
그래서 제가 간단하게 테스트를 해보면서 이상없이 동작되는 소스를 공유합니다.
버전을 체크하고 각 버전에 맞게끔 노티가 띄워지는 부분만 테스트를 완료하였습니다.
추가적으로 필요하신 부분은 자료가 많으니 추가해서 사용하시면 되겠습니다.
코드 간간히 주석으로 설명이 되어있는 부분을 참고하시고 , 코드에 주석처리가 되어있는 부분은 지우고 사용하셔도 됩니다.
*** 본 테스트는 갤럭시 노트8(API 26 Oreo) , 갤럭시 A6(API 24 Nougat) , 녹스 가상디바이스(API 22 Lollipop) 에서 정상작동하는것을 확인했습니다. ***
xml 파일에는 단순히 버튼하나만 놓고 버튼을 클릭하면 노티를 받는 구조로 진행했습니다.
MainActivity.java
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.button1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.N_MR1){
/**
* 누가버전 이하 노티처리
*/
Toast.makeText(getApplicationContext(),"누가버전이하",Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
BitmapDrawable bitmapDrawable = (BitmapDrawable)getResources().getDrawable(R.mipmap.ic_launcher);
Bitmap bitmap = bitmapDrawable.getBitmap();
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()).
setLargeIcon(bitmap)
.setSmallIcon(R.mipmap.ic_launcher)
.setWhen(System.currentTimeMillis()).
setShowWhen(true).
setAutoCancel(true).setPriority(NotificationCompat.PRIORITY_MAX)
.setContentTitle("노티테스트!!")
.setDefaults(Notification.DEFAULT_VIBRATE)
.setFullScreenIntent(pendingIntent,true)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0,builder.build());
}
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
Toast.makeText(getApplicationContext(),"오레오이상",Toast.LENGTH_SHORT).show();
/**
* 오레오 이상 노티처리
*/
// BitmapDrawable bitmapDrawable = (BitmapDrawable)getResources().getDrawable(R.mipmap.ic_launcher);
// Bitmap bitmap = bitmapDrawable.getBitmap();
/**
* 오레오 버전부터 노티를 처리하려면 채널이 존재해야합니다.
*/
int importance = NotificationManager.IMPORTANCE_HIGH;
String Noti_Channel_ID = "Noti";
String Noti_Channel_Group_ID = "Noti_Group";
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel notificationChannel = new NotificationChannel(Noti_Channel_ID,Noti_Channel_Group_ID,importance);
// notificationManager.deleteNotificationChannel("testid"); 채널삭제
/**
* 채널이 있는지 체크해서 없을경우 만들고 있으면 채널을 재사용합니다.
*/
if(notificationManager.getNotificationChannel(Noti_Channel_ID) != null){
Toast.makeText(getApplicationContext(),"채널이 이미 존재합니다.",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplicationContext(),"채널이 없어서 만듭니다.",Toast.LENGTH_SHORT).show();
notificationManager.createNotificationChannel(notificationChannel);
}
notificationManager.createNotificationChannel(notificationChannel);
// Log.e("로그확인","===="+notificationManager.getNotificationChannel("testid1"));
// notificationManager.getNotificationChannel("testid");
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(),Noti_Channel_ID)
.setLargeIcon(null).setSmallIcon(R.mipmap.ic_launcher)
.setWhen(System.currentTimeMillis()).setShowWhen(true).
setAutoCancel(true).setPriority(NotificationCompat.PRIORITY_MAX)
.setContentTitle("노티테스트!!");
// .setContentIntent(pendingIntent);
// NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0,builder.build());
}
}
});
}
}
누가버전 이하
오레오 이상
반응형
'안드로이드' 카테고리의 다른 글
android String 배열 ArrayList 변환 (0) | 2019.03.17 |
---|---|
android textview에 밑줄 그리기 (커스텀뷰로 구현) (0) | 2019.02.04 |
[android] 특수문자 \ 제거하기 (0) | 2018.08.10 |
[android] 간단한 그림판 만들기 + onDraw 위에 버튼 인식시키기 (1) | 2018.07.05 |
[android] ScrollView 안에 있는 RecyclerView 스크롤 막기 (0) | 2018.07.04 |
Comments