ナゲッツアプリのオープニング画面広告をスキップする方法(2)

8月のアップデートチャレンジに参加して24日目です。イベントの詳細については、8月のアップデートチャレンジをご覧ください。

ナゲッツアプリのオープニング画面広告をスキップする方法(2)

前回の記事では、オープンスクリーン広告をスキップしたいのは、携帯電話がボタンをクリックするのを助けてくれることだと分析し、跳过最終的にアクセシビリティサービスをテクノロジーとして選択しました。この記事では、広告機能をスキップするためのコードを実装します。

1.効果

プログラムによるクリックは跳过、手動によるクリックよりもはるかに高速です。

1629623520219210.gif

第二に、コードの実装

2.1キーコールバック

作成されたサービス継承AccessibilityServiceクラスの後、別のキーコールバックはonAccessibilityEventコールバックであり、ロジックはすべてこのメソッドにあります。

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

2.1パッケージ名の検索

特定のアプリまたは特定のアプリの下の広告のみをスキップしたい。

2つの方法

  1. xml構成ファイルのandroid:packageNames属性追加します
  2. サービスでパッケージ名を取得し、判断してください。
String packageStr = event.getPackageName().toString();

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

たとえば、取得したNuggetsアプリのパッケージ名は次のとおりです。com.daimajia.gold

ps:インターネットで検索したところ代码家、githubはこの人物がナゲットのCTOであることを示しています。

2.2ターゲットコンポーネントを見つける

クリックメソッドをコンポーネントに追加する場合は、最初にコンポーネントを見つけてコンポーネントを取得してから、クリックアクションを追加する必要があります。

コンポーネントを見つける方法は?

ここで使用する方法は3つあります。

  1. uiautomatorは、Android SDKが付属しており、簡単に使用できます
  2. アプリであるautoJsもユーザー補助サービスを利用しており、ユーザー補助サービスをベースに、携帯電話で見やすいグラフィカルインターフェースを追加しています。
  3. コードを使用して、自分でトラバースして表示します。

詳細な分析:

Nuggetsアプリの右上隅に、ビュー構造を分析するための「スキップ」テキストがあります。これはおそらく当てはまります。

偽のコード

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

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

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

</FragmentLayout>
复制代码

2.3ターゲットコンポーネントを取得する

最初に現在のページのすべてのコンポーネントを取得します->次にターゲットコンポーネントを取得します

getRootInActiveWindow()すべてのコンポーネントを取得
するために使用findAccessibilityNodeInfosByViewId(“”)するこのIDに一致するすべてのNodeListをfindAccessibilityNodeInfosByText()取得するために使用するこのテキストに一致するすべてのNodeListを取得するために使用する

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クリックアクションの設定

ターゲットの位置を見つけたらAccessibilityNodeInfo、操作を開始します。

一般的に使用される

ACTION_CLICK:ノード情報をクリックするアクション。ACTION_LONG_CLICK:ノード上のアクションをクリックして押したままにします。ACTION_COPY:現在の選択範囲をクリップボードにコピーする操作。ACTION_CUT:現在のオプションを切り取って貼り付け、クリップボードに配置します。ACTION_FOCUS:ノードに入力フォーカスを追加する操作。

効果を出すために実装AccessibilityNodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);できます。

2.5コードセクション

他のアプリの機能を実装したい場合は、コードを拡張できます。

完全なコード。

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() {

    }

}

复制代码

おすすめ

転載: juejin.im/post/6999807957118484516