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);
        }
    }

}