1.Android 지원 라이브러리의 NotificationCompat API를 사용한다.
2. 모듈 build.gradle 추가
implementation "com.android.support:support-compat:28.0.0"
3. 알림 구성
3.1) 먼저 NotificationCompat.Builder 개체를 사용하여 알림의 콘텐츠와 채널을 설정해야 한다!!!
3.2) 설명->
- 알림 우선순위 : setPriority()로 설정. 우선순위에 따라 Android 7.1 이하에서 알림이 얼마나 강제적이어야 하는지가 결정됩니다. (Android 8.0 이상의 경우 다음 섹션에 표시된 채널 중요도를 대신 설정해야 합니다.)
- NotificationCompat.Builder 생성자의 경우 채널 ID를 제공해야 합니다. Android 8.0(API 레벨 26) 이상에서는 호환성을 유지하기 위해 필요하지만 이전 버전에서는 무시된다!!!
3.3) setStyle() - (이건 사용 안함)
기본적으로 알림의 텍스트 콘텐츠는 한 줄에 맞춰 잘립니다. 알림을 더 길게 표시하고 싶은 경우 setStyle() 사용
* 문서 보고 작업하세요...(생략)... *
4. 채널 만들기 및 중요도 설정
Android 8.0 이상에서 알림을 제공하려면 먼저 NotificationChannel 인스턴스를 createNotificationChannel()에 전달하여 앱의 알림 채널 을 시스템에 등록해야 합니다. 따라서 다음 코드는 SDK_INT 버전에서 조건에 의해 차단됩니다.
이 메소드는
Android 8.0 이상에서 알림을 게시하려면 알림을 만들어야 하므로 앱이 시작하자마자 이 코드를 실행해야 합니다.
기존 알림 채널을 만들면 아무 작업도 실행되지 않으므로 이 코드를 반복적으로 호출하는 것이 안전합니다.
createNotificationChannel() 메소드 설명(위위 사진) :
NotificationChannel 생성자에는 NotificationManager 클래스의 상수 중 하나를 사용하는 importance가 필요합니다. 이 매개변수에 따라 이 채널에 속하는 모든 알림을 사용자에게 전달하는 방법이 결정됩니다.
단, Android 7.1 이하를 지원하려면 위(맨 처음 사진)에 표시된 대로 setPriority()를 사용하여 우선순위를 설정해야 합니다.
-걍 넘겨--------
여기 표시된 대로 알림 중요도/우선순위를 설정해야 하지만 시스템에서 사용자에게 제공되는 알림 동작을 보장하지 않습니다. 경우에 따라 시스템에서 다른 요인을 기반으로 중요도 수준을 변경하지만 사용자가 언제든지 지정된 채널의 중요도 수준을 다시 정의할 수 있습니다.
-----------------
5. 알림의 탭 작업 설정
모든 알림은 일반적으로 앱에서 알림에 해당하는 활동을 열려면 탭에 응답해야 합니다.
이렇게 하려면 PendingIntent 개체로 정의된 콘텐츠 인텐트를 지정하고 setContentIntent()에 전달해야 합니다.
설명->
- PendingIntent->앱이 꺼져 있어도 원격으로 킬 수가 있는 거 ★
-builder 만든거 수정 함, Intent(34,35,36) 추가함
-위에 표시된 setFlags() 메서드는 사용자가 알림을 통해 앱을 연 후 예상되는 탐색 환경을 유지하는 데 도움이 됩니다.
하지만 이 메서드 사용 여부는 시작하는 활동(다음 중 하나)에 따라 결정됩니다.
6. 알림 표시(알림 진짜 띄우게 하는거)
알림을 표시하려면 NotificationManagerCompat.notify()를 호출하고
알림의 고유 ID 및 NotificationCompat.Builder.build()의 결과를 전달해라!!!
7.결과
8.코드
(목록에 git클릭해서 가면 코드 있어요"notificationpractice")
-java코드-
MainActivity.java (밑에 코드 있음)
Two.java (기본 화면만 띄우는 코드)
-이미지-
이미지 하나 사용
-layout코드-
activity_main.xml (버튼 하나)
two.xml (그냥 텍스트만)
-strings.xml-
"채널이름","채널설명" 작성함
- MainActivity.java -
package com.example.notipractice;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btn1;
private NotificationCompat.Builder builder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createNotificationChannel();
btn1 = findViewById(R.id.btn1);
// 다음 스니펫은 사용자가 알림을 탭하면 활동을 여는 기본 인텐트를 만드는 방법을 보여줍니다.
Intent intent = new Intent(this, Two.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); //PendingIntent->앱이 꺼져 있오도 원격으로 킬 수가 있는 거
// 알림의 콘텐츠와 채널 설정
builder = new NotificationCompat.Builder(this, "Channel_Id")
.setSmallIcon(R.drawable.receiveimg) // 작은 아이콘
.setContentTitle("제목!!") // 제목
.setContentText("본문!! 입니다~~~") // 본문 텍스트
.setPriority(NotificationCompat.PRIORITY_DEFAULT) // 알림 우선순위
//밑에는 intent 사용해서 작성한거
.setContentIntent(pendingIntent) // 사용자가 탭하면 자동으로 알림을 삭제
.setAutoCancel(true);
// 알림 진짜 띄우게 하는거 (알림 표시)
// NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
// notificationManager.notify(0, builder.build()); // 0 줌
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 알림 진짜 띄우게 하는거 (알림 표시)
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(MainActivity.this);
notificationManager.notify(0, builder.build()); // 0 줌
}
});
}
// 채널 만들기
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //SDK_INT 버전에서 조건에 의해 차단
CharSequence name = getString(R.string.channel_name); //채널이름
String description = getString(R.string.channel_description); //채널설명
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel("Channel_Id", name, importance);
channel.setDescription(description);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
}
'■ Android > Tip' 카테고리의 다른 글
[Android] Notification(노티피케이션), 알림 - (4)작업 버튼 추가 (0) | 2020.01.01 |
---|---|
[Android] Notification(노티피케이션), 알림 - (3)확장형 알림 만들기 (0) | 2019.12.31 |
[Android] Notification(노티피케이션), 알림 - (1)설명 (0) | 2019.12.28 |
[Android] 인텐트(Intent)사용법(8) - 주소록 앱(구글) (0) | 2019.12.27 |
Json 포맷 정리 사이트(3개) (0) | 2019.12.26 |