Accessbility 又叫做輔助功能崎淳,是Android官方推出幫助身體不便或者操作不靈活的人來輔助操作的翼雀,也可以用來干一些別的事徒探,比如自動搶紅包啊葬荷,靜默安裝點擊啊等已知或者未知的應用坑夯。出于某種需求岖寞,就研究了下這個功能的簡單用法,先做一個模擬按鈕點擊的效果柜蜈。
布局很簡單仗谆,就不貼代碼了指巡,簡單描述下,主界面就一個按鈕隶垮,id隨便你取藻雪,在Activity中設置點擊事件,彈出一個Toast狸吞。
步驟
-
創(chuàng)建CheckAccessbilityServices:
CheckAccessbilityServices 繼承自AccessibilityService勉耀,并在清單文件applcation節(jié)點中配置,并加入權限
<service
android:name=".CheckAccessbilityServices"
android:enabled="true"
android:exported="true"
android:label="測試點擊"
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/check_accessibility_config" />
</service>
2.在res目錄下創(chuàng)建文件夾xml蹋偏,并創(chuàng)建步驟一中check_accessibility_config.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/check_click"
android:packageNames="com.notrace"
android:accessibilityEventTypes= "typeAllMask|typeViewClicked|typeViewFocused|typeNotificationStateChanged|typeWindowStateChanged"
android:accessibilityFlags="flagDefault"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true" />
這里面有一些常用的屬性便斥,簡單介紹下
android:accessibilityEventTypes="typeAllMask"
看屬性名也差不多可以明白,這個是用來設置響應事件的類型威始,typeAllMask當然就是響應所有類型的事件了枢纠。當然還有單擊、長按字逗、滑動等京郑。
android:accessibilityFeedbackType="feedbackSpoken"
設置回饋給用戶的方式android:notificationTimeout="100"
響應時間的設置就不用多說了
android:packageNames="com.notrace"
可以指定響應某個應用的事件,我的demo包名就叫com.notrace,可以多個葫掉,用","隔開。
android:description="模擬點擊"
描述你在系統(tǒng)輔助功能開關中看到的描述
3.CheckAccessbilityServices 實現onAccessibilityEvent和onInterrupt方法
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
//過濾包名
String pkgName = event.getPackageName().toString();
if(!"com.notrace".equals(pkgName))
return;
switch (type){
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
//切換頁面的時候此時會觸發(fā)一個叫TYPE_WINDOW_STATE_CHANGED的事件
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if(nodeInfo!=null) {
if("com.notrace.MainActivity".equals(event.getClassName())){
List<AccessibilityNodeInfo> list=
nodeInfo.findAccessibilityNodeInfosByViewId("com.notrace:id/btn_click");
if(list!=null&&list.size()>0) {
list.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
break;
case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
break;
}
}
注意這里有個叫com.notrace:id/btn_click的俭厚,就是前面的那個按鈕户魏,我取id叫btn_click,這個東西可以通過eclipse提供的一個工具dump查看,如下圖:
微信搶紅包的界面你就可以這么看了叼丑。
list.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); 就是模擬點擊事件
至此鸠信,模擬點擊就已經全部完成了星立,我們打開手機輔助功能界面會看見:
點擊進去:
打開這個開關就可以了。
至此火焰,當頁面切換到MainActivity中就可以彈出toast了劲装,至于別的奇奇怪怪的功能,就需要小伙伴們自己摸索了。
Demo代碼