public class AutoCopyService extends AccessibilityService {
private String TARGET_UI = "";
private String EDIT_TEXT_ID = "";
@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {
int eventType = event.getEventType();
if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED || eventType == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
//
getWeChatSupport();
if (TARGET_UI.equals(event.getClassName())) {
//如果当前页面是目标页面
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
final AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo == null) {
System.out.println(" onAccessibilityEvent error null");
return;
}
if (TextUtils.isEmpty(EDIT_TEXT_ID)) {
Toast.makeText(this, "自动复制失败,并重试!", Toast.LENGTH_SHORT).show();
return;
}
List<AccessibilityNodeInfo> openId = nodeInfo.findAccessibilityNodeInfosByViewId(EDIT_TEXT_ID);
if (openId != null && openId.size() > 0) {
String timeLineContent = Preference.create(this).getPrefString("TIME_LINE_CONTENT", "");
if (!TextUtils.isEmpty(timeLineContent)) {
Bundle arguments = new Bundle();
arguments.putCharSequence(AccessibilityNodeInfo
.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, timeLineContent);
openId.get(0).performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);
}
Preference.create(this).setPrefString("TIME_LINE_CONTENT", "");
}
//-------------------------673版本處理方案----------------------------------------------
/**
* 添加按钮的GridView的Item的LinearLayout
* 667 com.tencent.mm:id/jz
* 673 com.tencent.mm:id/lr
*/
int image_num = Preference.create(getApplicationContext()).getPrefInt("image_num", 0);
if (image_num <= 0)
return;
List<AccessibilityNodeInfo> imageAdd = nodeInfo.findAccessibilityNodeInfosByText("添加照片按钮");
if (null == imageAdd || imageAdd.isEmpty())
return;
List<AccessibilityNodeInfo> alreadyAdd = nodeInfo.findAccessibilityNodeInfosByText("图片");//已经添加的图片
//如果已经添加的图片数量 等于 模板图片的数量,则不用点击
if (null != alreadyAdd && alreadyAdd.size() == (image_num + 1)) {
return;
}
AccessibilityNodeInfo lin_image_add = imageAdd.get(0).getParent();
if (null == lin_image_add) {
return;
}
//点击相机小图片
lin_image_add.performAction(AccessibilityNodeInfo.ACTION_CLICK);
sleep(600);
//点击从相册选择
clickToChooseImage();
}
}
//自动选择图片
if ("com.tencent.mm.plugin.gallery.ui.AlbumPreviewUI".equals(event.getClassName())) {
int image_num = Preference.create(getApplicationContext()).getPrefInt("image_num", 0);
if (image_num <= 0) {
return;
}
sleep(500);
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
checkImage(nodeInfo);
}
}
}
//选择图片
private void checkImage(AccessibilityNodeInfo nodeInfo) {
//com.tencent.mm:id/bt3
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
/**
* 图片列表的CheckBoc上层的ImageVIew 代替点击的
* 667 com.tencent.mm:id/bt4
* 673 com.tencent.mm:id/bhl
*/
int image_num = Preference.create(getApplicationContext()).getPrefInt("image_num", 0);
int compat_num = Preference.create(getApplicationContext()).getPrefInt("compat_num", 0);
if (null == nodeInfo) {
if (compat_num > 0) {
sleep(1000);
performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS);
sleep(600);
performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
Preference.create(getApplicationContext()).setPrefInt("compat_num", 0);
} else {
Preference.create(getApplicationContext()).setPrefInt("image_num", 0);
Toast.makeText(this, "当前手机不支持自动选择,请从第" + image_num + "个倒序手动选择图片", Toast.LENGTH_SHORT).show();
}
return;
}
List<AccessibilityNodeInfo> checkList = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bhl");
if (null == checkList || checkList.isEmpty()) {
Preference.create(getApplicationContext()).setPrefInt("image_num", 0);
Toast.makeText(this, "本次操作不支持自动选择,请从第" + image_num + "个倒序手动选择图片", Toast.LENGTH_SHORT).show();
return;
}
if (image_num < checkList.size()) {
for (int i = image_num - 1; i >= 0; i--) {
logger("addimage_click", String.format("点击第%d张", i));
checkList.get(i).performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
clickSubmitImage(nodeInfo);
}
}
}
private void clickSubmitImage(AccessibilityNodeInfo nodeInfo) {
// com.tencent.mm:id/hg
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
/**
* 完成 的 TextView
* 667 com.tencent.mm:id/hg
* 673 com.tencent.mm:id/j0
*/
Preference.create(getApplicationContext()).setPrefInt("image_num", 0);
List<AccessibilityNodeInfo> submit = nodeInfo.findAccessibilityNodeInfosByText("完成");
// List<AccessibilityNodeInfo> submit = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/j0");
if (null == submit || submit.isEmpty()) return;
submit.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
private void clickToChooseImage() {
//
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
final AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (null != nodeInfo) {
/**
* 点击添加图片的弹出框的ListView
* 667 com.tencent.mm:id/i7
* 673 com.tencent.mm:id/jq
*/
List<AccessibilityNodeInfo> textView = nodeInfo.findAccessibilityNodeInfosByText("从相册选择");
if (textView.isEmpty()) return;
try {
AccessibilityNodeInfo lin_item = textView.get(0).getParent().getParent();
if (TextUtils.equals(lin_item.getClassName(), "android.widget.LinearLayout"))
lin_item.performAction(AccessibilityNodeInfo.ACTION_CLICK);
logger("addimage_click", "跳转到选择图片列表");
} catch (Exception e) {
logger("addimage_click", e.getMessage());
}
}
}
}
private void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void onInterrupt() {
logger("addimage_click", "onInterrupt 服务中断了");
}
@Override
protected void onServiceConnected() {
logger("addimage_click", "onServiceConnected success");
getWeChatSupport();
super.onServiceConnected();
}
/**
* 加载微信的相关信息
*/
private void getWeChatSupport() {
String install_wechat_version_name = Preference.create(this).getPrefString("install_wechat_version_name", "");
if (TextUtils.isEmpty(install_wechat_version_name))
return;
try {
WechatSuppertEntity support = App.getDB().findById(WechatSuppertEntity.class, install_wechat_version_name);
TARGET_UI = support.getTarget_ui();
EDIT_TEXT_ID = support.getWechat_weiget_id();
} catch (Exception e) {
e.printStackTrace();
TARGET_UI = "";
EDIT_TEXT_ID = "";
}
}
private void logger(String tag, String message) {
boolean isDebug = x.isDebug();
if (isDebug) {
LoggerPrinter.saveLogger("自动辅助服务:tag:" + tag + "--->message:" + message);
}
}
}