利用輔助功能去監聽啓動的app,並獲取信息,代碼以下:
android
public class WindowChangeDetectingService extends AccessibilityService { @Override protected void onServiceConnected() { super.onServiceConnected(); //Configure these here for compatibility with API 13 and below. AccessibilityServiceInfo config = new AccessibilityServiceInfo(); config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; if (Build.VERSION.SDK_INT >= 16) //Just in case this helps config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; setServiceInfo(config); } @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { ComponentName componentName = new ComponentName( event.getPackageName().toString(), event.getClassName().toString() ); ActivityInfo activityInfo = tryGetActivity(componentName); boolean isActivity = activityInfo != null; if (isActivity){ } // Log.i("younchen", "appStarted:" + componentName.flattenToShortString()); } } private ActivityInfo tryGetActivity(ComponentName componentName) { try { Log.i("younchen", "get appInfo:" + componentName.getPackageName()); Toast.makeText(getApplicationContext(),componentName.getPackageName(),Toast.LENGTH_SHORT).show(); return getPackageManager().getActivityInfo(componentName, 0); } catch (PackageManager.NameNotFoundException e) { return null; } } @Override public void onInterrupt() { } }
Manifests.xml 中加入代碼app
<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>
其中name是第一段代碼那個類 ,而後在res中建立xml目錄並建立 xxx.xml內容以下:ide
<?xml version="1.0" encoding="utf-8"?>
<!-- These options MUST be specified here in order for the events to be received on first
start in Android 4.1.1 -->
<accessibility-service
xmlns:tools="http://schemas.android.com/tools"
android:accessibilityEventTypes="typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagIncludeNotImportantViews"
xmlns:android="http://schemas.android.com/apk/res/android"
tools:ignore="UnusedAttribute"/>
並將第二段代碼中的meta-data 節點下的resource路徑對應上面那段代碼路徑.以後差一步權限獲取,添加按鈕 ,在點擊事件中加入:ui
Intent intent = Intent(android.provider.Settings.)startActivityForResult(intent)
運行app後進入權限獲取頁面也就是上一段代碼跳轉的頁面,找到app名並勾上權限。以後home鍵退出app,這個時候打開任何app 會彈出app的包名 ,Demo結束this