Принцип работы с «красными пакетами»:
Класс вспомогательной службы MyAccessibilityService расширяет AccessibilityService
Переписывается метод onAccessibilityEvent для отслеживания изменений на телефоне.
Отслеживание уведомлений в панели: Отслеживаются сообщения в панели уведомлений: AccessibilityEvent.getEventType == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; При наличии сообщения происходит переход в панель уведомлений: Notification notification = (Notification) event.getParcelableData(); PendingIntent pendingIntent = notification.contentIntent; Выполняется попытка отправки намерения: try { pendingIntent.send(); MyAccessibilityService.canGet = true; } catch (Exception e) { e.printStackTrace(); }
Переход в чат: Отслеживается изменение окна: AccessibilityEvent.getEventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; После перехода сканируется текущий макет для поиска узла «красного пакета».
Метод поиска узла «красного пакета»:
Не удалось определить по изображению.
Не удалось определить по изображению.
Находится последний узел «красного пакета» и открывается. // Имитация события клика public void performClick(AccessibilityNodeInfo nodeInfo) { Config.setFlag(nodeInfo.getPackageName().toString()); if (nodeInfo == null) { return; } switch (mFlag) {
*case Config.WX:*
*if (nodeInfo.isClickable()) {*
*nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);*
*} else {*
*performClick(nodeInfo.getParent());*
*}*
*break;*
*case Config.QQ:*
*if (null == nodeInfo.getText() || nodeInfo.getText().toString().isEmpty()) {*
*nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);*
*AccessibilityNodeInfo nodeInfoSend = getRootInActiveWindow();*
*if (nodeInfoSend == null) {*
*return;*
*}*
*AccessibilityNodeInfo sendNode = findNodeInfosByText(nodeInfoSend, «отправить»);*
*if (null != sendNode) {*
*performClick(sendNode);*
} else {*
*canGet = true;*
}*
*} else {*
*«отправить».equals(nodeInfo.getText().toString())?*
*nodeInfo.performAction(AccessibilityNodeInfo.ACTION-CLICK):*
*performClick(nodeInfo.getParent());*
*}*
*break;*
*case Config.QQ_ZONE:*
*if (nodeInfo.isClickable()) {*
*nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);*
} else {*
*performClick(nodeInfo.getParent());*
}*
*break;*
*default:*
*break;*
*}*
}
Возврат: Опущен. Рекомендуется самостоятельно ознакомиться с кодом.
##Примечание Представлен только принцип работы, для ознакомления с конкретной логикой рекомендуется обратиться к коду. (Рекомендуется установить задержку возврата на главную страницу не менее 200 миллисекунд (на самом деле 400, так как нажатие клавиши «Домой» два раза подряд занимает 200 мс каждый раз). В первый раз при нажатии на приложение WeChat для получения красного пакета не отображается структура макета. После нажатия дважды клавиши «Домой», чтобы вернуться на главный экран, а затем снова войти в WeChat, структура макета будет отображаться. Этот подход не подходит для коллективного одновременного получения красных пакетов. Вы обнаружите, что задержка очень велика, поэтому рекомендуется закрыть программу и получить красный пакет вручную. Если у вас есть другие хорошие идеи, пожалуйста, поделитесь ими, давайте учиться вместе и двигаться вперёд.) (Красные пакеты QQ Space не реализованы)
##Объяснение Этот код предназначен только для справки и обучения, строго запрещено использовать его в коммерческих целях.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )