ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TECHIT 앱 스쿨 2기: Android 40일차 (23.06.23)
    [THEC!T] 앱 스쿨2기 : Android 2023. 6. 24. 23:06
    728x90

    자료 출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 내용

     

    늦게 작성하기 하지만 어제 배운 내용을 정리하겠습니다.

     

    오전에는 전날 강사님께서 내주신 문제에 대한 설명과 실습으로 진행되었으며, 오후에는 Notification(알림) 에 대해서 알려주셨습니다.

     

    Notification

    단말기의 알림 영역에 보여지는 메세지 도구 이며, 사용자가 확인할 때 까지 해당 메시지는 사라지지 않습니다. 또한 메세지를 터치하면 애플리케이션의 Acticity를 실행 시킬 수 있습니다. 

    안드로이드 13버전 부터는 Notification을 보내기 위해서는 권한을 받아야 보낼 수 있도록 변경 되었기에

    Androidanifext 파일 내 권한 명시와 애플리케이션 실행 시 해당 권한을 확인하여 사용자에게 허가을 받아야 정상적으로 Notification을 보낼 수 있습니다.

     

    강사님께서 알려주신 내용을 바탕으로 복습을 진행하여 간단한 애플리케이션을 만들어 보았습니다.

     

     

    복습 내용

    주요 부분

     

    button.setOnClickListener {
        val bulider = getNotificationBuilder(NOTIFICATION_CHANNEL1_ID)
        bulider.setContentTitle("ContentTitle를 표시")
        bulider.setContentText("ContentText를 표시")
        bulider.setSmallIcon(android.R.drawable.ic_lock_idle_low_battery)
    
        val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)
        bulider.setLargeIcon(bitmap)
    
        bulider.setNumber(555)
    
        val notification = bulider.build()
        val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
        // 첫번째 매개변수 : 단말기 전체에서 메시지를 구분하기 위한 값
        // 같은 값으로 메시지를 계속 보내주면 메시지가 갱신 되고, 다른 값일 경우 메세시지 각각 따로 나타난다.
        notificationManager.notify(10, notification)
    }
    
    button2.setOnClickListener {
        val builder = getNotificationBuilder(NOTIFICATION_CHANNEL1_ID)
        builder.setContentTitle("Big Text 설정 타이틀")
        builder.setContentText("Big Text 설정 텍스트")
        builder.setSmallIcon(android.R.drawable.ic_menu_search)
    
        //Big Text 설정
        val big = NotificationCompat.BigTextStyle(builder)
        // 알림을 펼쳤을 때
        big.setSummaryText("하기 내용의 종류")
        big.setBigContentTitle("펼쳤을 때 보이는 타이틀")
        big.bigText("""
            가나다라바마사
            아자차카타파하
            안드로이드 스튜디오 공부 어렵다...
            힘내자~!
        """.trimIndent())
    
        val notification = builder.build()
    
    
        val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.notify(20, notification)
    
    }
    
    button3.setOnClickListener {
        val builder = getNotificationBuilder(NOTIFICATION_CHANNEL1_ID)
        builder.setContentTitle("InBox 타이틀")
        builder.setContentText("InBox 콘텐츠 텍스트")
        builder.setSmallIcon(android.R.drawable.btn_plus)
    
        val inBox = NotificationCompat.InboxStyle(builder)
        inBox.setSummaryText("인박스 SummaryText")
        inBox.setBigContentTitle("인박스 BigContentTitle")
    
        repeat(5){
            inBox.addLine("addLine을 이용한 라인 추가 $it")
        }
    
        val notification = builder.build()
        val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.notify(30, notification)
    
    }
    
    button4.setOnClickListener {
        val builder = getNotificationBuilder(NOTIFICATION_CHANNEL1_ID)
        builder.setSmallIcon(android.R.drawable.btn_plus)
        builder.setContentTitle("BigPicture 콘텐츠 타이틀")
        builder.setContentText("BigPicture 콘텐트 텍스트")
    
        val big = NotificationCompat.BigPictureStyle(builder)
        big.setBigContentTitle("big ContentTitle 지정")
        big.setSummaryText("big SummaryText 지정")
    
        val bitmap = BitmapFactory.decodeResource(resources, R.drawable.appschool)
        big.bigPicture(bitmap)
    
        val notification = builder.build()
        val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    
        notificationManager.notify(40,notification)
    }
    
    button5.setOnClickListener {
        val builder = getNotificationBuilder(NOTIFICATION_CHANNEL1_ID)
        builder.setContentTitle("메시지 콘텐츠 타이틀")
        builder.setContentText("메시지 콘텐츠 텍스트")
        builder.setSmallIcon(android.R.drawable.arrow_up_float)
    
        // 사람1
        val personBuilder1 = Person.Builder()
        val icon1 = IconCompat.createWithResource(this@MainActivity, R.drawable.appschool)
        personBuilder1.setIcon(icon1)
        personBuilder1.setName("앱스쿨")
        val person1 = personBuilder1.build()
    
        // 사람2
        val personBuilder2 = Person.Builder()
        val icon2 = IconCompat.createWithResource(this@MainActivity, R.mipmap.ic_launcher)
        personBuilder2.setIcon(icon2)
        personBuilder2.setName("멋쟁이사자")
        val person2 = personBuilder2.build()
    
        val msg = NotificationCompat.MessagingStyle(person1)
    
        // 대화 내용을 설정한다.
        msg.addMessage("앱 스쿨에서 공부하기 어때?", System.currentTimeMillis(), person1)
        msg.addMessage("좋아요", System.currentTimeMillis(), person2)
        msg.addMessage("힘들지는 않아?", System.currentTimeMillis(), person1)
        msg.addMessage("모든 사람이 열심히 해서 좋아요", System.currentTimeMillis(), person2)
    
        builder.setStyle(msg)
    
        val notification = builder.build()
        val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    
        notificationManager.notify(50, notification)
    
    }
    

     

    작성하다 보니 순서가 바뀌었는데 알림이 왔을 때 해당 알림을 누르면 Activity를 실행하는 법도 알려 주셨습니다.

     

    강사님께서 알려주신 내용을 바탕으로 복습을 진행하면서 간단한 애플리케이션을 만들어 보았습니다.

     

     

    복습 내용

    주요부분

     

    activityMainBinding.run{
    
                if(intent.getStringExtra("text1") != null){
                    textView.text = intent.getStringExtra("text1")
                    textView2.text = intent.getStringExtra("text2")
                }
                if(intent.getStringExtra("text3") != null){
                    textView.text = intent.getStringExtra("text3")
                    textView2.text = intent.getStringExtra("text4")
                }
    
                button.setOnClickListener {
                    val builder = getNoficationBuilder(NOTIFICATION_CHANNEL1_ID)
                    builder.setContentTitle("어플 실행 타이틀")
                    builder.setContentText("어플 실행 텍스트")
                    builder.setSmallIcon(android.R.drawable.bottom_bar)
    
                    builder.setAutoCancel(true)
    
                    val newIntent = Intent(this@MainActivity, this@MainActivity::class.java)
                    newIntent.putExtra("text1","알림으로 실행 된 메인 액티비티")
                    newIntent.putExtra("text2","알림으로 인한 실행 여부 : True")
    
                    val pendingIntent = PendingIntent.getActivity(this@MainActivity, 10,
                    newIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
    
                    builder.setContentIntent(pendingIntent)
    
    
                    val newIntent2 = Intent(this@MainActivity, this@MainActivity::class.java)
                    newIntent2.putExtra("text3", "알림 내 액션바로 실행 된 메인 액티비티")
                    newIntent2.putExtra("text4", "알림으로 인한 실행 여부 : True")
    
                    val pendingIntent2 = PendingIntent.getActivity(this@MainActivity, 100,
                        newIntent2, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
    
                    // Action을 생성한다.
                    // 첫 번째 : 아이콘 설정
                    // 두 번째 : 표시할 문자열
                    // 세 번째 : PendingIntent
                    val builder2 = NotificationCompat.Action.Builder(
                        android.R.drawable.ic_dialog_alert, "Action", pendingIntent2)
                    val action2 = builder2.build()
                    builder.addAction(action2)
    
                    val notification = builder.build()
                    notificationManager.notify(10, notification)
                }
            }

     

     

    Notification 채널 생성:
    알림을 그룹화하고 설정하기 위해 Notification 채널을 생성해야 합니다. NotificationManager에 의해 사용됩니다. 채널은 중요도, 알림 소리, 진동 패턴 등과 같은 속성을 가질 수 있습니다.

     

    NotificationCompat.Builder를 사용하여 알림을 생성합니다. 필요한 정보로는 채널 ID, 알림 제목, 내용 등이 포함됩니다.

     

    알림에는 사용자의 상호작용에 대한 응답으로 수행할 작업을 설정할 수 있습니다. 예를 들어, 알림을 클릭하면 특정 액티비티로 이동하거나 특정 작업을 수행할 수 있습니다.

     

     알림 채널을 생성하고, NotificationCompat.Builder를 사용하여 알림을 생성하며, 사용자의 상호작용에 대한 동작을 설정합니다. 필요에 따라 코드를 수정하여 사용자에게 적합한 알림을 만들 수 있습니다.

     

    마무리

    이제는 작성하는 코드의 양이 많아 배운 내용들을 복습하며 만든 애플리케이션의 동작 영상과 주요 부분 코드 및 개념등을 작성하며, 하루를 마무리하는 할 수 있도록 노력해야겠습니다. 어제의 경우 알고리즘 특정 문제에 빠져 작성하다가 시간이 늦어 작성을 하지 못하였지만, 그런 일이 많이 생기지 않도록 평일에는 당일 배운 내용 복습 위주로 공부를 하고 주말에 알고리즘과 정보처리기사 등을 공부 할 수 있도록 해야겠습니다.

     

    오늘의 마음가짐

    할 것이 너무 많더라도, 하나하나 해나가는 사람이 되자.

     

     

Designed by Tistory.