参考:http://blog.csdn.net/itfootball/article/details/21953763
实现监控手机的各种事件(点击,通知等等)
MyServer.java:
package com.example.xxh.accessibilityservertest;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
/**
* Created by xxh on 2017/9/20.
*/
public class MyServer extends AccessibilityService {
private static final String TAG = "xxxxxxx";
@Override
protected void onServiceConnected()
{
/*AccessibilityServiceInfo accessibilityServiceInfo = new AccessibilityServiceInfo();
accessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
accessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
accessibilityServiceInfo.notificationTimeout = 1000;
setServiceInfo(accessibilityServiceInfo);*/
Log.i(TAG, "config success");
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
int eventType = event.getEventType();
String eventText = "";
switch (eventType) {
case AccessibilityEvent.TYPE_VIEW_CLICKED:
//Log.i(TAG, "==============Start====================");
eventText = "TYPE_VIEW_CLICKED";
/*AccessibilityNodeInfo nodeInfo = event.getSource();
Log.i(TAG, nodeInfo.toString());*/
//Log.i(TAG, "=============END=====================");
break;
case AccessibilityEvent.TYPE_VIEW_FOCUSED:
eventText = "TYPE_VIEW_FOCUSED";
break;
case AccessibilityEvent.TYPE_VIEW_LONG_CLICKED:
eventText = "TYPE_VIEW_LONG_CLICKED";
break;
case AccessibilityEvent.TYPE_VIEW_SELECTED:
eventText = "TYPE_VIEW_SELECTED";
break;
case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
eventText = "TYPE_VIEW_TEXT_CHANGED";
break;
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
eventText = "TYPE_WINDOW_STATE_CHANGED";
break;
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
eventText = "TYPE_NOTIFICATION_STATE_CHANGED";
Log.i(TAG, "==============Start====================");
AccessibilityNodeInfo nodeInfo = event.getSource();
if(nodeInfo == null) {
Log.i(TAG, "eeeee");
return;
}
Log.i(TAG, nodeInfo.toString());
/*AccessibilityNodeInfo rowNode = getRootInActiveWindow();
if(rowNode == null) {
Log.i(TAG, "noteInfo is null");
return;
}
else {
recycle(rowNode);
}*/
Log.i(TAG, "=============END=====================");
break;
case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END:
eventText = "TYPE_TOUCH_EXPLORATION_GESTURE_END";
break;
case AccessibilityEvent.TYPE_ANNOUNCEMENT:
eventText = "TYPE_ANNOUNCEMENT";
break;
case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START:
eventText = "TYPE_TOUCH_EXPLORATION_GESTURE_START";
break;
case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER:
eventText = "TYPE_VIEW_HOVER_ENTER";
break;
case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT:
eventText = "TYPE_VIEW_HOVER_EXIT";
break;
case AccessibilityEvent.TYPE_VIEW_SCROLLED:
eventText = "TYPE_VIEW_SCROLLED";
break;
case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED:
eventText = "TYPE_VIEW_TEXT_SELECTION_CHANGED";
break;
case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
eventText = "TYPE_WINDOW_CONTENT_CHANGED";
break;
}
//eventText = eventText + ":" + eventType;
//Log.i(TAG, eventText);
}
@Override
public void onInterrupt() {
}
private void recycle(AccessibilityNodeInfo info)
{
if(info.getChildCount() == 0) {
Log.i(TAG, "child widget ---------------" + info.getClassName());
Log.i(TAG, "showDialog:" + info.canOpenPopup());
Log.i(TAG, "text:" + info.getText());
Log.i(TAG, "windowId:" + info.getWindowId());
}else {
for(int i = 0; i < info.getChildCount(); i++) {
if(info.getChild(i) != null) {
recycle(info.getChild(i));
}
}
}
}
}
MainActivity.java
package com.example.xxh.accessibilityservertest;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setAction("android.accessibilityservice.AccessibilityService");
intent.setPackage(getPackageName());
startService(intent);
Log.i("aaa","bbbbbbbbb");
}
}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.xxh.accessibilityservertest"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <service android:name=".MyServer" android:enabled="true" android:exported="true" 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> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
accessibility.xml(res/xml/):
<?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged|typeViewClicked|typeViewFocused" android:accessibilityFeedbackType="feedbackSpoken" android:accessibilityFlags="flagDefault" android:canRetrieveWindowContent="true" android:notificationTimeout="100" />
本文为原创内容,作者:闲鹤,原文链接:https://blog.uwenya.cc/285.html,转载请注明出处。