Android 輔助功能獲取啓動的app信息

利用輔助功能去監聽啓動的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

相關文章
相關標籤/搜索