안드로이드에서 접근성 서비스를 사용하면 Notification을 캡쳐할 수 있다.
해놓고 보면 굉장히 간단한데.. 알아내기 까지 많은 시간이 걸렸다.
혹시 필요로 하는 사람이 있을지도 몰라 이렇게 간단히나마 정리해두려한다.
1. AndroidManifest
- 아래 소스에서 <span> 부분을 제외하고 사용해야 한다. span은 내가 넣지도 않았는데 자꾸 생긴다 ㅡㅡ;
### xml
<service android:name="접근성 이벤트 발생 시 실행되는 클래스(AccessibilityService를 Extends한 클래스)의 패키지 포함 클래스 명"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
2. /res/xml/accessibility_service_config.xml
### xml<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/accessibility_service_description"
android:description="@string/accessibility_service_description_desc"
android:canRetrieveWindowContent="true"
android:enabled="true"
android:exported="false"
android:accessibilityFlags="flagDefault"
android:accessibilityEventTypes="typeNotificationStateChanged"
android:accessibilityFeedbackType="feedbackAllMask"
android:notificationTimeout="100"
android:packageNames="@null"/>
3. Notification을 잡았을 때 호출되는 Class 소스
http://developer.android.com/guide/topics/ui/accessibility/services.html 중 AccessibilityService를 Extends 하는 소스를 참고하여 작성한다.
사실 처음부터 이렇게 하는걸 알고는 있었는데.. res/xml 밑에 xml 하나 더 만드는게 귀찮아서 Manifest에다가 모조리 적었다.
그랬더니 개발하면서 앱을 덮어서 설치하던가 디바이스를 껐다가 키면 접근성 서비스는 On이 되어 있는데..
이벤트를 받지 못하는 상황이 발생했다. 거의 이주일 동안 해법을 찾아보았는데..
결국 https://code.google.com/p/android/issues/detail?id=33934 여기에서 발견했다.
Not a bug, just a PITA to make it work for both pre-JB and JB API level. JB needs an XML config referred from a manifest. The docs may not be clear enough that it is obligatory, but it is. Without it after reboot or app upgrade the intents will not be delivered. http://developer.android.com/guide/topics/ui/accessibility/services.html
/res/xml/accessibility_service_config.xml
그건 버그가 아니고 젤리빈 이전과 이후를 모두 동작하도록 하기 위해서 xml config 파일을 두어야 한다는 것.
즉, Manifest에 다 때려 넣으면 안된다는 것.
진작부터 안드로이드 사이트(위에 3번의 링크)에서는 분리하여 만들라고 되어있다.
교훈. 시키는데로 하자.
'Work > Android' 카테고리의 다른 글
APK 생성 시 Lint Error... 라고 나올 때 (0) | 2015.10.06 |
---|