• 안드로이드스튜디오 기본 설정 앱 알림 접근/알림 표시 상태 확인/알림창 띄우기

    2022. 6. 8.

    by. 하루플스토리

    반응형

    안녕하세요, 하루플 입니다😀

     

    최근 앱 개발하다가 안드로이드 내장 기본 설정 앱에서 앱 알림에 접근해야 하는 경우가 있어서 코드를 찾아봤습니다.

    만약 기본 설정 앱에서 저희가 출시한 앱의 알림이 꺼져있으면 아무리 푸시를 준다고 해도 알림이 사용자에게 가지 않기 때문에 회사는 당연히 사용자가 자사앱 알림 옵션을 켜기를 바랍니다.

     

    그래서 오늘 개발할 기능은

    1. 사용자의 시스템 기본 설정 앱 알림 On, Off 상태를 확인하고

    2. 설정의 앱 알림 화면으로 즉시 이동하는 기능을 개발합니다.

     

     

     

    1. 앱 알림 On, Off 상태 확인

    NotificationManagerCompat.from(context).areNotificationsEnabled()

    위 코드를 사용하면 Boolean 으로 사용자가 설정에서 앱 알림을 켰는지 true, false 값을 리턴합니다.

    한줄로 확인할 수 있어서 너무 편한 코드입니다.

     

     

     

    2. 설정 앱 알림 화면으로 이동

    일반적으로 화면을 이동할 때 Intent 를 많이 사용합니다.

    마찬가지로 Intent를 사용하여 설정 앱 알림 화면으로 이동해보겠습니다.

     

    Activity 클래스의 경우

    val intent = when {
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
            Intent().apply {
                action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
                putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
            }
    
        }
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> {
             Intent().apply {
                 action = "android.settings.APP_NOTIFICATION_SETTINGS"
                 putExtra("app_package", packageName)
                 putExtra("app_uid", applicationInfo?.uid)
            }
        }
        else -> {
            Intent().apply {
                action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
                addCategory(Intent.CATEGORY_DEFAULT)
                data = Uri.parse("package:$packageName")
            }
        }
    }
    startActivity(intent)

     

    Fragment 클래스의 경우

    val intent = when {
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
            Intent().apply {
                action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
                putExtra(Settings.EXTRA_APP_PACKAGE, activity?.packageName)
            }
        }
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> {
            Intent().apply {
                action = "android.settings.APP_NOTIFICATION_SETTINGS"
                putExtra("app_package", activity?.packageName)
                putExtra("app_uid", activity?.applicationInfo?.uid)
            }
        }
        else -> {
            Intent().apply {
                action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
                addCategory(Intent.CATEGORY_DEFAULT)
                data = Uri.parse("package:${activity?.packageName}")
            }
        }
    }
    startActivity(intent)

    프래그먼트에서는 pakageName 앞에 activty?를 붙혀 activity의 함수임을 알려주면 사용이 가능합니다.

    그리고 스마트폰의 SDK 버전에 따라 사용이 가능한 코드가 다르기 때문에 최대한 많은 스마트폰에서 사용이 가능하도록 코드에서 분기처리 되어있습니다.

     

    위 코드들을 사용해 사용자가 자사 앱 알림이 꺼져있는 경우 알림 화면으로 접속 시 기본 설정 알림화면으로 이동시켜 알림을 켜도록 유도할 수 있습니다.

    개발하면서 신기했던 건 다른 앱으로 접근해야하기 때문에 Menifest를 건드려야 할 줄 알았는데 그런거 없이 코틀린 코드로만 구현이 가능해서 편했습니다 😋

    반응형

    댓글