Cómo omitir el anuncio de la pantalla de inicio de la aplicación Nuggets (2)

Este es el día 24 de mi participación en el Desafío de actualización de agosto. Para obtener detalles del evento, consulte: Desafío de actualización de agosto

Cómo omitir el anuncio de la pantalla de inicio de la aplicación Nuggets (2)

El último artículo analizó que el núcleo de querer omitir el anuncio de pantalla abierta es que el teléfono móvil nos ayuda a hacer clic en 跳过el botón, y finalmente seleccionó el servicio de accesibilidad como nuestra tecnología.Este artículo implementará el código para omitir la función de publicidad.

1. Efecto

Los clics programáticos son 跳过mucho más rápidos que los clics manuales.

1629623520219210.gif

En segundo lugar, la implementación del código.

2.1 Devoluciones de llamadas clave

Después de la clase de herencia de servicio creada AccessibilityService, otra devolución de llamada clave es la onAccessibilityEventdevolución de llamada, y nuestra lógica está toda en este método.

 @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
}
复制代码

2.1 Localización del nombre del paquete

Solo queremos omitir anuncios en una determinada aplicación o en determinadas aplicaciones.

dos métodos

  1. Agregue el nombre del paquete de la aplicación al android:packageNamesatributo
  2. Obtenga el nombre del paquete en el servicio y haga un juicio.
String packageStr = event.getPackageName().toString();

if (TextUtils.equals(packageStr, "com.xx.xxx")) {
        
}
复制代码

Por ejemplo, el nombre del paquete de la aplicación Nuggets obtenida escom.daimajia.gold

pd: busqué en Internet 代码家y github muestra que esta persona es el CTO de Nuggets.

2.2 Localice el componente de destino

Si desea agregar un método de clic a un componente, primero debe ubicar el componente, obtener el componente y luego agregar una acción de clic.

¿Cómo localizar los componentes?

Hay tres métodos que utilizo aquí.

  1. uiautomator, viene con Android sdk, se puede usar fácilmente
  2. autoJs, que es una aplicación, también utiliza servicios de accesibilidad. Basado en los servicios de accesibilidad, se agrega una interfaz gráfica para facilitar la visualización en el teléfono móvil.
  3. Use el código para atravesar y verlo usted mismo.

análisis detallado:

Hay un texto de "salto" en la esquina superior derecha de la aplicación Nuggets para analizar la estructura de la vista, que probablemente sea el caso.

código falso

<FragmentLayout id:fl_skip > // 实际点击事件在这个

<ProgressBar >  // 这个是跳过效果的进度

<TextView text="跳过"> // 跳过的文字载体

</FragmentLayout>
复制代码

2.3 Obtener el componente de destino

Primero obtenga todos los componentes de la página actual -> luego obtenga el componente de destino

Use getRootInActiveWindow()para obtener todos los componentes
Use findAccessibilityNodeInfosByViewId(“”)para obtener todas las NodeLists que coincidan con este ID Use findAccessibilityNodeInfosByText()para obtener todas las NodeLists que coincidan con este texto

AccessibilityNodeInfo sourceNodeInfo = getRootInActiveWindow();
            if (sourceNodeInfo == null)
                return;

            List<AccessibilityNodeInfo> textNodeInfoList = sourceNodeInfo.findAccessibilityNodeInfosByViewId("com.daimajia.gold:id/fl_skip");
            if (textNodeInfoList.size() > 0) {
                textNodeInfoList.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK);
            }
            
复制代码

2.4 Establecer acción de clic

Después de encontrar la ubicación del objetivo AccessibilityNodeInfo, comenzamos la operación.

Comúnmente utilizados son

ACTION_CLICK: Acción para hacer clic en la información del nodo. ACTION_LONG_CLICK: haga clic y mantenga presionada la acción en el nodo. ACTION_COPY: La operación para copiar la selección actual al portapapeles. ACTION_CUT: Corta y pega la opción actual y colócala en el portapapeles. ACTION_FOCUS: La operación de agregar foco de entrada al nodo.

Podemos AccessibilityNodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);implementarlo para lograr el efecto.

2.5 Sección de código

Si desea implementar las funciones de otras aplicaciones, puede expandir el código.

código completo.

package com.demo.accessibilitydemo;

import android.accessibilityservice.AccessibilityService;
import android.text.TextUtils;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;

import java.util.List;

public class MyService extends AccessibilityService {

    private final String TAG = "MyService";

    public MyService() {
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

        Log.d(TAG, "package:" + event.getPackageName());

        String packageStr = event.getPackageName().toString();

        if (TextUtils.equals(packageStr, "com.daimajia.gold")) {
            AccessibilityNodeInfo sourceNodeInfo = getRootInActiveWindow();
            if (sourceNodeInfo == null)
                return;

            List<AccessibilityNodeInfo> textNodeInfoList = sourceNodeInfo.findAccessibilityNodeInfosByViewId("com.daimajia.gold:id/fl_skip");
            if (textNodeInfoList.size() > 0) {
                textNodeInfoList.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK);
            }

        }

    }

    @Override
    public void onInterrupt() {

    }

}

复制代码

Supongo que te gusta

Origin juejin.im/post/6999807957118484516
Recomendado
Clasificación