본문 바로가기
Android/이것저것

NotificationListenerService

by 일상 속 둔치 2020. 5. 10.

푸시 알림에 대한 이벤트 핸들러를 찾다가 확인한 서비스!

 

Notification (푸시 알림)이 수신되면 해당 서비스를 이용해 핸들링 할 수 있다.

 

사용법은 다음과 같다.

 

1. NotificationListenerService를 생성하여 onNotificationPosted를 정의한다 (노티 알림 받았을 때 이벤트 핸들러)

 

2. 매니페스트에서 서비스와 인텐트 필터를 적용한다 (인텐트 필터를 사용해 노티 알람 수신)

 

3. 메인 액티비티에서 푸시 알림에 대한 접근 권한을 받는다!

 

끝.

 

 

1. NotificationListenerService

class NotificationListener : NotificationListenerService() {

    override fun onNotificationPosted(sbn: StatusBarNotification?) {
        super.onNotificationPosted(sbn)

        val notification = sbn?.notification
        val extras = sbn?.notification?.extras
        val title = extras?.getString(Notification.EXTRA_TITLE)
        val text = extras?.getCharSequence(Notification.EXTRA_TEXT)
        val subText = extras?.getCharSequence(Notification.EXTRA_SUB_TEXT)
        val smallIcon = notification?.smallIcon
        val largeIcon = notification?.getLargeIcon()

        Log.d("PushLog","onNotificationPosted ~ " +
                " packageName: " + sbn?.packageName +
                " id: " + sbn?.id +
                " postTime: " + sbn?.postTime +
                " title: " + title +
                " text : " + text +
                " subText: " + subText)
    }
}

NotificationPosted 함수 외에도 remove 등 있으니 찾아보면 좋을듯하다

 

2. 매니페스트

        <service
            android:name=".NotificationListener"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
            <intent-filter>
                <action android:name="android.service.notification.NotificationListenerService" />
            </intent-filter>
        </service>

노티에 접근하려면 권한이 필요하기 때문에 permission 설정을 해주고 인텐트 필터로 노티를 인지할 수 있게 해주자

 

3. Main

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if (!permissionGrantred()) {
            val intent = Intent(
                "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS")
            startActivity(intent)
        }
    }

    private fun permissionGrantred(): Boolean {
        val sets = NotificationManagerCompat.getEnabledListenerPackages(this)
        return sets != null && sets.contains(packageName)
    }
}

푸시 알람에 접근하기 위해서는 권한이 필요하고 매니페스트에서 권한을 설정해주었다. 이제 사용자한테 입력 받아야한다. 위 코드는 사용자한테 권한 허용 받는 코드이다.

 

끝.

'Android > 이것저것' 카테고리의 다른 글

FloatingActionButton  (0) 2020.07.11
Fragment  (0) 2020.07.05
스플래쉬  (0) 2020.05.10
그라데이션 만들기  (0) 2020.05.10
SimpleDateFormat  (0) 2020.05.06

댓글