無障礙服務(一)

最近研究了下無障礙服務,屬於初入階段吧,整理下心得。

在Android無障礙功能中,可以啓動無障礙服務以此來監控進程的使用情況,通過啓動的包名進行管理監控。

 

首先先記錄下如何使用無障礙服務:

1.      AndroidManifest中進行相應的配置:

<service
    android:name=".MyService"
    android:enabled="true"
    android:exported="true"
    android:label="myService"
           android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
    android:process=":BackgroundService">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name = "android.accessibilityservice"
        android:resource = "@xml/accessibility_service_config"  /> 
</service>

 

2.      xml文件配置,在xml文件夾下創建accessibility_service_config文件

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
    xmlns:android=http://schemas.android.com/apk/res/android
   //在服務啓動界面,用來描述此服務作用的文字說明
    android:description="@string/app_accessibility_description"
   //服務監控事件類型
    android:accessibilityEventTypes="typeAllMask"
   //服務監控後反饋的類型
    android:accessibilityFeedbackType="feedbackAllMask"
   //監控的包名,此項可不在xml文件中進行設置,可在代碼中進行動態設置,
或在代碼中也沒設置的情況下可對所有包名進行監控
    android:packageNames="com.android.settings"
   //在服務啓動界面有個設置按鈕,點擊後跳轉到的Activity
    android:settingsActivity="com.wantjoin.parentcontroller.MainActivity"
   //發送2次事件的時間間隔,超過後事件作廢
    android:notificationTimeout="100"
//此服務是否可監聽窗口內容
    android:canRetrieveWindowContent="true"  />

 

3.      創建自定義服務MyService繼承AccessibilityService實現其抽象方法:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    //監控xml設置或代碼設置AccessibilityServiceInfo的進程事件
    //在此方法中進行控制管理
    //for example:
    if (event.getPackageName().equals("com.android.settings")) {
        Intent intent= new Intent(Intent.ACTION_MAIN);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //如果是服務裏調用,必須加入new task標識
        intent.addCategory(Intent.CATEGORY_HOME);
        startActivity(intent);
        startActivity(new    Intent(MyService.this,MainActivity.class));
    }

}

@Override
public void onInterrupt() {
    //服務中斷時調用
}

4.      可重寫onServiceConnected()方法進行代碼設置xml配置內容

@Override
protected void onServiceConnected() {
        AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo();
        serviceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
        serviceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
        //在配置文件和此處都不進行監控包名設置的話,可以對所有包進行監控。
        serviceInfo.packageNames = new String[]{"com.android.settings","com.wantjoin.parentcontroller"};
        serviceInfo.notificationTimeout=100;
        setServiceInfo(serviceInfo);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章