본문 바로가기

아옳옳의 코딩공부/아옳옳의 안드로이드스튜디오

2021-03-26안드로이드 스튜디오(알림설정[Notification])

반응형

어제에 이어 위엄권한과 브로드캐스트 공부이다.

색별로 셋팅을 따로 해줄수 있다 .

 

*프로젝트이름은 매니패스트에서 라벨변경해주면 변경가능하다 

 

실제 핸드폰화면인데 이렇게 보는 것이 알림이다 . ( 카카오톡 생각하면 된다 ) 이런것들을 설정할 수 있는게 알림이다.

(내가 만들고 싶은 앱 보탐봇에 필수적인 요소 ) 

 

코드보자 

메인 액티비티 

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    // 알림을 시스템에 발생시키는 SystemService
    NotificationManager manager;
    // 알림을 다양한 정보로 생성
    NotificationCompat.Builder builder;

    Button basicBtn, bigPictureBtn, bigTextBtn, progressBtn, inBoxBtn, headsupBtn, messageBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        basicBtn = findViewById(R.id.lab2_basic);
        bigPictureBtn = findViewById(R.id.lab2_bigpicture);
        bigTextBtn = findViewById(R.id.lab2_bigtext);
        progressBtn = findViewById(R.id.lab2_progress);
        inBoxBtn = findViewById(R.id.lab2_inbox);
        headsupBtn = findViewById(R.id.lab2_headsup);
        messageBtn = findViewById(R.id.lab2_message);

        basicBtn.setOnClickListener(this);
        bigPictureBtn.setOnClickListener(this);
        bigTextBtn.setOnClickListener(this);
        progressBtn.setOnClickListener(this);
        inBoxBtn.setOnClickListener(this);
        headsupBtn.setOnClickListener(this);
        messageBtn.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        // 각종 정보를 담고 있는 시시템에 등록하려면 NotificationManager 필요 시스템서비스로 요청을 해야한다
        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        //오레오버전 미만은 채널을 모른다  버전에 맞게 사용
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //1. 채널만들어서 이름 , 아이디 , 설명 등만들어줌
            //오레오버전 이상일경우 채널설정을 해야한다
            // 알림을 관리하는 하나의 채널이다.
            String channelId = "one - Channel";
            String channelName = "My Channel One";
            String channelDescription = "My Channel One Description";
            NotificationChannel channel = null;
            //

            //채널생성 해주고 채널에 내가 만든 아이디랑 ,이름, NotificationManager 넣어주기 );
            if(v==headsupBtn)//급한경우에 사용하게 하라 , 우선순위가 높다 . 그래서 IMPORTANCE_HIGH 이걸 넣어준다
                channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH);
            else
                channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);
            //이렇게 한줄로 써도 되지만 위에서 headsup 이면 다르게 해야햐서 if문으로 돌림
            // NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_DEFAULT);

            //만들 채널에 setDescription 해주기
            channel.setDescription(channelDescription);

            //알림 이렇게 추가 꼭 이렇게 써야겠다 싶으면 써도 되는데 굳이 ... ?ㅋㅋㅋ
            //channel.setVibrationPattern(new long[]{100,200,300});
            //channel.enableLights(true);


            // 2. 매니저에 채널 달아줌
            manager.createNotificationChannel(channel);
            // 3. 빌더를 만들어서 속에 차곡차곡 쌓아주는것이다 . 그런것을 시스템매니저에 셋팅해주는것
            builder = new NotificationCompat.Builder(this, channelId);


        } else { // 오레오버전 아래는 이렇게 사용된다
            builder = new NotificationCompat.Builder(this);
        }///////////////////////////////////////////////////////////////////////////////////
        // 아래 코드는 직접인 이벤트 작성부분
        //기본적인 알림 구성 설정
        builder.setSmallIcon(android.R.drawable.ic_notification_overlay);
        builder.setContentTitle("아옳이");
        builder.setContentText("아옳옳옳옳");
        // 알림에 소리와 진동은 자동으로 들어가나 아래처럼 불빛도 추가 할 수있다.
        // builder.setDefaults(Notification.DEFAULT_LIGHTS);
        builder.setAutoCancel(true);

        //PendingIntent 이걸로 어나더 액티비티로 넘어감 ( 이벤트 처리와 알림 )
        // 1.인텐트에 내가 이동할 액티비티 연결
        Intent intent = new Intent(this, AnotherActivity.class);
        // 2. PendingIntent 생성 액티비티로 이동 
        // (context 정보 , 리퀘스트 코드 , 인텐트 ( 위에서 어나더액티비티로 이동하기위해 만듬 ) , 플래그 )
        PendingIntent pendingIntent = PendingIntent.getActivity(this,
                10,intent,PendingIntent.FLAG_UPDATE_CURRENT);
        //빌더에 셋팅해줌
        builder.setContentIntent(pendingIntent);

        // 2-2 PendingIntent 브로드캐스트와 연결 위처럼 인텐트 만들어서 해도 고 여기처럼 아에 코드속에 넣어두 무관 
        PendingIntent addActionIntent = PendingIntent.getBroadcast(this,
                20,new Intent(this, MyReceiver.class),PendingIntent.FLAG_UPDATE_CURRENT);
        //빌더에 액션 추가 
        builder.addAction(new NotificationCompat.Action.Builder(android.R.drawable.ic_menu_share,
                "ACTION",addActionIntent).build());


        // 이미지 셋팅해주고 비트맵 팩토리에 들어가서 새로 만들어야함
        Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),R.drawable.noti_large);
        builder.setLargeIcon(largeIcon);
        // 큰사진 추가한 알림
        if(v==bigPictureBtn){
            Bitmap bigPicture = BitmapFactory.decodeResource(getResources(),R.drawable.noti_big);
            NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(builder);
            bigPictureStyle.bigPicture(bigPicture);
            builder.setStyle(bigPictureStyle);
            //긴 택스트 추가한 알림
        }else if (v == bigTextBtn){
            NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle(builder);
            bigTextStyle.setSummaryText("빅 아옳이 ");
            bigTextStyle.setBigContentTitle("아옳이 울음소리");
            bigTextStyle.bigText("아옳옳옳 옳옳 오르르옳 옳옳옽오옳오오오오오오오오오오오오오오오오오옹ㄹ옳");
            builder.setStyle(bigTextStyle);
            //박스형식 알림 추가한것
        }else if (v == inBoxBtn){
            NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(builder);
            inboxStyle.setBigContentTitle("호롤롤로");
            inboxStyle.addLine("아오소포겐");
            inboxStyle.addLine("아따따뚜겐");
            inboxStyle.addLine("요가 파이어");
            inboxStyle.addLine("선풍각!!!");
            inboxStyle.setSummaryText("각종 기술들");
            builder.setStyle(inboxStyle);
            //프로그래스바
        }else if(v ==progressBtn){
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    for (int i = 1 ; i<=10 ; i++){
                        builder.setAutoCancel(false); // 알림을 지우기 위한 작업 
                        builder.setOngoing(true); //사용자가 알림을 없애지 못하게함 
                        builder.setProgress(10,i,false); // 프로그래스바 
                        //함수로 알림을 등록
                        manager.notify(300,builder.build());
                        if(i>=10){
                            //알림을 10번 반복하면 자동 알림 자동종료 
                            manager.cancel(300);
                        }
                        SystemClock.sleep(1000);
                    }
                }
            };
            Thread thread = new Thread(runnable);
            thread.start();
        //전화오는것과 같은 알림
        }else if (v==headsupBtn){//같이 쓸꺼면 쓰면 안된다 .. 충돌 오류
            builder.setFullScreenIntent(pendingIntent,true);
        //메시지와 같은 형식의 알림
        }else if (v==messageBtn){
            Person sender1 = new Person.Builder()
                    .setName("kim")
                    .setIcon(IconCompat.createWithResource(this,R.drawable.person1))
                    .build();
            Person sender2 = new Person.Builder()
                    .setName("Lee")
                    .setIcon(IconCompat.createWithResource(this,R.drawable.person2))
                    .build();

            NotificationCompat.MessagingStyle.Message message = new NotificationCompat.MessagingStyle.Message("Hello",System.currentTimeMillis(),sender2);

            NotificationCompat.MessagingStyle style = new NotificationCompat.MessagingStyle(sender1)
                    .addMessage("Good~!" , System.currentTimeMillis(),sender2)
                    .addMessage(message);

            builder.setStyle(style);


        }
        //4. notify알림실행 해줌
        manager.notify(1000, builder.build());
    }

}

코드를 보면 순서가 나와있다 . 

 

일단 시스템과소통해줄 매니저 만들어주고 직접 알림을 세팅해주는 빌더를 만들어줬다 . 

그리고 안드로이드 오레오이상 버전은 채널을 만들어서 관리를 해주어야 하기 때문에 1. 채널을 만들어줌 

2.만들어준 채널을 매니저에 달아줌 3.빌더에 채널 아이디값 넣어줌 4. 그리고 나서내가 원하는 이벤트나 디자인등을 빌더에 셋팅해주고 마지막에 매니저에 빌더를 주어 notity해주면 된다 .

 

이렇게 작성한 코드를 실행시키면 다음과 같이 실행 되는것을 볼수 있다. ( 여러개라 일단 하나만 ) 

 

알림기능은 다 외우고 할수 없기 때문에 이러한 기능들이 있다 라고 알고 있다가 내가 필요할때 찾아보고 그 내용물만 채워주면 될것이다 . 

 

코드는 복잡해 보이지만 실상을 저기에 기능들을 다 쓰는것이 아니기 때문에 코드보고 이해해 놓는게 중요!! 

반응형