그중 흥미로운 내용이 있었으니 AccessibilityService 서비스를 이용하는 방법이 있었으니, 아주 훌륭하게 동작하였다.
단 하나의 단점은 app을 설치하고, 설정의 접근성 메뉴를 통해서 enable시도를 하여야 한다.
메뉴의 위치는 아래와 같다.
Home Screen > System Settings > Accessibility > Accessibility Services > Toast2 > Change from Off to On,
위의 위치에서 enable해도 되지만 접근성 바로가기를 app에서 지원하게 만들 수도 있다.
Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, 0);
테스트에 사용한 코드
public class WindowChangeDetectingService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) Log.i("WindowChangeDetectingService", "Window Package: " + event.getPackageName()); } }
AndroidManifest.xml 에 아래 항목 추가
<application> <service android:name=".WindowChangeDetectingService" 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/accessibilityservice"/> </service> </application>
xml 파일 추가
Put this in
res/xml/accessibilityservice.xml
:<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
android:accessibilityEventTypes="typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagIncludeNotImportantViews"
android:description="@string/app_name"
android:settingsActivity="your.app.ServiceSettingsActivity"
xmlns:android="http://schemas.android.com/apk/res/android" />
단 여기 항목중 항목은 자신의 app ativity를 적어 줍니다. 설정시 ui를 제공한다고는 하나 대충 안적어도 동작합니다.테스트에서는 아래와 같이 하였습니다.
<?xml version="1.0" encoding="utf-8"?> <accessibility-service android:accessibilityEventTypes="typeWindowStateChanged" android:accessibilityFeedbackType="feedbackGeneric" android:accessibilityFlags="flagIncludeNotImportantViews" android:description="@string/app_name" android:settingsActivity="com.example.MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" />
출처 참고
http://stackoverflow.com/questions/3873659/android-how-can-i-get-the-current-foreground-activity-from-a-service?lq=1
http://stackoverflow.com/questions/11087758/accessibility-service-is-not-started/11203192#11203192
혹시 풀 프로젝트를 볼수있을까요? ㅠㅠ
답글삭제오래된 프로젝트입니다. 제대로 동작이 될지 모르겠네요.
삭제https://drive.google.com/open?id=0B9vAKDzHthQIV1pvMkw0OGdNeEE
진짜 몇일째 검색해보고 찾다가 드디어 제가 원하는 부분을 찾았네요 정말 감사합니다 ㅎㅎ
답글삭제감사합니다 많은 도움이 되었습니다
답글삭제