自動化之AccessibilityService原理

輔助功能定義

對於那些由於視力、聽力或其它身體原因導致不能方便使用Android智能手機的用戶,Android提供了Accessibility功能和服務幫助這些用戶更加簡單地操作設備,包括文字轉語音(不支持中文)、觸覺反饋、手勢操作、軌跡球和手柄操作。開發者可以搭建自己的Accessibility服務,這可以加強可用性,例如聲音提示,物理反饋,和其他可選的操作模式。

隨着Android版本的不斷升級,AndroidAccessibility功能也越來越強大,Android 4.0版本以前,系統輔助服務功能比較單一,僅僅能過單向獲取窗口元素信息,比如獲取輸入框用戶輸入內容。到Android 4.1版本以後,系統輔助服務增加了與窗口元素的雙向交互,此時可以通過輔助功能服務操作窗口元素,比如點擊按鈕等

繼承AccessibilityService類

可選

 @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
//        系統會在成功連接上你的服務的時候調用這個方法,在這個方法裏你可以做一下初始化工作,例如設備的聲音震動管理,也可以調用setServiceInfo()進行配置工作。
    }

必需

  @Override
    public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
//        onAccessibilityEvent() - 必須。通過這個函數可以接收系統發送來的AccessibilityEvent,接收來的AccessibilityEvent是經過過濾的,過濾是在配置工作時設置的。
//

    }
必須

 @Override
    public void onInterrupt() {
        Log.i("json", "onInterrupt");

//        onInterrupt() - 必須。這個在系統想要中斷AccessibilityService返給的響應時會調用。在整個生命週期裏會被調用多次。
    }
可選

 @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
//        onUnbind() - 可選。在系統將要關閉這個AccessibilityService會被調用。在這個方法中進行一些釋放資源的工作。
    }

在AndroidMainfest.xml配置
 <service
            android:name=".AutomaticInstallationService"
            android:enabled="true"
            android:exported="true"
            android:label="@string/automatic_installation"
            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>


xml文件夾下的accessibility_service_config
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged|typeWindowsChanged"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"
    android:description="@string/description"
    android:notificationTimeout="100"
    android:packageNames="com.tencent.mm" />








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