푸시 알림에 대한 이벤트 핸들러를 찾다가 확인한 서비스!
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 |
댓글